如何检查FFmpeg硬件加速状态

3

关于使用ffmpeg进行硬件加速的几个问题(我认为这不是this one中的同一个问题):

  1. 如何判断我的ffmpeg版本是否支持硬件加速,以及它支持哪些加速特性?

  2. 从转码过程的输出中,我能否判断ffmpeg是否正在使用硬件加速?

  3. 我正在使用ffmpeg从摄像头中提取H265视频,并将其转换为H264 HLS块。现在的问题是转码过程太耗费CPU资源了。我希望使用硬件加速。由于应用程序的限制,我不能使用昂贵的GPU,例如NVidia cuda平台。如果只使用CPU附带的Intel HD图形,当转码H265 => H264时,我能否显著降低CPU使用率?预计性能提升百分比是多少?

谢谢。

1个回答

5
如果您的CPU支持例如英特尔快速同步,则可以使用硬件加速显著减少CPU负载(在我的测试案例中,使用libx264时为90%,使用h264_qsv时为20%)。启用硬件加速解码后,将CPU负载从20%降至4%。因此,总结一下,从90%到4%。但负载还取决于其他事情,如比特率,分辨率和CPU /硬件。

编码

首先,您需要知道在您的FFmpeg版本中已启用了哪些编码器。要检查这一点,只需执行:

ffmpeg -codecs

在这个地方,您应该找到您的目标编解码器(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 )
[...]

请注意“编码器”。有些是软件编码器,有些是硬件编码器。此列表取决于您的操作系统和在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)
[...]

注意:并非所有的编码器都能正常工作。例如,如果您没有NVIDIA显卡,则h264_nvenc将无法工作。
在我的Windows机器上,我将选择"h264_qsv"(英特尔Quick Sync视频加速)编码器。在macOS上,您需要使用"h264_videotoolbox"。
ffmpeg -i mysource -c:v h264_qsv -c:a copy output.mp4

请注意输出质量:libx264 可能比硬件加速编码器默认具有更好的质量。因此,请确保使用定义的比特率进行编码优化(例如 -b:v 6M 表示 6 兆比特)。
这将使用英特尔 Quick Sync 的 h264 编码器对输入进行编码(因为使用了 -c:v 选项)。请在以下链接https://trac.ffmpeg.org/wiki/HWAccelIntro上找到更多详细信息。
解码
在输入(-i)之前使用选项“-hwaccel auto”尝试使用硬件加速解码。
ffmpeg -hwaccel auto -i mysource .....

如果有硬件解码器可用,则自动使用。否则,FFmpeg将退回到软件解码器。请检查控制台输出以查看发生了什么:
[hevc @ 00000176c91d0fc0] Using auto hwaccel type dxva2 with new default device.

ffmpeg -codecs 的输出显示:DEV.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (解码器: h264 h264_v4l2m2m h264_qsv ) (编码器: libx264 libx264rgb h264_omx h264_qsv h264_v4l2m2m h264_vaapi ),转码过程显示:[hevc @ 0x561e69691a00] Using auto hwaccel type vaapi with new default device. 我可以看到有"qsv"、"vaapi"等等。但我十分确定它仍在使用软件解码,因为我的i7-7700T上的ffmpeg CPU使用率约为320%。 - xrfang
你能分享一下你正在使用的完整命令吗? - martinr92

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接