我正在开发一个使用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
的包装器的问题在于它本质上依赖于调用子进程,这似乎有点草率。虽然我不确定为什么我觉得这么反对子过程。
答案 0 :(得分:5)
这有点意见,但我建议在子流程中使用ffmpeg
CLI,只要你做了它支持的事情,只使用{{ 1}} *库如果你有一些要求CLI无法真正满足的话。
尽管您可以更灵活地使用这些库,但API非常复杂,您可能会花费大部分时间来复制CLI已经执行的操作(ffmpeg.c,只是粘合库的主程序, 4800行,不包括其3700行选项解析器)。而且你可能会在此过程中添加一些错误 - 尤其是如果你缺乏C知识的话。因此,如果您可以让CLI完成您所需要的工作,那么这无疑是阻力最小的途径。子流程中没有羞耻:那就是Unix方式!