欢迎光临
我们一直在努力

FFmpeg 在 Windows 上的硬加速全家桶:DXVA2、D3D11VA、QSV、NVENC、AMF 怎么选?

觉得有用,就请您帮忙点赞转发收藏吧,您的鼓励是我创作的动力,多谢看官。 由于能力水平有限,文中的错误或不严谨的地方在所难免,还请批评指正。

目录

一、Windows 硬加速的两条主线

二、各方案速查表

三、DXVA2:老朋友的守门员

四、D3D11VA:2026 年的事实标准

五、NVIDIA:NVDEC + NVENC 一条龙

六、Intel QSV:核显性价比之王

七、AMD:AMF 是正路,DXVA2/D3D11VA 是通用后路

八、选型建议(直接抄)

九、三个最常崩的点

十、总结


 

做 Windows 视频播放器或转码工具时,最容易被 FFmpeg 的 -hwaccel参数劝退:

dxva2、d3d11va、cuda、qsv、amf一长串,到底谁是解码、谁是编码、谁是新坑、谁能零拷贝?这篇按“博客风格”把地图铺开。

一句话总览:解码看显卡厂商和系统 API,编码看厂商私有编码器;新项目默认 D3D11VA,老兼容留 DXVA2,Intel 用 QSV,NVIDIA 用 CUDA/NVENC,AMD 用 AMF。


一、Windows 硬加速的两条主线

