转码太慢?彻底搞懂硬件加速转码(NVENC / QSV / AMF)
用 CPU 软编码(libx264/libx265)转一个 4K 视频,耗时可能比视频本身还长,CPU 还被吃得满满当当。如果你有独立显卡或带核显的 Intel CPU,完全可以交给硬件编码器,速度能快 5 到 20 倍,几乎不占 CPU。这篇文章把三类主流硬件编码(NVIDIA NVENC、Intel QSV、AMD AMF)的原理、用法、质量调优和坑一次讲透。
一、软编 vs 硬编到底差在哪
- 软编(libx264/libx265):纯 CPU 计算,质量/体积比最好,但慢、吃 CPU、高分辨率下极其耗时;
- 硬编(NVENC 等):显卡上的专用编码电路(ASIC)干活,极快、几乎不占 CPU,但同码率下画质略逊于软编顶级参数。
经验法则:追求速度、批量转、实时转、低延迟用硬编;追求极限画质、压体积用软编。
二、查看本机支持什么
ffmpeg -hide_banner -encoders | grep -iE "nvenc|qsv|amf"
Linux 下用 grep,能看到 h264_nvenc、hevc_nvenc、h264_qsv、h264_amf 等就说明支持(前提是你装的 ffmpeg 编译时带了对应该硬件的后端)。
三、NVIDIA NVENC(最常见)
ffmpeg -i input.mp4 -c:v h264_nvenc -preset p4 -b:v 4M output.mp4
-preset p1~p7:速度/质量档,p1 最快最差,p7 最慢最好,默认 p4;- H.265 编码器叫
hevc_nvenc; - 新架构(Turing 及以后)NVENC 质量已非常接近软编。
完整质量调优:
ffmpeg -i input.mp4 -c:v h264_nvenc -preset p6 \
-rc vbr -cq 24 -b:v 4M -maxrate 6M -bufsize 8M \
-c:a copy output.mp4
-rc vbr -cq 24:恒定质量模式(类似 CRF);-maxrate/-bufsize:限制峰值码率,防波动。
四、Intel QSV(核显)
ffmpeg -init_hw_device qsv=hw -filter_complex "format=nv12,hwupload" \
-i input.mp4 -c:v h264_qsv -b:v 4M output.mp4
老版本需要先 -init_hw_device qsv=hw。QSV 对 Intel 核显(尤其笔记本)极其实用,功耗低。
五、AMD AMF
ffmpeg -i input.mp4 -c:v h264_amf -b:v 4M output.mp4
六、各硬件能力对照(概览)
| 方案 | 速度 | 同码率画质 | 设备 | 典型限制 |
|---|---|---|---|---|
| libx264 | 1× | 最好 | 任意 CPU | 慢 |
| NVENC | 8–20× | 略逊 | N 卡 | 老卡不支持 HEVC/AV1 |
| QSV | 5–10× | 中 | Intel 核显 | 质量参数较少 |
| AMF | 5–12× | 中 | A 卡 | 质量调优空间有限 |
七、硬解 + 硬编一条龙(不落 CPU)
只编码用硬编还不够,解码也走硬件才彻底:
ffmpeg -hwaccel cuda -i input.mp4 -c:v h264_nvenc -b:v 4M output.mp4
-hwaccel cuda 让解码也在 GPU 上完成,全程数据不绕 CPU,适合实时转封装/转码。H.264 解码器名 h264_cuvid,H.265 用 hevc_cuvid。
八、什么时候不该用硬编
- 你要压到极限体积(硬编同码率画质略差,CMAQ 类极致压缩软编更优);
- 目标设备不支持硬编输出格式;
- 硬编对极端参数(如超高 CRF)支持不如软编灵活。
九、常见翻车现场
| 现象 | 根因 | 解法 |
|---|---|---|
Device not found |
没装驱动/ffmpeg 没编进去 | 装显卡驱动、换带 hwaccel 的 ffmpeg |
| 色彩发灰 | 硬编默认 limited range | 加 -color_range/显式指定 |
| 最大分辨率受限 | 老显卡规格 | 查显卡规格或先缩分辨率 |
| 多路并发掉速 | 编码器会话数到顶 | 控制并发数 |
| 输出打不开 | 用了太新/太偏的 profile | 用兼容 profile(如 main) |
十、常见问题
Q:硬编能压 H.265 吗? 能,用 hevc_nvenc/hevc_qsv,但老显卡可能不支持 HEVC 编码。
Q:和软编画质差很多吗? 同码率下略差,但新架构 NVENC 差距已经很小,换来几倍到十几倍速度,多数场景值得。
Q:能多卡并行吗? 能,多张卡用 -gpu/设备索引分别指定,分别起进程。
Q:直播推流能用吗? 能,硬编低延迟正是直播推流(OBS、ffmpeg RTMP)的标配。
小结
硬编是"用专用电路换速度",NVENC/QSV/AMF 三选一取决于你的显卡。记住:调质量用 -rc vbr -cq,解码也上 -hwaccel 才彻底,老卡注意格式支持。批量/实时转码首选硬编,极限画质再回软编。