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

Using FFmpeg within a python application: ffmpeg tool or libav* libraries?

我正在开发一个 python 项目,该项目使用 ffmpeg 作为其核心功能的一部分。本质上,我使用的 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 无法真正满足的要求,请使用库。

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