从wiki,我读到了
FFmpeg 是一个免费软件项目,可生成用于处理多媒体数据的库和程序。FFmpeg 最值得注意的部分是 libavcodec,一个由其他几个项目使用的音频/视频编解码器库,libavformat,一个音频/视频容器复用和解复用库,以及用于转码多媒体文件的 ffmpeg 命令行程序。
那么ffmpeg是avcodec的封装吗?而且我经常听到人们使用 ffmpeg 使用 x264 对视频进行编码。那么ffmpeg也是x264的封装吗?
它们有什么关系?
从wiki,我读到了
FFmpeg 是一个免费软件项目,可生成用于处理多媒体数据的库和程序。FFmpeg 最值得注意的部分是 libavcodec,一个由其他几个项目使用的音频/视频编解码器库,libavformat,一个音频/视频容器复用和解复用库,以及用于转码多媒体文件的 ffmpeg 命令行程序。
那么ffmpeg是avcodec的封装吗?而且我经常听到人们使用 ffmpeg 使用 x264 对视频进行编码。那么ffmpeg也是x264的封装吗?
它们有什么关系?
首先,澄清一些术语:
ffmpeg
是他们提供的工具之一(例如,其他工具是ffplay
和qt-faststart
)。avconv
二进制文件的 FFmpeg 项目的分支。一些发行版决定在一段时间内发布 Libav 而不是 FFmpeg 程序,特别是 Ubuntu,这在 Libav 命令仍命名为ffmpeg
. 当前的 Ubuntu 再次使用“真实” ffmpeg
。ffmpeg
正如您所说,该工具是用于处理多媒体内容的许多库的命令行包装器。这些包括:
虽然 FFmpeg 开发人员经常提供他们自己的编码器和解码器,但您可以启用在 libavcodec 中具有包装器的第三方库,以便将 FFmpeg 和x264(最流行的 H.264 编码器)“粘合”在一起。当“重新发明轮子”根本没有意义时,通常会这样做,如果一个人决定编写一个新的 H.264 编码器,目标是比 x264 更好,就会出现这种情况。在其他情况下,由于许可原因,某些库可能不会随ffmpeg
构建一起提供,例如 libfaac——在这种情况下,ffmpeg
它提供了原生 AAC 编码器。
常见的外部编码器包括:
对于所有这些,您将在 libavcodec 下找到包装器,例如对于 libx264,该文件libx264.c
提供了将视频从 FFmpeg 内部格式推送到 x264 编码器的必要代码,然后将其传递给 libavformat 以将其写入文件. 实际的编码是通过 libx264 完成的。
如前所述,其他编码器(例如MPEG-4编码器)是 FFmpeg 的原生编码器,根本不依赖外部库。
最后,有几个程序使用了 FFmpeg 工具和库,无论是通过提供ffmpeg
可执行文件,还是选择部分 libavcodec 和 libavformat 库。这是根据许可证允许的,并使 FFmpeg 成为当今最流行的多媒体工具集合。