硬件加速
本教程共 32 篇 · 第 31 篇 · 更新于 2026-08-09 · 约 5 分钟阅读
本节目标:搞清硬件加速到底加速了什么,认识各平台的技术和编码器命名,能在自己的机器上用 GPU 编解码,不再把硬件加速当玄学。
CPU 编码质量好但慢,GPU/专用芯片编码快但同码率下质量略低。转一部 4K 电影软编码可能要几小时,硬编码几十分钟就能搞定。直播、录屏、批量转码,硬件加速是刚需。
一、硬件加速加速的是什么
视频处理有三个环节可能用到硬件:
- 硬解码:GPU 解码视频输入,降低 CPU 占用。
- 硬编码:GPU 编码视频输出,速度快、CPU 占用低。
- 硬件滤镜:在 GPU 内存里做缩放、去隔行等操作,避免数据在 CPU/GPU 之间来回拷贝。
最常见的用法是硬编码(编码器换成 h264_nvenc 之类)和硬解+硬编(输入输出都走 GPU)。纯硬解而用软编意义不大(除非只是为了降低播放时 CPU)。
先看你的 FFmpeg 支持哪些硬件加速:
ffmpeg -hwaccels
列出可用的硬件加速方法。再看支持哪些硬编码器:
ffmpeg -encoders | findstr nvenc # Windows
ffmpeg -encoders | grep -E "nvenc|qsv|vaapi|videotoolbox|amf"
二、各平台技术与命名
| 平台 | 解码 API | 编码 API | FFmpeg 编码器后缀 |
|---|---|---|---|
| NVIDIA 显卡 | NVDEC / CUVID | NVENC | _nvenc |
| Intel 核显 | Quick Sync | Quick Sync | _qsv |
| AMD 显卡 | AMF / UVD | AMF / VCE | _amf |
| Linux | VAAPI / VDPAU | VAAPI | _vaapi |
| macOS | VideoToolbox | VideoToolbox | _videotoolbox |
常见编码器完整名:
- NVIDIA:
h264_nvenc、hevc_nvenc、av1_nvenc(Ada Lovelace 及更新) - Intel QSV:
h264_qsv、hevc_qsv、av1_qsv - AMD:
h264_amf、hevc_amf、av1_amf - Linux VAAPI:
h264_vaapi、hevc_vaapi - macOS:
h264_videotoolbox、hevc_videotoolbox
三、NVIDIA NVENC(最常用)
N 卡的硬编质量和生态最成熟。
简单硬编
ffmpeg -i input.mp4 -c:v h264_nvenc -cq 23 output.mp4
-c:v h264_nvenc:用 NVENC 编码 H.264-cq 23:Constant Quality 模式,数值类似 CRF,越小质量越好(常用 20–28)- 也可以用
-b:v指定码率做 CBR/VBR
指定 preset(NVENC 的 preset 和 x264 不同):
ffmpeg -i input.mp4 -c:v h264_nvenc -preset p7 -cq 23 output.mp4
NVENC preset 从 p1(最快)到 p7(最慢质量最好),常用 p4–p6。
硬解 + 硬编(全 GPU 管线)
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input.mp4 \
-c:v h264_nvenc -cq 23 -c:a copy output.mp4
-hwaccel cuda 让解码走 GPU,-hwaccel_output_format cuda 让解码后的数据留在显存里,直接送给 NVENC,避免回传 CPU,速度最快。
HEVC / AV1
ffmpeg -i input.mp4 -c:v hevc_nvenc -cq 26 output.mp4
ffmpeg -i input.mp4 -c:v av1_nvenc -cq 30 output.mp4
AV1 硬编码需要 Ada Lovelace(RTX 40 系)或更新的 N 卡。
四、Intel QSV
Intel 核显用户用 QSV:
ffmpeg -i input.mp4 -c:v h264_qsv -global_quality 23 output.mp4
-global_quality 23类似 CRF/Q 值- preset 用
-preset veryfast|faster|medium|slow|veryslow
硬解硬编全管线:
ffmpeg -hwaccel qsv -c:v h264_qsv -i input.mp4 \
-c:v h264_qsv -global_quality 23 output.mp4
注意 QSV 的设备初始化在不同驱动下行为不同,Windows 上通常直接能用;Linux 上可能需要先 -init_hw_device qsv=hw。
五、Linux VAAPI
VAAPI 是 Linux 上的通用硬件加速接口,可驱动 Intel、AMD 显卡。
ffmpeg -vaapi_device /dev/dri/renderD128 -i input.mp4 \
-vf 'format=nv12,hwupload' -c:v h264_vaapi -b:v 4000k output.mp4
-vaapi_device指定 GPU 设备节点format=nv12,hwupload把帧上传到 GPU(VAAPI 要求 nv12 格式)- 码率用
-b:v,VAAPI 编码器对 CRF 支持有限
硬解硬编:
ffmpeg -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi \
-i input.mp4 -c:v h264_vaapi -b:v 4000k output.mp4
VDPAU 是 NVIDIA 早年为 Linux 推的解码 API,现在基本被 VAAPI 取代,新系统直接用 VAAPI 即可。
六、macOS VideoToolbox
苹果系统用 VideoToolbox:
ffmpeg -i input.mp4 -c:v h264_videotoolbox -b:v 4000k output.mp4
ffmpeg -i input.mp4 -c:v hevc_videotoolbox -q:v 65 output.mp4
-q:v取值 0–100,越大质量越好(和 CRF 方向相反),常用 50–75- Apple Silicon 的硬编效率很高,是 Mac 上的首选
七、AMD AMF
A 卡用 AMF:
ffmpeg -i input.mp4 -c:v h264_amf -quality quality -b:v 4000k output.mp4
ffmpeg -i input.mp4 -c:v hevc_amf -rc cqp -qp_i 24 -qp_p 24 output.mp4
AMF 的码率控制选项和 NVENC 不同,常用 -rc cqp(固定 QP)或 -rc vbr_peak。
八、硬件编码质量提示
Warning硬件编码器同码率下质量通常不如 x264/x265 软件编码。如果追求极致画质和体积,用 slow preset 的软编码;如果追求速度(直播、录屏、批量转 4K),硬编码是正确选择。不要在二者之间期待”又快又好”。
实际建议:
- 直播、屏幕录制:直接硬编,质量够用,CPU 不卡。
- 批量转码大量文件:硬编省时间,功耗也低。
- 电影归档、追求压缩率:用 libx265/libsvtav1 软编码,慢慢压。
- 不确定有没有硬编:先跑
ffmpeg -encoders | findstr nvenc(或对应后缀),有就用。
九、录屏 + 硬编组合
把第 30 章的采集和这章结合,Windows 上 N 卡录屏的高效命令:
ffmpeg -init_hw_device d3d11va -filter_complex ddagrab=0 \
-c:v h264_nvenc -cq 20 -preset p5 output.mkv
ddagrab 在 GPU 上抓帧,直接送给 NVENC,全程数据不回 CPU,是性能最优的录屏方案。
Note编码器名字不要臆造。比如没有
h264_cuda这个编码器(CUDA 是计算框架不是编码器),正确的是h264_nvenc。写命令前用ffmpeg -encoders查一下实际支持的名字,能避免大量”Unknown encoder”报错。