FFmpeg 在 Windows 上其实分两大类:

  • 系统级通用解码 API(不挑厂商)

    • DXVA2(D3D9 时代)

    • D3D11VA(D3D11 时代,当前主力)

    • D3D12VA(Win11 / 新卡 / AV1 前瞻)

  • 厂商私有加速栈(解码+编码一体)

    • NVIDIA:CUDA / NVDEC(解) + NVENC(编)

    • Intel:QSV(libmfx / oneVPL)

    • AMD:AMF(解+编,也可走 DXVA2/D3D11VA 解码)

  • DXVA2/D3D11VA 主要负责解码,编码能力弱;真要硬编,还是得靠 NVENC / QSV / AMF。


    二、各方案速查表

    方案

    底层 API

    解码

    编码

    适用场景

    dxva2

    Direct3D 9 + DXVA2

    ✅ H264/HEVC/VP9

    Win7 老机器、Legacy 播放器

    d3d11va

    Direct3D 11

    ✅ H264/HEVC/VP9/AV1(新驱动)

    新播放器默认选它​

    d3d12va

    Direct3D 12

    ✅ 新格式优先

    游戏引擎/云游戏/极客

    cuda/nvdec

    CUDA Driver

    ✅ 全格式强

    ❌(解)

    N 卡转码

    nvenc

    NVENC

    ✅ H264/HEVC/AV1

    N 卡转码标配

    qsv

    Intel Media SDK

    ✅ H264/HEVC/AV1

    核显软硬通吃

    amf

    AMD AMF

    ✅(AMF路径)

    ✅ H264/HEVC

    A 卡转码


    三、DXVA2:老朋友的守门员

    DXVA2 基于 D3D9,FFmpeg 里用:

    ffmpeg -hwaccel dxva2 -i input.mp4 -f null –

    特点:

    • Win7 起步就能用,AMD/Intel/NVIDIA 都暴露

    • 解码表面是 IDirect3DSurface9

    • 不支持 AV1 老卡,新格式靠驱动

    • 编码几乎不管,只能配合软件编码器 libx264

    适合:维护老播放器、嵌入式 WebView、Win7 客户机。


    四、D3D11VA:2026 年的事实标准

    D3D11VA 把解码表面直接变成 D3D11 Texture,和 Qt/SDL/自绘渲染管线零拷贝集成:

    ffmpeg -hwaccel d3d11va -hwaccel_output_format d3d11 -i input.mp4 -c:v libx264 out.mp4

    如果你自己写渲染:

    • 拿 AVFrame->data[0]当 ID3D11Texture2D*

    • 用 VideoProcessor做缩放比 StretchRect更干净

    • 窗口 resize 不用 Reset,不碰解码器

    官方建议:新通用 Windows 应用,默认 D3D11VA。

    注意:只解码不转码时,别强行接软件滤镜;要拿 CPU 数据就 hwdownload,format=nv12。


    五、NVIDIA:NVDEC + NVENC 一条龙

    N 卡玩家最爽,解码 NVDEC、编码 NVENC,全程显存:

    ffmpeg -hwaccel cuda -hwaccel_output_format cuda \\
    -i in_hevc.mp4 -c:v h264_nvenc -preset p5 out.mp4

    要点:

    • -hwaccel cuda实际走 NVDEC

    • -hwaccel_output_format cuda避免 GPU→CPU→GPU 拷贝

    • 缩放用 scale_cuda,别用普通 scale

    • 多卡用 -hwaccel_device 0

    转码场景性能碾压 DXVA2,但播放器里一般不选它——因为 CUDA 上下文比 D3D11 重,且和 Qt 窗口系统集成不如 D3D11VA 自然。


    六、Intel QSV:核显性价比之王

    Intel 独门 Quick Sync,解码编码都给力:

    ffmpeg -hwaccel qsv -c:v hevc_qsv -i in.mp4 -c:v h264_qsv out.mp4

    • 依赖 libmfx或新 oneVPL

    • Win 上比 VAAPI 省心,老笔记本核显转码神器

    • 缺点:换机器要装 Intel Media SDK 运行时,部署比 DXVA2 麻烦


    七、AMD:AMF 是正路,DXVA2/D3D11VA 是通用后路

    A 卡解码走系统 API,编码走 AMF:

    # D3D11 解码 + AMF 编码
    ffmpeg -hwaccel d3d11va -hwaccel_output_format d3d11 \\
    -i in.mp4 -c:v hevc_amf out.mp4

    或者纯 AMF 管道(零拷贝):

    ffmpeg -hwaccel amf -hwaccel_output_format amf \\
    -i in.mp4 -c:v hevc_amf out.mp4

    AV1 码流别用 DXVA2 老路径,D3D11VA + AMF 更稳。


    八、选型建议(直接抄)

    • 写新播放器(Qt/Win32):d3d11va解码 + 自绘 SwapChain 渲染

    • 兼容 Win7 客户:dxva2解码,渲染逻辑按你前面那套来

    • 桌面转码工具:N 卡 cuda+nvenc,Intel qsv,AMD d3d11va+amf

    • 浏览器内核/老 IE 控件:只能 DXVA2

    • AV1 新片源 + Win11:优先 d3d11va或 d3d12va

    • 命令行快速验证:

      ffmpeg -hwaccel auto -i in.mp4 -f null –


    九、三个最常崩的点

  • 硬解帧直接送软件滤镜​ → 报 Impossible to convert between formats,必须 hwdownload

  • 最小化恢复黑屏​ → 不是解码器丢了,是没缓存末帧 AVFrame重画

  • 官方下载版没编译硬加速​ → 用 BtbN / GyFFmpeg 构建,或自己 –enable-d3d11va –enable-cuda –enable-nvenc –enable-libmfx


  • 十、总结

    Windows 上的 FFmpeg 硬加速,本质是把“微软通用 API + 三家厂商私有栈”缝在一起。

    DXVA2 是退休老员工,D3D11VA 是现任主管,NVENC/QSV/AMF 是外援突击队。​

    播放器别碰编码栈,转码工具别用 DXVA2 当主力,基本就不会走偏。

    赞(0)
    未经允许不得转载:171主机测评 » FFmpeg 在 Windows 上的硬加速全家桶:DXVA2、D3D11VA、QSV、NVENC、AMF 怎么选?
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址