什么是ffmpeg,avcodec,x264?

时间:2013-05-27 11:48:29

标签: ffmpeg libavcodec x264

wiki开始,我读到了

  

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

所以ffmpeg是avcodec的包装器?我经常听到人们使用ffmpeg用x264编码视频。所以ffmpeg也是x264的包装器?

他们是如何相关的?

1 个答案:

答案 0 :(得分:23)

首先,要澄清一些条款:

  • FFmpeg是一个软件项目,涉及很多人,一个Wiki,一个bug跟踪器,一些资金等。
  • ffmpeg是他们提供的工具之一(例如,其他工具为ffplayqt-faststart。)
  • Libav是FFmpeg项目的一个分支,它提供avconv二进制文件。它们都是独立开发的,但FFmpeg通常会合并来自Libav的提交 - 而不是相反的方式。 (有些人可能会说Libav患有NIH)。一些发行版决定发布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视频)
  • libfaac,libfdk-aac,用于AAC音频的libvo-aacenc
  • 了libmp3lame
  • libvorbis
  • libxvid

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

如前所述,其他编码器(如the one for MPEG-4)是FFmpeg的原生编码器,完全不依赖于外部库。

最后,there are several programs使用FFmpeg工具和库,无论是提供ffmpeg可执行文件,还是选择部分libavcodec和libavformat库。根据许可证允许这样做,使FFmpeg成为当今最受欢迎的多媒体工具集合。