在python应用程序中使用FFmpeg:ffmpeg工具还是libav *库?

时间:2017-09-05 02:52:21

标签: python ffmpeg libavcodec libav libavformat

我正在开发一个使用ffmpeg作为其核心功能的python项目。基本上我使用的ffmpeg的功能归结为这两个命令:

ffmpeg -i udp://<address:port> -qscale:v 2 -vf "fps=30" sttest%04d.jpg
ffmpeg -i udp://<address:port> -map data-re -codec copy -f data out.bin

非常简单的东西。

我正在尝试创建一个自包含程序(使用上述ffmpeg功能),可以轻松地安装在任何特定系统上,而不依赖于具有必要依赖关系的系统,希望我能打包那些与程序本身的依赖关系。

考虑到这一点,是否最好使用libav*库从程序中执行此功能?或者ffmpy命令行工具的包装器(ffmpeg)是更好的选择吗?我目前对各自缺点的思考是,使用库可能是最佳实践,但是必须学习如何使用它们(并且可能在此过程中学习C,我从未学过C)似乎过于复杂)只是做我上面提到的那两个基本的事情。这些图书馆对我来说有点像黑盒子,并且没有太多的文档。但是使用ffmpeg的包装器的问题在于它本质上依赖于调用子进程,这似乎有点草率。虽然我不确定为什么我觉得这么反对子过程。

1 个答案:

答案 0 :(得分:5)

这有点意见,但我建议在子流程中使用ffmpeg CLI,只要你做了它支持的事情,只使用{{ 1}} *库如果你有一些要求CLI无法真正满足的话。

尽管您可以更灵活地使用这些库,但API非常复杂,您可能会花费大部分时间来复制CLI已经执行的操作(ffmpeg.c,只是粘合库的主程序, 4800行,不包括其3700行选项解析器)。而且你可能会在此过程中添加一些错误 - 尤其是如果你缺乏C知识的话。因此,如果您可以让CLI完成您所需要的工作,那么这无疑是阻力最小的途径。子流程中没有羞耻:那就是Unix方式!