是否可以执行ffmpeg并且不使用他们的库?

时间:2017-07-18 11:30:22

标签: c++ qt ffmpeg qt5 execution

我需要从视频中提取音频并保存。 FFmpeg有此命令。我想知道从我的代码执行ffmpeg是不是一种正确的方法,而不是用他们的API函数编写代码。

缺乏这种方法是我使用Qt Framework并需要跨平台应用程序。有时候(特别是在windows中,因为PATH变量没有自动设置所以调用ffmpeg不起作用)用户需要指定可执行文件的路径才能在命令行中运行。

所以这两种变体都可以实现,但哪种变体是最好的?

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

感谢您的任何建议!

2 个答案:

答案 0 :(得分:3)

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

使用libav API确实相当棘手。我想提一下(一般来说(取决于编解码器)ffmpeg和libav不应该被认为是稳定的,你也应该产生一个单独的进程来保护主要可执行文件在这种情况下不会发生潜在的崩溃。因此,与第一种方法相比,这种方法的复杂性要高得多。

答案 1 :(得分:0)

声明:我自己从未将Qt与ffmpeg一起使用,但尤其对Qt有很多经验。

Qt倾向于尝试在其库中包含所有内容,为方便起见包装许多其他内容。大多数时候(我测试的所有那些),仍然可以很容易地使用原始库而没有麻烦,但Qt便于集成。

举个例子:QOpenGLWidgetOpenGL及其小部件系统的包装器,添加了signalsslots等等。我使用普通的OpenGL进行了一些测试工作得很好。

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

考虑到您的用例,尤其是您使用ffmpeg进行后台处理而不是用于显示视频,您可能会继续IMO的成功概率很高。