C++ 在没有硬件加速的情况下使用ffmpeg(C+;+;)

C++ 在没有硬件加速的情况下使用ffmpeg(C+;+;),c++,video,ffmpeg,C++,Video,Ffmpeg,我正在开发一个应用程序(c++/Linux),它使用ffmpeg 3.4库进行视频编码。由于3.3版硬件加速在平台支持的情况下默认启用。my dev系统中的图形卡支持硬件加速,但该工具也必须在不支持硬件加速的旧系统上运行。 如何配置ffmpeg以禁用视频编码的硬件加速?有很多关于启用的信息,但我就是找不到如何禁用它 附言。 已经有一个类似的问题了:但是它已经有一年了,不幸的是仍然没有答案。我找不到任何参考资料,所以我认为默认情况下启用了对硬件加速的支持(有一个配置选项来禁用它,--禁用hAcce

我正在开发一个应用程序(c++/Linux),它使用ffmpeg 3.4库进行视频编码。由于3.3版硬件加速在平台支持的情况下默认启用。my dev系统中的图形卡支持硬件加速,但该工具也必须在不支持硬件加速的旧系统上运行。 如何配置ffmpeg以禁用视频编码的硬件加速?有很多关于启用的信息,但我就是找不到如何禁用它

附言。
已经有一个类似的问题了:但是它已经有一年了,不幸的是仍然没有答案。

我找不到任何参考资料,所以我认为默认情况下启用了对硬件加速的支持(有一个
配置
选项来禁用它,
--禁用hAccels
)。您仍然需要编写代码来实现它。就我所见,本文介绍了命令行的用法

解码(内部):

  • 对于内部硬件解码器,您必须遵循
    doc/examples/HW_decode.c
解码/编码(外部)

  • 必须使用
    avcodec\u find\u decoder\u by\u name
    /
    avcodec\u find\u encoder\u by\u name
    功能专门选择硬件加速编码器/解码器
  • 这些编码器的命名约定通常是
    codec\u api
    (例如:
    h264\u nvenc
    ),它们根据使用的SDK有特定的选项
  • 没有软件回退,因此您必须事先检查设备功能

avcodec\u find\u encoder
返回给定CodecID(例如
AV\u CODEC\u ID\u H264
)的注册编码器,在本例中,该编码器是
H264\u envennc
,因为该代码构建在具有最新nvidia图形卡的系统上。现在,我使用
avcodec\u find\u encoder\u by\u name
做了一个变通方法,首先查找一些特定的注册软件编码器(例如libx264),如果没有找到任何内容,最后返回到“avcodec\u find\u encoder”。感谢您的回答。@MadMarky因此选择了
h264\u-invenc
,即使启用了
libx264
?显然,由于版本3.3,ffmpeg总是选择硬件加速而不是软件编码器。@MadMarky最近添加了一个用于迭代编解码器的新API,但是。所以目前git版本与3.4不同。您最好使用
avcodec\u按名称查找\u encoder\u
。如果您指定特定的编码器,它应该是基于名称的“软件或硬件”。。。