C++ 可以执行ffmpeg而不使用其库吗?

C++ 可以执行ffmpeg而不使用其库吗?,c++,qt,ffmpeg,qt5,execution,C++,Qt,Ffmpeg,Qt5,Execution,我需要从视频中提取音频并保存它。FFmpeg具有用于此目的的命令。我想知道从我的代码中执行ffmpeg而不是用API函数编写代码是否正确 这种方法的不足之处在于我使用Qt框架,需要跨平台应用程序。有时(特别是在windows中,因为PATH变量不会自动设置,所以调用ffmpeg不起作用),用户需要指示要在命令行中运行的可执行文件的路径 所以这两种变体都有可能实现,但哪一种是最好和正确的呢 我真的不想使用他们的API,因为它不太容易理解,而且需要花时间编写自己的代码 谢谢你的建议 免责声明:我本人

我需要从视频中提取音频并保存它。FFmpeg具有用于此目的的命令。我想知道从我的代码中执行ffmpeg而不是用API函数编写代码是否正确

这种方法的不足之处在于我使用Qt框架,需要跨平台应用程序。有时(特别是在windows中,因为PATH变量不会自动设置,所以调用ffmpeg不起作用),用户需要指示要在命令行中运行的可执行文件的路径

所以这两种变体都有可能实现,但哪一种是最好和正确的呢

我真的不想使用他们的API,因为它不太容易理解,而且需要花时间编写自己的代码


谢谢你的建议

免责声明:我本人从未将Qt与
ffmpeg
一起使用过,但对Qt尤其有丰富的经验

Qt倾向于尝试将所有内容都放在他们的库中,为方便起见包装许多其他内容。大多数情况下(所有我测试过的),仍然可以很容易地使用原始库而不会出现问题,但是Qt有助于集成

例如:
QOpenGLWidget
OpenGL
及其小部件系统的包装,添加了
信号
插槽
,等等。我使用普通OpenGL做了一些测试,效果很好

在另一个项目中,我们(我的团队,尤其不是我)使用ffmpeg在QtWidget上显示视频。它可以处理有限的问题(由于其他架构要求)


考虑到您的使用案例,尤其是您正在使用
ffmpeg
进行后台处理,而不是显示视频,您可能会获得很高的成功概率。

在您的案例中,使用独立的ffmpeg似乎是首选。您必须将ffmpeg及其依赖项与应用程序捆绑在一起。但是,无需设置或使用
PATH
或其他环境变量来启动ffmpeg。您应该通过提供ffmpeg可执行文件的完整路径来实现


使用libavapi确实相当棘手。我想指出的是,一般来说(取决于编解码器),ffmpeg和libav不应该被认为是稳定的,在这种情况下,您应该生成一个单独的进程来保护主可执行文件不受潜在崩溃的影响。所以,和第一种方法相比,这种方法的复杂性要高得多。

在“将ffmpeg与应用程序捆绑在一起”下,您是什么意思?我只需要在用户的机器上安装ffmpeg,并找到ffmpeg可执行文件的完整路径,如您所说。然后运行类似的操作:QProcess savingProcess。。。savingProcess.start(“\”C:/Program Files/FFmpeg/FFmpeg.exe\”-i\”C:/Users/Mikhail/Downloads/video.wmv\”-f mp3-vn\”C:/Users/Mikhail/Videos/extract_audio.mp3\”;嗯,在用户的机器上查找ffmpeg可能相当棘手。在这种情况下,可能更好的解决方案是允许用户手动指定ffmpeg位置。您也可以使用包装器库来实现这一点,它提供了更简单的API。一个快速的搜索给了我这样的信息:但可能还有其他的。还有一个是为VLC设计的,专门为Qt设计的(所以可能是一个不错的选择)。VLC在引擎盖下使用ffmpeg。