11

wiki,我读到了

FFmpeg 是一个免费软件项目,可生成用于处理多媒体数据的库和程序。FFmpeg 最值得注意的部分是 libavcodec,一个由其他几个项目使用的音频/视频编解码器库,libavformat,一个音频/视频容器复用和解复用库,以及用于转码多媒体文件的 ffmpeg 命令行程序。

那么ffmpeg是avcodec的封装吗?而且我经常听到人们使用 ffmpeg 使用 x264 对视频进行编码。那么ffmpeg也是x264的封装吗?

它们有什么关系?

4

1 回答 1

30

首先,澄清一些术语:

  • FFmpeg 是一个涉及很多人的软件项目,一个 Wiki、一个错误跟踪器、一些资金等。
  • ffmpeg是他们提供的工具之一(例如,其他工具是ffplayqt-faststart)。
  • Libav是提供avconv二进制文件的 FFmpeg 项目的分支。一些发行版决定在一段时间内发布 Libav 而不是 FFmpeg 程序,特别是 Ubuntu,这在 Libav 命令仍命名为ffmpeg. 当前的 Ubuntu 再次使用“真实” ffmpeg

ffmpeg正如您所说,该工具是用于处理多媒体内容的许多库的命令行包装器。这些包括:

虽然 FFmpeg 开发人员经常提供他们自己的编码器和解码器,但您可以启用在 libavcodec 中具有包装器的第三方库,以便将 FFmpeg 和x264(最流行的 H.264 编码器)“粘合”在一起。当“重新发明轮子”根本没有意义时,通常会这样做,如果一个人决定编写一个新的 H.264 编码器,目标是比 x264 更好,就会出现这种情况。在其他情况下,由于许可原因,某些库可能不会随ffmpeg构建一起提供,例如 libfaac——在这种情况下,ffmpeg它提供了原生 AAC 编码器。

常见的外部编码器包括:

  • libx264
  • libvpx(用于 VP8 和 VP9 视频)
  • 用于 AAC 音频的 libfaac、libfdk-aac、libvo-aacenc
  • libmp3lame
  • libvorbis
  • libxvid

对于所有这些,您将在 libavcodec 下找到包装器,例如对于 libx264,该文件libx264.c提供了将视频从 FFmpeg 内部格式推送到 x264 编码器的必要代码,然后将其传递给 libavformat 以将其写入文件. 实际的编码是通过 libx264 完成的。

如前所述,其他编码器(例如MPEG-4编码器)是 FFmpeg 的原生编码器,根本不依赖外部库。

最后,有几个程序使用了 FFmpeg 工具和库,无论是通过提供ffmpeg可执行文件,还是选择部分 libavcodec 和 libavformat 库。这是根据许可证允许的,并使 FFmpeg 成为当今最流行的多媒体工具集合。

于 2013-05-27T20:03:02.057 回答