不使用硬件加速的情况下使用ffmpeg(C ++)

3
我正在开发一个使用ffmpeg 3.4库进行视频编码的应用程序(c++/Linux)。自从3.3版本以来,如果平台支持,则默认启用硬件加速。我的开发系统中的显卡支持硬件加速,但该工具还必须在不支持硬件加速的旧系统上运行。
如何配置ffmpeg以禁用视频编码的硬件加速?已经有很多关于启用的信息,但我找不到如何禁用它。
附注: 已经有一个类似的问题:How to turn off ffmpeg hardware acceleration,但是它已经一年了,不幸的是仍然没有答案。

1
如果您指定了特定的编码器,它应该是“软件或硬件”基于名称我相信... - rogerdpack
1个回答

2
我找不到任何参考资料,因此我认为硬件加速的支持默认是启用的(有一个“configure”选项可以禁用它,“--disable-hwaccels”)。你仍然需要编码才能实现它。据我所见,wiki涵盖了命令行用法。
解码(内部):
对于内部HW解码器,您必须遵循doc/examples/hw_decode.c中的示例。
解码/编码(外部):
您必须使用avcodec_find_decoder_by_name/avcodec_find_encoder_by_name函数明确选择硬件加速的编码器/解码器。 这些编码器的命名约定通常是codec_api(例如:h264_nvenc),并且根据它们使用的SDK具有特定的选项。 没有软件回退,因此您必须预先检查设备功能。

avcodec_find_encoder 返回给定 CodecID(例如 AV_CODEC_ID_H264)的已注册编码器,而在这种情况下,由于代码是在一个相当新的 NVIDIA 显卡系统上构建的,因此返回的编码器是 h264_nvenc。 现在,我使用 avcodec_find_encoder_by_name 进行了一些变通,首先查找一些特定的已注册软件编码器(例如 libx264),如果没有找到任何内容,则最终回归到 avcodec_find_encoder。感谢您的答案。 - MadMarky
@MadMarky 所以即使启用了 libx264,它也会选择 h264_nvenc 吗? - aergistal
显然自版本3.3以来,FFmpeg总是选择硬件加速而不是软件编码器。 - MadMarky
最近添加了一个新的API来迭代编解码器,但似乎存在争议。因此,当前的git版本与3.4不同。您最好使用avcodec_find_encoder_by_name。@MadMarky - aergistal

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