一些主要定义:
- 编解码器(例如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很老了。它的第一个公开发布日期是1996年。MPEG-2视频主要用于DVD和TV广播,例如DVB-T或卫星,以及对兼容性很重要的传统应用。MPEG-2视频通常位于.MPG容器中。
这可能是在2000年代中期主要用于对网络视频进行编码的视频,但在此之前已被取代。它以实用的文件大小提供了良好的质量,这意味着您可以将90分钟长的整个电影刻录到600 MB的CD上(而使用MPEG-2则需要DVD,请在此处查看我的答案)。对于HD或4K内容,它不再适用。
一些输出MPEG-4 Part 2视频的编码器是DivX,其开源ripoff XviD和Nero Digital。
MPEG-4第2部分视频大多放在AVI容器中,但也经常看到MP4。
这也称为MPEG-4高级视频编码(AVC)或H.264;它是当今使用最广泛的编解码器。它以小文件大小提供了高质量,因此非常适合Internet或移动设备上的各种视频。从电话到便携式摄像机,几乎所有现代应用中都可以找到H.264。现在,在蓝光光盘上,视频以H.264编码。
某些编码器包括:x264,NVENC(来自NVIDIA),Mainconcept。这些视频大多以MP4,MKV或MOV容器的形式出现。
也称为MPEG-H第2部分,它是MPEG-4第10部分/ AVC / H.264的后继产品。与H.264(例如,参见本文)相比,它的目标是更高的分辨率(最高8K),并且可以提供高达50%的编码性能(在质量与比特率方面)。
该标准于2013年发布,慢慢地,编解码器开始越来越多地用于IPTV或在线视频传输。苹果还使用HEVC 在iOS上存储视频和图像(使用HEIF)。但是,HEVC有多个专利池这一事实使许多公司(除苹果公司外,几乎所有公司)都在转向免专利费的替代方案。并非所有浏览器都原生支持 HEVC ,因此无法将其用于Web流。
最著名的编码器是x265。还有NVENC。这些视频通常放在MP4容器中。
VP9(VP8的后继产品)是主要由Google开发的编解码器。它是开放的且免版税的,并且已在许多浏览器中实现。它的质量几乎与HEVC一样好,有时甚至更高(请参阅Netflix的本文)。在支持VP9的浏览器上观看YouTube时,您将获得VP9。
VP9可以使用libvpx编码器进行编码,并且通常包含在WebM或MKV容器中。
一些公司聚集在一起,形成了HEVC的更强竞争者-但作为免版税的替代方案。AV1将是VP9的后继产品,它基于原本应该成为VP10的产品。它由开放媒体联盟(由亚马逊,思科,谷歌,英特尔,微软,Mozilla和Netflix创建)支持。在此处了解更多信息。
所述libaom编码器可以被用来生成位流AV1,但它仍然是实验性的。
什么是格式(容器)?
到目前为止,我们仅说明了原始的“位流”,它基本上只是真正的原始视频数据。您实际上可以使用这样的原始比特流继续观看视频。但是在大多数情况下,这还不够或不切实际。
因此,您需要将视频包装在容器中。原因有以下几种:
- 也许你想要一些音频和视频
- 也许您想跳到视频中的某个部分(例如“转到1:32:20.12”)
- 音频和视频都应该完美同步
- 视频可能需要先通过可靠的网络传输并拆分为数据包,然后才能
- 视频甚至可以通过有损网络(例如3G)发送,并在分成几部分之前
由于所有这些原因,发明了容器格式,一些简单,一些更高级。他们所做的就是将视频比特流“包装”到另一个比特流。
容器将根据其显示时戳(PTS)同步视频和音频帧,以确保它们完全在同一时间显示。如果需要,它还将负责为流服务器添加信息,以便流服务器知道何时发送文件的哪一部分。
让我们看一些流行的容器。
流行的容器
您会发现大部分包装在以下容器中的视频。还有其他不太受欢迎的,但正如我所说,主要是:
音频视频交错-这是最基本的容器,可以用来交错音频和视频。它写于1992年,至今仍在使用,但被认为是旧版,因此不再使用。
也称为MPEG-4 Part 14,它基于QuickTime文件格式。这是H.264视频的首选格式,但它也包装了HEVC,MPEG-4 Part 2和MPEG-2。
该容器还可能只包装音频,这就是为什么您会在.m4a文件(只是一个不同的扩展名)中找到这么多.mp4文件的原因,这些文件不是视频,而是经过AAC编码的音频。扩展名.m4v通常用于视频比特流。
Matroska Video(MKV)是一种开源且免费的文件格式,如今已很常见,因为它基本上支持从H.264到VP9的任何编解码器,当然也支持许多音频编解码器。
WebM基于MKV,主要用于VP9视频和Opus音频-使用这些编解码器时,它是Web流视频的首选容器。
Ogg容器是Theora视频编解码器(和Vorbis音频编解码器)的首选容器,该视频编解码器也由Xiph.Org基金会创建。它也是免费和开源的(就像编解码器一样)。
Flash视频格式由Adobe创建,用于其流应用程序。由于过去几年流式传输的方式已发生了巨大变化,因此不再使用它了。
流行的编解码器和格式
另外,以下哪些是编解码器,哪些是文件格式,哪些都不是?
- Quicktime MOV:.mov是QuickTime文件格式的文件扩展名,它是Apple创建的容器。此容器后来被改编成MP4。它可以携带各种编解码器。Quicktime实际上是一个完整的媒体框架,就我而言,它实际上并未指定任何编解码器本身。
- MPEG(1、2、3、4):运动图像专家组定义的标准。有关详细信息,请参见上面的我的帖子。
- WMV:Windows Media视频。它实际上是一个包装在Advanced Systems Format容器中的编解码器,该容器再次使用.wmv扩展名。很奇怪,但这就是事实。
- FFmpeg:这既不是编解码器也不是容器。它是一个视频工具库,还允许在不同的编解码器和容器之间进行转换。FFmpeg分别依靠开源
libavcodec
和libavformat
库来创建编解码器和容器。您今天发现的大多数视频工具都基于此。
- AVC:MPEG-4 Part 10或H.264的同义词。
- DivX:MPEG-4 Part 2视频的另一种编码器。
- Xvid:一种用于MPEG-4 Part 2视频的编码器。它只是DivX的开源,免费版本,这当然引起了一些争议。
- H.264:MPEG-4第10部分或AVC的同义词。
附带说明:
我什至使用了正确的术语?
我想曾经有一次宁愿专门使用“编解码器”和“容器”而不是“格式”来避免误解。理论上,格式可以是任何格式,因为编解码器和容器都指定格式(即,数据应如何表示)。
话虽如此,FFmpeg术语将是对容器使用“格式”。这也是由于以下两者之间的区别:
libavcodec
,用于编码/解码的库
libavformat
,容器的库