xrf*_*ang 5 ffmpeg hardware-acceleration
关于 ffmpeg 硬件加速的几个问题(我认为这与这个问题不是同一个问题):
如何判断我的 ffmpeg 版本是否支持硬件加速,以及它支持哪些加速功能?
从转码过程的输出中,我可以判断 ffmpeg 是否使用硬件加速吗?
我正在使用 ffmpeg 从摄像机中提取 H265 视频,并将其转换为 H264 HLS 块。现在的问题是转码过程过于占用CPU。我希望使用硬件加速。由于应用程序的原因,我无法使用昂贵的GPU,例如NVidia cuda平台。如果仅使用 CPU 自带的 Intel HD 显卡,转码 H265 => H264 时是否可以显着降低 CPU 使用率?预计性能增益是多少(%)?
谢谢。
小智 5
如果您的 CPU 支持例如 Intel Quick Sync,那么您可以使用硬件加速显着降低 CPU 负载(在下面的测试用例中,使用 libx264 的 90% 降至使用 h264_qsv 的 20%)。启用硬件加速解码后,CPU 负载从 20% 降低到 4%。所以总结起来就是从90%到4%。但负载还取决于其他因素,例如比特率、分辨率和 CPU/硬件。
首先您需要知道您的 FFmpeg 版本中启用了哪些编码器。要检查这一点,您可以简单地执行
ffmpeg -codecs
Run Code Online (Sandbox Code Playgroud)
在这里你应该找到你的目标编解码器(h264):
[...]
DEV.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_qsv h264_cuvid ) (encoders: libx264 libx264rgb h264_amf h264_mf h264_nvenc h264_qsv )
[...]
Run Code Online (Sandbox Code Playgroud)
请注意“编码器”。有些是软件编码器,有些是硬件编码器。此列表取决于您的操作系统和 FFmpeg 编译期间启用的编码器。要获取每个编码器的简短描述,您可以执行:
ffmpeg -encoders
[...]
V....D libx264 libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (codec h264)
V....D libx264rgb libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 RGB (codec h264)
V....D h264_amf AMD AMF H.264 Encoder (codec h264)
V....D h264_mf H264 via MediaFoundation (codec h264)
V....D h264_nvenc NVIDIA NVENC H.264 encoder (codec h264)
V..... h264_qsv H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (Intel Quick Sync Video acceleration) (codec h264)
[...]
Run Code Online (Sandbox Code Playgroud)
注意:并非所有编码器都可以真正工作。例如,如果您没有 NVIDIA 显卡,则 h264_nvenc 将无法工作。
在我的 Windows 计算机上,我将选择“h264_qsv”(英特尔快速同步视频加速)编码器。在 macOS 上,您想使用“h264_videotoolbox”:
ffmpeg -i mysource -c:v h264_qsv -c:a copy output.mp4
Run Code Online (Sandbox Code Playgroud)
注意输出质量:默认情况下,libx264 的质量可能比硬件加速编码器更好。因此,请确保使用定义的比特率(-b:v 6M 表示 6MBit)等对编码进行微调。
这使用 Intel Quick Sync 的 h264 编码器对输入进行编码(由于 -c:v 选项)。请在https://trac.ffmpeg.org/wiki/HWAccelIntro上找到更多详细信息
在输入 (-i) 之前使用选项“-hwaccel auto”也尝试使用硬件加速解码:
ffmpeg -hwaccel auto -i mysource .....
Run Code Online (Sandbox Code Playgroud)
如果硬件解码器可用,则会自动使用它。如果不是,那么 FFmpeg 将回退到软件解码器。检查控制台输出看看发生了什么:
[hevc @ 00000176c91d0fc0] Using auto hwaccel type dxva2 with new default device.
Run Code Online (Sandbox Code Playgroud)