什么是编解码器(例如 DivX?),它与文件格式(例如 MPG)有何不同?

use*_*686 100 video codec file-format video-codecs

我很困惑......音频/视频编解码器(显然是“编码器/解码器”的简写,有点像“调制解调器”实际上是“调制器/解调器”)和音频/视频编解码器之间有什么区别?视频格式?
(我什至使用了正确的术语吗?)

即:说某事是“MPEG-4”和说某事使用“DivX”编解码器有什么区别?为什么 Windows Media Player 有时运行.mpg文件,有时不运行?

另外,以下哪些是编解码器,哪些是文件格式,哪些都不是?

  • 快播电影
  • MPEG (1, 2, 3, 4)
  • WMV
  • FFmpeg
  • AVC
  • 视频
  • DivX(它与它的回文 Xvid 有何不同?)
  • H.264

slh*_*hck 161

一些主要定义:

  • 一个编解码器(例如,H.264、HEVC、VP9)只负责视频或音频部分,一个或多个编解码器可以合并到一个容器中。
  • 容器(例如 MP4、MKV)负责将它们保存在一起,这也是您通常在选择的媒体播放器中打开的内容。
  • 特定编码器(例如,x264、libvpx)负责将输入流转换为符合编解码器的比特流。一个特定的编解码器通常有多个编码器。

如您所见,我们必须在这里解释一些事情。

什么是编解码器?

编解码器是用于短编码器/解码器,它基本上只是意味着:由编码器产生的数据总是可以通过适当的解码器进行解码。这恰好对视频、音频有效,但您也可以考虑加密(编码器需要适当的解码器来显示加密消息)。

如今,当指定视频编解码器时,参与其中的机构通常只指定标准的语法。例如,他们会说:“比特流格式必须是这样的”、“0x810429AAB这里的将被翻译成那个”等。他们通常提供参考编码器和解码器,但是然后如何编写编码器以匹配这样的格式完全取决于制造商。

这就是为什么您会为相同的编解码器找到如此多的编码器,其中一些甚至是商用的。

案例示例 – H.264

在我们混淆术语之前,让我们举一个例子。考虑H.264的情况。该标准的名称是 H.264 – 这不是实际编码器的名称。Mainconcept是一个非常好的商业编码器,而x264是一个免费的开源编码器。当然,两者都声称提供良好的质量。

您可以优化编码这一事实本身就是一场竞争。两种编码器都将提供一个标准化的比特流,它始终可以由符合 H.264 的解码器进行解码。

总结一下

所以,总而言之,让我们说编码器将:

  • 拍摄视频帧
  • 产生一个有效的比特流

然后比特流被多路复用到一个容器中。

解码器将:

  • 取那个有效的比特流
  • 从中重建视频帧

它们都符合编解码器标准。就这样!


当前编解码器

如今,您可能只会找到使用我将在下面提到的编解码器编码的视频。有趣的是,几乎所有这些都是由电影专家组(MPEG) 创建的。但是还有一些其他的免版税的编解码器,例如由 Google 或开放媒体联盟创建的编解码器,它们是 MPEG 标准的竞争对手。

请注意,“MPEG”可以指编解码器和容器,如下所示。这增加了混乱,但只知道“MPEG”本身并不意味着什么,例如“我有一个 MPEG 格式的文件”是非常模糊的”。

MPEG-2

MPEG-2 已经很老了。它的第一个公开版本是从 1996 年开始的。MPEG-2 视频主要用于 DVD 和电视广播,例如 DVB-T 或卫星,以及兼容性很重要的传统应用程序。MPEG-2 视频大多位于.MPG容器中。

MPEG-4 第 2 部分

这可能是 2000 年代中期主要用于为网络编码视频的一种,但在此期间已被取代。它以实用的文件大小提供良好的质量,这意味着您可以将一整部 90 分钟长的电影刻录到 600 MB 的 CD 上(而使用 MPEG-2,您需要一张 DVD,请在此处查看我的答案)。它不再适用于 HD 或 4K 内容。

一些输出 MPEG-4 Part 2 视频的编码器是DivX、其开源的 ripoff XviDNero Digital

MPEG-4 Part 2 视频大多出现在AVI容器中,但MP4也经常出现。

MPEG-4 第 10 部分 / AVC / H.264

这也称为MPEG-4 高级视频编码 (AVC)H.264;它是当今最常用的编解码器。它以较小的文件大小提供良好的质量,因此非常适合用于 Internet 或移动设备的各种视频。从手机到摄像机,您几乎可以在所有现代应用程序中找到 H.264。在蓝光光盘上,视频现在以 H.264 编码。

它的一些编码器是:x264NVENC(来自 NVIDIA)、Mainconcept。视频大多采用MP4MKVMOV容器。

HEVC / H.265

也称为 MPEG-H Part 2,这是 MPEG-4 Part 10 / AVC / H.264 的继任者。与 H.264 相比,它的目标是更高的分辨率(高达8K),并且可以提供高达 50% 的编码性能(在质量与比特率方面)(例如,参见本文)。

该标准于 2013 年发布,慢慢地,编解码器开始越来越多地使用,例如用于 IPTV 或在线视频传输。Apple 还使用 HEVC在 iOS 上存储视频和图像(使用HEIF)。然而,与 HEVC 相关的多个专利池这一事实使许多公司(几乎所有公司(除了苹果公司))转向免版税的替代方案。并非所有浏览器都原生支持HEVC ,因此无法用于网络流媒体。

