Skip to main content
 首页 » 编程设计

python之在 python 应用程序 : ffmpeg tool or libav* libraries 中使用 FFmpeg

2025年05月04日26jillzhang

我正在开发一个使用 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 使用包装器的问题在于它本质上依赖于调用子进程,这看起来有些草率。尽管我不确定为什么我从内心深处反对子流程。

请您参考如下方法:

这有点见仁见智,但我建议在子进程中使用 ffmpeg CLI,只要您正在做它支持的事情,只使用 libav* 库,如果您有一些 CLI 无法真正满足的要求。

虽然您可以使用这些库获得更大的灵 active ,但 API 非常复杂,您可能会花费大部分时间来复制 CLI 已经完成的工作(ffmpeg.c,只是将库粘合在一起的主程序,就在附近4800 行,不包括它的 3700 行选项解析器)。很可能您会在此过程中添加一些错误 — 特别是如果您缺乏 C 知识。因此,如果您能让 CLI 执行您需要的操作,那无疑是阻力最小的途径。子进程并不丢人:这就是 Unix 方式!