什么是ffmpeg、avcodec、x264? [关闭]

Posted

技术标签:

【中文标题】什么是ffmpeg、avcodec、x264? [关闭]【英文标题】:What is ffmpeg, avcodec, x264? [closed] 【发布时间】:2013-05-22 06:34:14 【问题描述】:

来自wiki,我读到了

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

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

它们有什么关系?

【问题讨论】:

【参考方案1】:

首先,澄清一些术语:

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

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

libavcodec,用于encoding and decoding 的音频、视频和字幕比特流 libav 格式,用于 muxing and demuxing 容器 libavfilter,用于在音频、视频和字幕上应用a variety of filters libswscale,scales images and video 或 resamples audio libavresample,最初被推送到Libav,后来集成到FFmpeg。有关历史的更多信息,请参阅this thread。

虽然 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,the file libx264.c 提供必要的代码将视频从 FFmpeg 内部格式推送到 x264 编码器,然后将其传递给 libavformat 以将其写入文件。实际的编码是通过 libx264 完成的。

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

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

【讨论】:

是 ffmpeg 的 h263 编解码器的一部分吗? FFmpeg 的 H.263 编解码器是原生的,是的。 也许会提到原生 AAC enc 现在稳定了。 @Mulvya 好点,错过了。谢谢! @KyleDelaney 简而言之,是的。虽然我不了解 Accord.NET,但基本上没有其他选择可以使用免费的开源工具对 H.264 进行编码。

以上是关于什么是ffmpeg、avcodec、x264? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

ffmpeg与x264有什么区别?

ffmpeg里有x264么

FFmpeg 结构体学习: AVCodec 分析

FFmpeg结构体之AVCodec

FFmpeg3最新的解码接口avcodec_send_packet和avcodec_receive_frame分析

FFmpeg avcodec_flush_buffers调用说明