最著名的编码器是x265。还有NVENC。视频通常放在MP4容器中。

VP9 和 AV1

VP9(VP8的继任者)是主要由Google开发的编解码器。它是开放的、免版税的,并在许多浏览器中实现。它的质量几乎和 HEVC 一样好,有时甚至更好(参见Netflix 的这篇论文)。VP9 是您在支持它的浏览器上观看 YouTube 时所获得的。

VP9 可以使用libvpx编码器进行编码,它通常出现在WebMMKV容器中。

一些公司联合起来形成了 HEVC 更强大的竞争对手——但作为一种免版税的替代方案。AV1将是 VP9 的继任者,它基于应该成为 VP10 的内容。它得到了开放媒体联盟(由亚马逊、思科、谷歌、英特尔、微软、Mozilla 和 Netflix 创立)的支持。在此处阅读更多相关信息

所述libaom编码器可以被用来生成位流AV1,但它仍然是实验性的。


什么是格式(容器)?

到目前为止,我们只解释了原始“比特流”,它基本上只是真正的原始视频数据。您实际上可以继续使用这种原始比特流观看视频。但在大多数情况下,这还不够或不切实际。

因此,您需要将视频包装在容器中。有几个原因:

  • 也许你想要一些音频和视频
  • 也许您想跳到视频中的某个部分(例如,“转到 1:32:20.12”)
  • 音频和视频都应该完全同步
  • 视频可能需要通过可靠的网络传输并在之前拆分为数据包
  • 视频甚至可能通过有损网络(如 3G)发送并在此之前拆分为数据包

由于所有这些原因,发明了容器格式,一些简单,一些更高级。他们所做的就是将视频比特流“包装”到另一个比特流中。

容器将根据其演示时间戳(PTS)同步视频和音频帧,以确保它们完全同时显示。如有必要,它还将负责为流媒体服务器添加信息,以便流媒体服务器知道何时发送文件的哪个部分。

让我们来看看一些流行的容器。


流行容器

您会发现大部分视频都包装在以下容器中。还有其他不太受欢迎的,但正如我所说,主要是那些:

影音

音视频交错——这是最基本的容器,它只是用来交错音频和视频。它写于 1992 年,今天仍在使用,但被认为是遗留的,所以不要再使用它了。

MP4

也称为MPEG-4 Part 14,基于 QuickTime 文件格式。这是 H.264 视频的首选格式,但它也包含 HEVC、MPEG-4 Part 2 和 MPEG-2。

这个容器也可能只包装音频,这就是为什么你会发现这么多 .mp4 文件不是视频而是AAC 编码的音频,也在 .m4a 文件中(只是一个不同的扩展名)。扩展名 .m4v 通常用于视频比特流。

MKVWebM

Matroska Video (MKV) 是一种开源且免费的文件格式,现在很常见,因为它基本上支持任何编解码器,从 H.264 到 VP9,当然还有许多音频编解码器。

WebM 基于 MKV,主要用于 VP9 视频和 Opus 音频——当使用这些编解码器时,它是网络流视频的首选容器。

奥格

Ogg 容器是 Theora 视频编解码器(和 Vorbis 音频编解码器)的首选容器,也是由 Xiph.Org 基金会创建的。它也是免费和开源的(就像编解码器一样)。

FLV

Flash 视频格式由 Adob​​e 创建,用于其流媒体应用程序。它不再使用那么多了,因为流媒体的完成方式在过去几年中发生了重大变化。


流行的编解码器和格式

另外,以下哪些是编解码器,哪些是文件格式,哪些都不是?

  • Quicktime MOV : .movQuickTime File Format的文件扩展名,它是Apple 创建的容器。这个容器后来被改编成 MP4。它可以承载各种编解码器。Quicktime实际上是一个完整的媒体框架,就我而言,它并没有真正指定任何编解码器本身。
  • MPEG (1, 2, 3, 4):由电影专家组定义的标准。有关详细信息,请参阅我上面的帖子。
  • WMV:Windows 媒体视频。它实际上是一个封装在高级系统格式容器中的编解码器,它再次使用.wmv扩展名。很奇怪,但事情就是这样。
  • FFmpeg:这既不是编解码器也不是容器。它是一个视频工具库,还允许在不同的编解码器和容器之间进行转换。FFmpeg 分别依赖开源libavcodeclibavformat库来创建编解码器和容器。您今天找到的大多数视频工具都是基于它的。
  • AVC:MPEG-4 Part 10 或 H.264 的同义词。
  • DivX:MPEG-4 Part 2 视频的另一种编码器。
  • Xvid:MPEG-4 Part 2 视频的一种编码器。它只是 DivX 的开源免费版本,这当然引起了一些争议。
  • H.264:MPEG-4 Part 10 或 AVC 的同义词。

旁注:

我什至使用了正确的术语吗?

我想曾经更喜欢专门使用“编解码器”和“容器”而不是“格式”以避免误解。理论上,格式可以是任何东西,因为编解码器容器都指定了一种格式(即数据应该如何表示)。

话虽如此,FFmpeg术语将使用“格式”作为容器。这也是因为以下之间的区别:

  • libavcodec,用于编码/解码的库
  • libavformat, 容器库

  • 现在,这就是人们可以正确地称之为回答问题。做得好。 (36认同)
  • 这是我在一段时间内看到的最棒的答案。非常感谢您的精彩解释!:) (8认同)