Vic*_*ard 1 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
Run Code Online (Sandbox Code Playgroud)
很简单的东西。
我正在尝试创建一个自包含的程序(使用上述ffmpeg功能),可以轻松地将其安装在任何特定系统上,而无需依赖具有必要依赖项的系统,因为我希望将这些依赖项与程序本身打包在一起。
考虑到这一点,最好在程序中使用这些libav*库来执行此功能吗?还是ffmpy使用ffmpeg命令行工具的包装器()更好?我目前对每种弊端的想法是,使用库可能是最佳实践,但是要学会使用它们似乎很复杂(并且可能会学习C,这是我从未学过的C)。做我上面提到的两个基本的事情。总体而言,这些库对我来说有点黑匣子,并且没有太多的文档。但是,使用包装器的问题ffmpeg在于它本质上依赖于调用子进程,这似乎有些草率。尽管我不确定为什么我会如此强烈地反对子流程。
这似乎有点意见,但是我建议ffmpeg您在子进程中使用CLI,只要您做的事情能够很好地支持它即可,只有在libav您对CLI不能真正满足的要求时才使用*库。
尽管您可以使用这些库获得更大的灵活性,但是该API十分复杂,您可能会花费大部分时间来复制CLI的功能(ffmpeg.c,只是将库粘合在一起的主程序,大约4800行,不包括其3700行选项解析器)。而且您可能会在此过程中添加一些错误-特别是如果您缺乏C知识。因此,如果您可以让CLI进行所需的工作,那么毫无疑问,这就是阻力最小的途径。子过程中没有羞辱:这就是Unix方式!