我正在使用一些基于 gstreamer 的应用程序和一些其他流媒体内容,我遇到了一些困惑:libav 和 ffmpeg 之间有什么区别?
我没有找到任何解释它们是什么以及它们有何不同。甚至一个工具名为 ffmpeg,而另一个工具也有同样的东西。甚至那些项目徽标都相同。更糟糕的是,甚至使用它们的外部应用程序也会错误命名它们,混淆它们(gstreamer-0.10 指的是 ffmpeg,而 gstreamer-1.0 指的是 libav)。
有没有简单的方法可以找出应用程序真正需要和使用哪个库?项目分裂的原因是否存在技术差异(非政治软件许可废话)?我应该知道什么时候应该使用它们?
更新:有人在评论中贴出了与两个图书馆的历史和有用信息相关的问题的链接。但我怀疑我的问题是否完全相同:
- 我要求方法本身来检测库。
- 列出或类似的东西,警告甚至提示各个库如何工作不同,而不是哪个更好的意见,也不是许可社区如何彼此不同。
答案1
很久以前有一个名为 FFmpeg 的项目。FFmpeg 项目创建了一个名为 的程序ffmpeg
。在项目早期的某个时候,人们决定将 FFmpeg 分解为较小的库,以便其他人可以在他们的应用程序中使用。这些库被称为 libav*。它们包括 livavformat、libavcodec、libavutil 等。该ffmpeg
应用程序只是一种通过命令行与这些库交互的方式。
在某些时候,FFmpeg 的一些贡献者不喜欢项目的管理方式(我认为他们希望发布更多不太重视稳定性和向后兼容性的版本,但我可能错了),所以他们脱离了项目。他们开始修复不一致的 API、添加新的编解码器等。他们发布了 CLI 前端,以avconv
替换ffmpeg
可执行文件。许多预期会ffmpeg
在系统上看到的软件都坏了。因此avconv
可执行文件被重命名ffmpeg
。
现在,Libav 项目正在利用 libav* 库进行良好的工作。因此,FFmpeg 项目开始纳入 Libav 所做的更改。从而使界限更加模糊。
那么,回答你的问题。你不需要考虑太多政治问题,但两者之间的一些命令/API 可能略有不同。不过,这应该不是什么大问题。你可以把它们看作是同一事物的不同版本。