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

6

我正在开展一项使用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*库执行此功能是否最佳选择?还是使用ffmpeg命令行工具的包装器(ffmpy)更好?我目前对每种方法的缺点的想法是使用库可能是最佳实践,但似乎过于复杂,需要学习如何使用它们(并且在此过程中可能需要学习C语言,我从未学过)。只是为了完成我上面提到的这两件基本事情。总体来说,这些库对我来说有点黑盒子,并且没有太多文档。但是使用ffmpeg的包装器的问题在于它基本上依赖于调用子进程,这似乎有点粗糙。虽然我不确定为什么我感觉如此反对子进程。


如果你不懂C语言,请坚持使用命令行实用程序。 - halfelf
1
这些库可能会有所帮助:https://pyav.org/docs/stable/ 和 https://pypi.org/project/Avpy/ - zardosht
1个回答

10

这有一定的主观性,但我建议只要你要做的事情它支持得好,就使用ffmpeg命令行界面作为子进程,只有在你有一些要求CLI无法满足时才使用libav*库。

虽然使用库可以获得更多的灵活性,但其API非常复杂,你可能会花费大部分时间来复制CLI已经完成的工作(ffmpeg.c是将库组合在一起的主程序,大约有4800行代码,不包括它的3700行选项解析器)。如果你缺乏C语言知识,很可能还会添加一些错误。因此,如果你能让CLI实现你需要的功能,那无疑是最省力的方法。在使用子进程方面没有什么可耻之处:这正是Unix的做法!


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