Web 视频编解码器指南

本指南介绍了您最可能在网络上遇到或考虑使用的视频编解码器,总结了它们的功能以及任何兼容性和实用性问题,并提供了帮助您为项目视频选择正确编解码器的建议。

由于未压缩视频数据体积庞大,因此有必要对其进行显著压缩才能存储,更不用说通过网络传输了。想象一下存储未压缩视频所需的数据量

  • 全彩色(每像素 4 字节)的高清 (1920x1080) 视频的单帧为 8,294,400 字节。
  • 以典型的每秒 30 帧计算,每秒高清视频将占用 248,832,000 字节(约 249 MB)。
  • 一分钟的高清视频将需要 14.93 GB 的存储空间。
  • 一个相当典型的 30 分钟视频会议大约需要 447.9 GB 的存储空间,而一部 2 小时的电影将占用近 1.79 TB(即 1790 GB)

所需存储空间不仅巨大,而且传输此类未压缩视频所需的网络带宽也将非常大,达到 249 MB/秒——不包括音频和开销。这就是视频编解码器发挥作用的地方。就像音频编解码器处理声音数据一样,视频编解码器压缩视频数据并将其编码成一种格式,以便以后可以解码并播放或编辑。

大多数视频编解码器都是有损的,这意味着解码后的视频与源不完全匹配。一些细节可能会丢失;丢失的程度取决于编解码器及其配置方式,但作为一般规则,压缩程度越高,细节和保真度丢失越多。也存在一些无损编解码器,但它们通常用于本地播放的存档和存储,而不是用于网络传输。

常见编解码器

以下视频编解码器是网络上最常用的编解码器。对于每个编解码器,还列出了可以支持它们的容器(文件类型)。每个编解码器都提供了一个指向下方某个部分的链接,该部分提供了有关该编解码器的更多详细信息,包括您可能需要了解的特定功能和兼容性问题。

编解码器名称(短) 完整编解码器名称 容器支持
AV1 AOMedia 视频 1 MP4WebM
AVC (H.264) 高级视频编码 3GPMP4
H.263 H.263 视频 3GP
HEVC (H.265) 高效率视频编码 MP4
MP4V-ES MPEG-4 视频基本流 3GPMP4
MPEG-1 MPEG-1 第 2 部分视频 MPEGQuickTime
MPEG-2 MPEG-2 第 2 部分视频 MP4MPEGQuickTime
Theora 已弃用 Theora Ogg
VP8 视频处理器 8 3GPOggWebM
VP9 视频处理器 9 MP4OggWebM

影响编码视频的因素

与任何编码器一样,影响编码视频大小和质量的因素主要分为两类:源视频格式和内容特性,以及编码视频时所用编解码器的特性和配置。

最简单的指导原则是:任何使编码视频看起来更像原始未压缩视频的因素,通常也会使最终数据更大。因此,这始终是大小与质量之间的权衡。在某些情况下,为了降低数据大小而牺牲更多质量是值得的;在其他时候,质量损失是不可接受的,因此有必要接受一种会导致相应文件更大的编解码器配置。

源视频格式对编码输出的影响

源视频格式对输出的影响程度因编解码器及其工作方式而异。如果编解码器将媒体转换为内部像素格式,或者以简单像素以外的方式表示图像,则原始图像的格式没有任何区别。然而,帧速率和显然的分辨率等因素总是会对媒体的输出大小产生影响。

此外,所有编解码器都有其优点和缺点。有些在处理特定形状和图案方面存在问题,或者不擅长复制锐利边缘,或者倾向于在黑暗区域丢失细节,或者存在任何数量的可能性。这一切都取决于底层的算法和数学原理。

源视频格式和内容对编码视频质量和大小的潜在影响
特性 对质量的影响 对大小的影响
色彩深度(位深度) 色彩位深度越高,视频中实现的色彩保真度质量越高。此外,在图像的饱和部分(即颜色纯净且强烈的部分,例如明亮、纯净的红色:rgb(255 0 0 / 100%)),每分量低于 10 位(10 位颜色)的色彩深度会产生色带,即渐变无法在没有可见颜色阶梯的情况下表示。 根据编解码器,更高的色彩深度可能会导致更大的压缩文件大小。决定因素是压缩数据使用的内部存储格式。
帧速率 主要影响图像中运动的感知平滑度。在一定程度上,帧速率越高,运动看起来越平滑、越真实。最终达到边际效益递减点。有关详细信息,请参阅下面的帧速率 假设编码过程中帧速率没有降低,较高的帧速率会导致压缩视频文件更大。
运动 视频压缩通常通过比较帧、找出它们的不同之处以及构建包含足够信息的记录来更新前一帧以近似后一帧的外观。连续帧之间的差异越大,这些差异就越大,压缩在避免将伪影引入压缩视频方面的效果就越差。 运动引入的复杂性导致更大的中间帧(由于帧之间差异数量更多)。因此,以及其他原因,视频中的运动越多,输出文件通常就越大。
噪声 画面噪声(如胶片颗粒效果、灰尘或其他图像粗糙度)会引入可变性。可变性通常会使压缩更加困难,导致由于需要删除细节以实现相同压缩水平而损失更多质量。 图像中的可变性(例如噪声)越多,压缩过程就越复杂,算法将图像压缩到相同程度的可能性就越小。除非您以忽略部分或全部由噪声引起的变化的方式配置编码器,否则压缩视频将更大。
分辨率(宽度和高度) 在相同的屏幕尺寸下呈现的更高分辨率视频,通常能够更准确地描绘原始场景,除非在压缩过程中引入了效果。 视频分辨率越高,其尺寸就越大。这在视频最终大小中起着关键作用。

这些因素对最终编码视频的影响程度将根据具体情况(包括您使用的编码器及其配置方式)而异。除了通用编解码器选项外,编码器还可以配置为在编码过程中降低帧速率、清除噪声和/或降低视频的整体分辨率。

编解码器配置对编码输出的影响

用于编码视频的算法通常使用多种通用技术中的一种或多种来执行其编码。一般来说,任何旨在减小视频输出大小的配置选项都可能会对视频的整体质量产生负面影响,或将某些类型的伪影引入视频。还可以选择无损编码形式,这将导致更大的编码文件,但在解码时完美再现原始视频。

此外,每个编码器实用程序在处理源视频的方式上可能存在差异,从而导致输出质量和/或大小的差异。

视频编码器配置对质量和大小的影响
特性 对质量的影响 对大小的影响
无损压缩 无质量损失 无损压缩不能像有损压缩那样显著减小整体视频大小;最终文件可能仍然太大,不适合一般用途。
有损压缩 在一定程度上,伪影和其他形式的质量下降会发生,具体取决于特定编解码器和应用的压缩程度 编码视频与源视频偏离的程度越大,实现更高压缩率就越容易
质量设置 质量配置越高,编码视频看起来就越像原始媒体 一般来说,更高的质量设置会导致更大的编码视频文件;真实程度因编解码器而异
比特率 质量通常随比特率升高而提高 更高的比特率本身会导致更大的输出文件

编码视频时可用的选项以及分配给这些选项的值不仅因编解码器而异,而且还取决于您使用的编码软件。您的编码软件随附的文档将帮助您了解这些选项对编码视频的具体影响。

压缩伪影

伪影是有损编码过程的副作用,其中丢失或重新排列的数据导致可见的负面影响。一旦伪影出现,它可能会持续一段时间,因为视频的显示方式。视频的每一帧都是通过对当前可见帧应用一组更改来呈现的。这意味着任何错误或伪影都会随着时间的推移而复合,导致图像中出现故障或以其他方式奇怪或意想不到的偏差,并持续一段时间。

为了解决这个问题并缩短视频数据中的查找时间,视频文件中会定期插入关键帧(也称为帧内帧I 帧)。关键帧是完整帧,用于修复当前可见的任何损坏或伪影残留。

混叠

混叠是一个通用术语,指从编码数据重构后看起来与压缩前不同的任何事物。混叠有多种形式;您可能看到的最常见的形式包括

莫尔条纹

当源图像中的图案和编码器操作方式在空间上略有失准时,会产生莫尔条纹(一种大尺度空间干涉图案)。然后,编码器生成的伪影在解码时会在源图像的图案中引入奇怪的、漩涡状的效果。

a brick wall showing swirling effect similar to waves due to the moire pattern

阶梯效应

阶梯效应是一种空间伪影,当应该平滑的对角线直线或曲线边缘呈现锯齿状外观时发生,看起来有点像一组楼梯。这就是“抗锯齿”滤镜正在减少的效果。

Photo of diagonal lines that look like a staircase due to aliasing causing a staircase effect

车轮效应

车轮效应(或频闪效应)是电影中常见的视觉效果,其中旋转的车轮由于帧速率和压缩算法之间的相互作用而显得以错误的速度旋转,甚至反向旋转。同样的效应也可能发生在任何移动的重复图案上,例如铁轨上的枕木、路边的电线杆等。这是一个时间(基于时间)混叠问题;旋转速度干扰了压缩或编码过程中执行的采样频率。

Turning wheel due to aliasing causing a wagon wheel effect.

彩色边缘

彩色边缘是一种视觉伪影,表现为场景中彩色物体边缘出现的杂色。这些颜色与帧内容没有故意的颜色关系。

清晰度损失

在编码视频过程中移除数据需要丢失一些细节。如果施加足够的压缩,图像的部分或可能全部可能会失去清晰度,导致轻微的模糊或朦胧外观。

清晰度损失会使图像中的文本难以阅读,因为文本——尤其是小文本——是非常注重细节的内容,微小的改动会显著影响可读性。

振铃效应

有损压缩算法可能会引入振铃效应,这是一种现象,即物体外部区域被压缩算法生成的彩色像素污染。当算法使用跨越物体与其背景之间锐利边界的块时,就会发生这种情况。这在较高压缩级别下尤其常见。

Example of the ringing effect

请注意上方星星边缘的蓝色和粉色条纹(以及阶梯状和其他显著的压缩伪影)。这些条纹就是振铃效应。振铃效应在某些方面类似于蚊子噪声,不同之处在于振铃效应或多或少是稳定不变的,而蚊子噪声则会闪烁和移动。

振铃是另一种伪影,它可能使图像中包含的文本难以阅读。

海报化

当压缩导致渐变中的颜色细节丢失时,就会发生海报化。图像不是通过区域内的各种颜色平滑过渡,而是变得块状,出现近似原始图像外观的色块。

Bald eagle photo with blotchy resolution.

请注意上面照片中白头鹰羽毛(以及背景中的雪鸮)颜色的块状。由于这些海报化伪影,羽毛的细节大部分都丢失了。

等高线

等高线色带是一种特定形式的海报化,其中色块在图像中形成条带或条纹。当视频以过粗的量化配置编码时,就会发生这种情况。结果,视频内容呈现出“分层”外观,即没有平滑的渐变和过渡,而是颜色之间的过渡 abrupt,导致出现色带。

Example of an image whose compression has introduced contouring

在上面的示例图像中,请注意天空是如何呈现不同深浅蓝色条纹的,而不是随着天空颜色向地平线变化而呈现一致的渐变。这就是等高线效应。

蚊子噪声

蚊子噪声是一种时间伪影,表现为噪声或边缘忙碌,呈现为一种闪烁的模糊或闪烁,大致沿着具有硬边缘或前景物体与背景之间锐利过渡的物体边缘外部。这种效应在外观上可能类似于振铃

Example of an image whose compression has introduced mosquito noise.

上面的照片显示了许多地方存在蚊子噪声,包括桥梁周围的天空。在右上角,一个插图显示了图像中展示蚊子噪声的部分的特写。

蚊子噪声伪影最常见于 MPEG 视频中,但只要使用离散余弦变换 (DCT) 算法,它就可能发生;例如,这包括 JPEG 静止图像。

运动补偿块边界伪影

视频压缩通常通过比较两个帧并记录它们之间的差异,一帧接一帧,直到视频结束。当摄像机固定在位,或者帧中的物体相对静止时,这种技术效果很好,但如果帧中有大量运动,帧之间的差异数量可能非常大,以至于压缩不起任何作用。

运动补偿是一种寻找运动(无论是摄像机还是视场中物体的运动)并确定移动物体在每个方向上移动了多少像素的技术。然后存储该偏移量,以及无法仅通过该偏移量描述的移动像素的描述。实质上,编码器找到移动的物体,然后构建一个内部帧,该帧看起来像原始帧,但所有物体都已平移到其新位置。理论上,这近似于新帧的外观。然后,为了完成这项工作,找到剩余的差异,然后将物体偏移集和像素差异集存储在表示新帧的数据中。描述这种偏移和像素差异的对象称为残差帧

原始帧 帧间差异 运动补偿后的差异
Original frame of video Differences between the first frame and the following frame. Differences between the frames after shifting two pixels right
观看者看到的第一个完整帧。 这里,只看到了第一帧和后续帧之间的差异。其他一切都是黑色的。仔细观察,我们可以看到这些差异大部分来自水平摄像机移动,这使其成为运动补偿的良好候选者。 为了最小化不同像素的数量,这里我们通过首先将第一帧向右移动两个像素,然后取差值来考虑摄像机的平移。这补偿了摄像机的平移,允许两帧之间有更多的重叠。
图片来自 维基百科

运动补偿有两种通用类型:全局运动补偿块运动补偿。全局运动补偿通常调整摄像机运动,如跟踪、推拉、平移、倾斜、滚动以及上下运动。块运动补偿处理局部变化,寻找图像中可以使用运动补偿编码的较小部分。这些块通常是固定大小的网格,但也存在允许可变块大小甚至块重叠的运动补偿形式。

然而,由于运动补偿可能会出现伪影。这些伪影沿着块边界出现,表现为锐利边缘,产生虚假的振铃效应和其他边缘效应。这些是由于残差帧编码中涉及的数学原理,在被下一个关键帧修复之前很容易被注意到。

缩小帧尺寸

在某些情况下,缩小视频尺寸可能有助于改善视频文件的最终大小。虽然尺寸的即时损失或播放的平滑度可能是负面因素,但仔细的决策可以带来良好的最终结果。如果将 1080p 视频在编码前缩小到 720p,则生成的视频可能会小得多,同时具有更高的视觉质量;即使在播放时重新放大,结果也可能优于以全尺寸编码原始视频并接受满足尺寸要求所需的质量损失。

降低帧速率

同样,您可以完全从视频中删除帧并降低帧速率以进行补偿。这有两个好处:它使整体视频更小,并且更小的尺寸允许运动补偿为您完成更多工作。例如,与其计算由于帧间运动而相距两个像素的两帧的运动差异,不如跳过其他每帧可能导致计算出四像素移动的差异。这使得摄像机的整体运动可以通过更少的残差帧来表示。

视频内容在人眼看来不再是运动之前,绝对最小帧速率约为每秒 12 帧。低于此值,视频就会变成一系列静止图像。电影通常是每秒 24 帧,而标清电视约为每秒 30 帧(略少,但足够接近),高清电视则在每秒 24 到 60 帧之间。从 24 FPS 到更高,通常会被认为是令人满意的平滑;30 或 60 FPS 是理想的目标,具体取决于您的需求。

最终,关于您可以做出哪些牺牲的决定完全取决于您和/或您的设计团队。

编解码器详情

AV1

AOMedia Video 1AV1)编解码器是由开放媒体联盟专门为互联网视频设计的开放格式。它比VP9H.265/HEVC实现更高的数据压缩率,并且比AVC高出多达 50%。AV1 完全免版税,旨在用于<video>元素和WebRTC

AV1 目前提供三个配置文件:主(main)高(high)专业(professional),对色彩深度和色度子采样的支持逐渐增加。此外,还指定了一系列级别(levels),每个级别都定义了视频一系列属性的限制。这些属性包括帧尺寸、像素图像区域、显示和解码速率、平均和最大比特率,以及编码/解码过程中使用的瓦片和瓦片列的数量限制。

例如,AV1 2.0 级提供最大帧宽度为 2048 像素,最大高度为 1152 像素,但其最大帧大小(以像素为单位)为 147,456,因此在 2.0 级下,您实际上无法拥有 2048x1152 的视频。然而值得注意的是,至少对于 Firefox 和 Chrome 而言,目前在执行软件解码时,这些级别实际上被忽略了,解码器只是尽其所能根据提供的设置播放视频。然而,为了将来的兼容性,您应该保持在所选级别的限制范围内。

目前 AV1 的主要缺点是它非常新,并且支持仍在集成到大多数浏览器中。此外,编码器和解码器仍在进行性能优化,硬件编码器和解码器仍主要处于开发阶段而非生产阶段。因此,将视频编码为 AV1 格式需要很长时间,因为所有工作都是在软件中完成的。

暂时,由于这些因素,AV1 尚未准备好成为您的首选视频编解码器,但您应该留意它在未来投入使用。

支持的比特率

因视频级别而异;理论最大值在 6.3 级达到 800 Mbps

请参阅 AV1 规范的级别表,其中描述了每个级别的最大分辨率和速率。

支持的帧速率 因级别而异;例如,2.0 级的最大帧率为 30 FPS,而 6.3 级可达到 120 FPS
压缩 有损基于 DCT 的算法
支持的帧大小 8 x 8 像素到 65,535 x 65535 像素,每个尺寸都可以取这些值之间的任何值
支持的颜色模式
配置文件 色彩深度 色度子采样
8 或 10 4:0:0(灰度)或 4:2:0
8 或 10 4:0:0(灰度)、4:2:0 或 4:4:4
专业 8、10 或 12 4:0:0(灰度)、4:2:0、4:2:2 或 4:4:4
HDR 支持
可变帧速率 (VFR) 支持
浏览器兼容性
特性 Chrome Edge Firefox Firefox 安卓 Opera Safari
AV1 支持 70 75 67 113 57 17
容器支持 ISOBMFF、MPEG-TS、MP4WebM
RTP / WebRTC 兼容
支持/维护组织 开放媒体联盟
规范 https://aomediacodec.github.io/av1-spec/av1-spec.pdf
许可 免版税,开放标准

AVC (H.264)

MPEG-4 规范套件的高级视频编码AVC)标准由相同的 ITU H.264 规范和 MPEG-4 第 10 部分规范指定。它是一种基于运动补偿的编解码器,广泛用于当今各种媒体,包括广播电视、RTP视频会议以及蓝光光盘的视频编解码器。

AVC 具有高度灵活性,具有多种功能各异的配置文件;例如,受限基线配置文件专为视频会议和移动场景设计,使用的带宽低于主配置文件(在某些地区用于标清数字电视)或高配置文件(用于蓝光光盘视频)。大多数配置文件使用 8 位颜色分量和 4:2:0 色度子采样;高 10 位配置文件增加了对 10 位颜色的支持,而高级形式的高 10 位配置文件增加了 4:2:2 和 4:4:4 色度子采样。

AVC 还具有特殊功能,例如支持同一场景的多个视图(多视图视频编码),这使得(除其他外)能够制作立体视频。

然而,AVC 是一种专有格式,其技术涉及众多专利,由多个方拥有。AVC 媒体的商业使用需要许可证,但只要最终用户可以免费观看,Via LA 专利池不要求对 AVC 格式的流媒体互联网视频收取许可费。

WebRTC 的非浏览器实现(任何不包括 JavaScript API 的实现)必须支持 AVC 作为 WebRTC 调用中的编解码器。虽然 Web 浏览器不要求这样做,但有些浏览器支持。

在 Web 浏览器的 HTML 内容中,AVC 具有广泛的兼容性,许多平台都支持 AVC 媒体的硬件编码和解码。但是,在决定在您的项目中使用 AVC 之前,请务必了解其许可要求

支持的比特率 因级别而异
支持的帧速率 因级别而异;最高可达 300 FPS
压缩 有损基于 DCT 的算法,尽管可以在图像中创建无损宏块
支持的帧大小 高达 8,192 x 4,320 像素
支持的颜色模式

一些更常见或有趣的配置文件

配置文件 色彩深度 色度子采样
受限基线 (CBP) 8 4:2:0
基线 (BP) 8 4:2:0
扩展 (XP) 8 4:2:0
主 (MP) 8 4:2:0
高 (HiP) 8 4:0:0(灰度)和 4:2:0
渐进高 (ProHiP) 8 4:0:0(灰度)和 4:2:0
高 10 (Hi10P) 8 到 10 4:0:0(灰度)和 4:2:0
高 4:2:2 (Hi422P) 8 到 10 4:0:0(灰度)、4:2:0 和 4:2:2
高 4:4:4 预测 8 到 14 4:0:0(灰度)、4:2:0、4:2:2 和 4:4:4
HDR 支持 是;混合对数伽马或高级 HDR/SL-HDR;两者都是 ATSC 的一部分
可变帧速率 (VFR) 支持
浏览器兼容性 所有版本的 Chrome、Edge、Firefox、Opera 和 Safari

Firefox 对 AVC 的支持取决于操作系统的内置或预装 AVC 及其容器编解码器,以避免专利问题。

容器支持 3GPMP4
RTP / WebRTC 兼容
支持/维护组织 MPEG / ITU
规范 https://mpeg.chiariglione.org/standards/mpeg-4/advanced-video-coding.html
https://www.itu.int/rec/T-REC-H.264
许可 专有,拥有众多专利。商业用途需要许可证。请注意,可能适用多个专利池。

H.263

ITU 的 H.263 编解码器主要用于低带宽环境。特别是,它专注于 PSTN(公共交换电话网络)、RTSP 和 SIP(基于 IP 的视频会议)系统上的视频会议。尽管针对低带宽网络进行了优化,但它对 CPU 的要求相当高,可能无法在低端计算机上充分运行。数据格式类似于 MPEG-4 第 2 部分。

H.263 从未在网络上广泛使用。H.263 的变体已被用作其他专有格式的基础,例如 Flash 视频或 Sorenson 编解码器。然而,没有任何主要浏览器默认包含 H.263 支持。某些媒体插件已启用对 H.263 媒体的支持。

与大多数编解码器不同,H.263 从每帧(图像)的最大比特率(或 BPPmaxKb)的角度定义了编码视频的基本要素。在编码过程中,会选择 BPPmaxKb 的一个值,然后视频的每帧都不能超过此值。最终比特率将取决于此值、帧速率、压缩以及所选分辨率和块格式。

H.263 已被 H.264 取代,因此被视为传统媒体格式,如果可以的话,您通常应该避免使用。在新项目中使用 H.263 的唯一真正原因是,如果您需要在 H.263 是最佳选择的非常旧的设备上获得支持。

H.263 是一种专有格式,拥有专利,由包括 Telenor、Fujitsu、Motorola、Samsung、Hitachi、Polycom、Qualcomm 等在内的多家组织和公司持有。要使用 H.263,您有法律义务获得相应的许可证。

支持的比特率 不受限制,但通常低于 64 kbps
支持的帧速率 任意
压缩 有损基于 DCT 的算法
支持的帧大小

最高 1408 x 1152 像素。

H.263 的第 1 版规定了一组支持的图像尺寸。后续版本可能支持其他分辨率。

支持的颜色模式 YCbCr;每种图像格式(sub-QCIF、QCIF、CIF、4CIF 或 16CIF)都定义了像素的帧大小,以及每帧使用的亮度和色度样本的行数
HDR 支持
可变帧速率 (VFR) 支持
浏览器兼容性
特性 Chrome Edge Firefox Opera Safari
H.263 支持
容器支持 3GPMP4QuickTime
RTP / WebRTC 兼容
支持/维护组织 ITU
规范 https://www.itu.int/rec/T-REC-H.263/
许可 专有;需要适当的许可证。请注意,可能适用多个专利池。

HEVC (H.265)

高效率视频编码HEVC)编解码器由 ITU 的 H.265 以及 MPEG-H 第 2 部分(仍在开发中的 MPEG-4 后续标准)定义。HEVC 旨在支持高效编码和解码高分辨率(包括 8K 视频)的视频,其结构经过专门设计,旨在让软件利用现代处理器。理论上,HEVC 可以将压缩文件大小减少到AVC的一半,但具有可比的图像质量。

例如,每个编码树单元(CTU)——类似于以前编解码器中使用的宏块——由每个样本的亮度值树和同一编码树单元中使用的每个色度样本的色度值树,以及任何所需的语法元素组成。这种结构支持多核轻松处理。

HEVC 的一个有趣特性是主配置文件仅支持 8 位每分量颜色和 4:2:0 色度子采样。同样有趣的是,4:4:4 视频得到了特殊处理。它不是拥有亮度样本(表示图像的灰度像素)以及 Cb 和 Cr 样本(指示如何改变灰色以创建彩色像素),而是将三个通道视为三个单色图像,每个颜色一个,然后在渲染时组合以生成全彩图像。

HEVC 是一种专有格式,并受多项专利保护。许可由 Via LA 管理;费用向开发者收取,而不是向内容制作商和分销商收取。在决定是否在您的应用程序或网站中使用 HEVC 之前,请务必查看最新的许可条款和要求!

支持的比特率 高达 800,000 kbps
支持的帧速率 因级别而异;最高可达 300 FPS
压缩 有损基于 DCT 的算法
支持的帧大小 128 x 96 到 8,192 x 4,320 像素;因配置文件和级别而异
支持的颜色模式

以下信息适用于主要配置文件。此处未包含其他一些可用配置文件。

配置文件 色彩深度 色度子采样
8 4:2:0
主 10 8 到 10 4:2:0
主 12 8 到 12 4:0:0 和 4:2:0
主 4:2:2 10 8 到 10 4:0:0、4:2:0 和 4:2:2
主 4:2:2 12 8 到 12 4:0:0、4:2:0 和 4:2:2
主 4:4:4 8 4:0:0、4:2:0、4:2:2 和 4:4:4
主 4:4:4 10 8 到 10 4:0:0、4:2:0、4:2:2 和 4:4:4
主 4:4:4 12 8 到 12 4:0:0、4:2:0、4:2:2 和 4:4:4
主 4:4:4 16 帧内 8 到 16 4:0:0、4:2:0、4:2:2 和 4:4:4
HDR 支持
可变帧速率 (VFR) 支持
浏览器兼容性
特性 Chrome Edge Firefox Opera Safari
HEVC / H.265 支持 107 18 120 94 11

Chrome 在 Windows 8+、Linux 和 ChromeOS 上支持具有硬件支持的设备上的 HEVC,以及 macOS Big Sur 11+ 和 Android 5.0+ 上的所有设备。

Edge (Chromium) 在 Windows 10 1709+ 上支持具有硬件支持的设备上的 HEVC,前提是安装了来自 Microsoft Store 的 HEVC 视频扩展,并且在其他平台上具有与 Chrome 相同的支持状态。Edge (Legacy) 仅支持具有硬件解码器的设备上的 HEVC。

Firefox 在以下版本启用 HEVC:

  • 从 Firefox 134 开始的 Windows 版本,使用硬件(在支持它的设备上,范围与 Edge 相同)或软件(在 Windows 上用户必须付费并安装扩展)
  • 从 Firefox 136 开始的 macOS 版本,使用硬件或软件。
  • 从 Firefox 137 开始的 Linux 版本,使用硬件或软件(通过系统 ffmpeg)。
  • 从 Firefox 137 开始的 Android 版本,仅使用硬件。

Opera 和其他基于 Chromium 的浏览器具有与 Chrome 相同的支持状态。

Safari 在 macOS High Sierra 或更高版本的所有设备上支持 HEVC。

容器支持 ISOBMFF、MPEG-TS、MP4 QuickTime
RTP / WebRTC 兼容
支持/维护组织 ITU / MPEG
规范 http://www.itu.int/rec/T-REC-H.265
https://www.iso.org/standard/69668.html
许可 专有;确认您符合许可要求。请注意,可能适用多个专利池。

MP4V-ES

MPEG-4 视频基本流MP4V-ES)格式是 MPEG-4 第 2 部分视觉标准的一部分。虽然一般来说,MPEG-4 第 2 部分视频由于缺乏与其他编解码器相关的引人注目的价值而未被任何人使用,但 MP4V-ES 在移动设备上有一些用途。MP4V 本质上是 MPEG-4 容器中的 H.263 编码。

其主要目的是用于通过 RTP 会话流传输 MPEG-4 音频和视频。然而,MP4V-ES 也用于通过使用 3GP 的移动连接传输 MPEG-4 音频和视频。

您几乎肯定不想使用这种格式,因为它没有被任何主流浏览器以有意义的方式支持,并且已经相当过时。此类文件应该具有扩展名 .mp4v,但有时会被错误地标记为 .mp4

支持的比特率 5 kbps 到 1 Gbps 及更高
支持的帧速率 无特定限制;仅受数据速率限制
压缩 有损基于 DCT 的算法
支持的帧大小 高达 4,096 x 4,096 像素
支持的颜色模式 支持带色度子采样(4:2:0、4:2:2 和 4:4:4)的 YCrCb;每分量最高 12 位
HDR 支持
可变帧速率 (VFR) 支持
浏览器兼容性
特性 Chrome Edge Firefox Opera Safari
MP4V-ES 支持

Firefox 仅在 3GP 容器中支持 MP4V-ES。

Chrome 不支持 MP4V-ES;但是,ChromeOS 支持。

容器支持 3GPMP4
RTP / WebRTC 兼容
支持/维护组织 MPEG
规范 RFC 6416
许可 专有;根据需要通过 Via LA 和/或 AT&T获取许可证

MPEG-1 第 2 部分视频

MPEG-1 第 2 部分视频于 1990 年代初问世。与后来的 MPEG 视频标准不同,MPEG-1 完全由 MPEG 创建,没有 ITU 的参与。

由于任何 MPEG-2 解码器也可以播放 MPEG-1 视频,因此它与各种软件和硬件设备兼容。MPEG-1 视频不再有任何有效专利,因此可以免费使用,无需任何许可问题。然而,很少有网络浏览器在没有插件支持的情况下支持 MPEG-1 视频,并且随着插件在网络浏览器中被弃用,这些插件通常不再可用。这使得 MPEG-1 不适合用于网站和网络应用程序。

支持的比特率 最高 1.5 Mbps
支持的帧速率 23.976 FPS、24 FPS、25 FPS、29.97 FPS、30 FPS、50 FPS、59.94 FPS 和 60 FPS
压缩 有损基于 DCT 的算法
支持的帧大小 高达 4,095 x 4,095 像素
支持的颜色模式 Y'CbCr,采用 4:2:0 色度子采样,每分量最高 12 位
HDR 支持
可变帧速率 (VFR) 支持
浏览器兼容性
特性 Chrome Edge Firefox Opera Safari
MPEG-1 支持
容器支持 MPEG
RTP / WebRTC 兼容
支持/维护组织 MPEG
规范 https://www.iso.org/standard/22411.html
许可 专有;但所有专利均已过期,因此 MPEG-1 可自由使用

MPEG-2 第 2 部分视频

MPEG-2 第 2 部分是 MPEG-2 规范定义的视频格式,偶尔也以其 ITU 命名 H.262 来指代。它与 MPEG-1 视频非常相似——实际上,任何 MPEG-2 播放器都可以自动处理 MPEG-1,无需任何特殊工作——只是它已扩展到支持更高的比特率和增强的编码技术。

目标是允许 MPEG-2 压缩标清电视,因此也支持隔行扫描视频。标清压缩率和由此产生的视频质量很好地满足了需求,以至于 MPEG-2 成为 DVD 视频媒体使用的主要视频编解码器。

MPEG-2 有几种具有不同功能的配置文件。每个配置文件都有四个级别可用,每个级别都增加了视频的属性,例如帧速率、分辨率、比特率等。大多数配置文件使用 Y'CbCr 和 4:2:0 色度子采样,但更高级的配置文件也支持 4:2:2。此外,还有四个级别,每个级别都支持更大的帧尺寸和比特率。例如,北美电视使用的 ATSC 规范支持高清 MPEG-2 视频,使用主配置文件,高级别,允许 4:2:0 视频在 1920 x 1080(30 FPS)和 1280 x 720(60 FPS)下,最大比特率为 80 Mbps。

然而,很少有网络浏览器在没有插件支持的情况下支持 MPEG-2,并且随着插件在网络浏览器中被弃用,这些插件通常不再可用。这使得 MPEG-2 不适合用于网站和网络应用程序。

支持的比特率 最高 100 Mbps;因级别和配置文件而异
支持的帧速率
缩写 级别名称 支持的帧速率
LL 低级别 23.9, 24, 25, 29.97, 30
ML 主级别 23.976, 24, 25, 29.97, 30
H-14 高 1440 23.976, 24, 26, 29.97, 30, 50, 59.94, 60
HL 高级别 23.976, 24, 26, 29.97, 30, 50, 59.94, 60
压缩 有损基于 DCT 的算法
支持的帧大小
缩写 级别名称 最大帧尺寸
LL 低级别 352 x 288 像素
ML 主级别 720 x 576 像素
H-14 高 1440 1440 x 1152 像素
HL 高级别 1920 x 1152 像素
支持的颜色模式 大多数配置文件使用 Y'CbCr 和 4:2:0 色度子采样;“高”和“4:2:2”配置文件也支持 4:2:2 色度子采样。
HDR 支持
可变帧速率 (VFR) 支持
浏览器兼容性
特性 Chrome Edge Firefox Opera Safari
MPEG-2 支持
容器支持 MPEG、MPEG-TS(MPEG 传输流)、MP4QuickTime
RTP / WebRTC 兼容
支持/维护组织 MPEG / ITU
规范 https://www.itu.int/rec/T-REC-H.262
https://www.iso.org/standard/61152.html
许可 专有;除马来西亚(截至 2024 年 10 月 1 日)外,全球所有专利均已过期,因此 MPEG-2 可以在马来西亚以外自由使用。专利由 Via LA 授权。

Theora

警告:此编解码器不再推荐使用。其使用率极低,并且正在从浏览器中移除支持。

Theora 是由 Xiph.org 开发的一种开放免费视频编解码器,无需版税或许可即可使用。Theora 在质量和压缩率方面与 MPEG-4 Part 2 Visual 和 AVC 相当,使其成为视频编码的非常好的选择,尽管不是顶级的。但它免于任何许可问题,并且 CPU 资源要求相对较低,使其成为许多软件和 Web 项目的流行选择。由于 Theora 没有可用的硬件解码器,因此其低 CPU 影响特别有用。

Theora 最初基于 On2 Technologies 的 VC3 编解码器。该编解码器及其规范以 LGPL 许可证发布,并委托给 Xiph.org,后者将其开发成 Theora 标准。

Theora 的一个缺点是它只支持每颜色分量 8 位,没有使用 10 位或更多位以避免色带的选项。话虽如此,每分量 8 位仍然是当今最常用的颜色格式,因此在大多数情况下这只是一个小小的不便。此外,Theora 只能在 Ogg 容器中使用。然而,最大的缺点是 Safari 不支持它,使得 Theora 不仅在 macOS 上,而且在所有数百万 iPhone 和 iPad 上都无法使用。

Theora Cookbook 提供了有关 Theora 及其所用 Ogg 容器格式的更多详细信息。

支持的比特率 最高 2 Gbps
支持的帧速率 任意;支持任何非零值。帧速率指定为 32 位分子和 32 位分母,以允许非整数帧速率。
压缩 有损基于 DCT 的算法
支持的帧大小 宽度和高度的任意组合,最高可达 1,048,560 x 1,048,560 像素
支持的颜色模式 Y'CbCr,支持 4:2:0、4:2:2 和 4:4:4 色度子采样,每分量 8 位
HDR 支持
可变帧速率 (VFR) 支持

虽然 Theora 不支持单一流中的可变帧速率 (VFR),但可以在单个文件中将多个流连接在一起,每个流都可以有自己的帧速率,从而实现本质上的 VFR。然而,如果帧速率需要频繁更改,这就不切实际了。

浏览器兼容性
特性 Chrome Edge Firefox Opera Safari
Theora 支持 3 到 121 12 到 121 3.5 到 126 10.5 到 107

Edge 通过可选的 Web Media Extensions 附加组件支持 Theora。

容器支持 Ogg
RTP / WebRTC 兼容
支持/维护组织 Xiph.org
规范 https://www.theora.org/doc/
许可 开放且免版税,无其他许可要求

VP8

视频处理器 8VP8)编解码器最初由 On2 Technologies 创建。在收购 On2 后,Google 发布了 VP8 作为一种开放且免版税的视频格式,并承诺不强制执行相关专利。在质量和压缩率方面,VP8 与 AVC 相当。

如果浏览器支持,VP8 允许带 alpha 通道的视频,使得视频可以播放,背景在视频中以每个像素的 alpha 分量指定的程度可见。

HTML 内容中对 VP8 的浏览器支持良好,尤其是在 WebM 文件中。这使得 VP8 成为您内容的良好选择,尽管如果可用,VP9 甚至是更好的选择。Web 浏览器必须支持 WebRTC 的 VP8,但并非所有这样做的浏览器也支持 HTML 音频和视频元素中的 VP8。

支持的比特率 任意;除非强制执行基于级别的限制,否则无最大值
支持的帧速率 任意
压缩 有损基于 DCT 的算法
支持的帧大小 高达 16,384 x 16,384 像素
支持的颜色模式 Y'CbCr,采用 4:2:0 色度子采样,每分量 8 位
HDR 支持
可变帧速率 (VFR) 支持
浏览器兼容性

所有版本的 Chrome、Edge、Firefox、Opera 和 Safari

iOS:Safari 12.1 及更高版本仅在 WebRTC 连接中支持 VP8。

Firefox 仅在没有 H.264 硬件解码器可用时才支持 MSE 中的 VP8。使用 MediaSource.isTypeSupported() 检查可用性。

容器支持 3GPOggWebM
RTP / WebRTC 兼容 是;VP8 是 WebRTC 规范要求的编解码器之一
支持/维护组织 Google
规范 RFC 6386
许可 开放且免版税,无其他许可要求

VP9

视频处理器 9VP9)是 Google 开发的旧 VP8 标准的后续版本。与 VP8 一样,VP9 完全开放且免版税。其编码和解码性能与 AVC 相当或略快,但质量更好。VP9 的编码视频质量与 HEVC 在相似比特率下相当。

VP9 的主配置文件仅支持 8 位色彩深度和 4:2:0 色度子采样级别,但其配置文件支持更深的色彩和全范围的色度子采样模式。它支持多种 HDR 实现,并在选择帧速率、宽高比和帧尺寸方面提供了极大的自由。

VP9 受到浏览器的广泛支持,并且编解码器的硬件实现也相当普遍。VP9 是 WebM 强制要求的两种视频编解码器之一(另一种是 VP8)。但请注意,Safari 对 WebM 和 VP9 的支持仅在 14.1 版中引入,因此如果您选择使用 VP9,请考虑为 iPhone、iPad 和 Mac 用户提供 AVC 或 HEVC 等备用格式。

如果您能够使用 WebM 容器(并且在需要时可以提供备用视频),VP9 是一个不错的选择。如果您希望使用开放编解码器而不是专有编解码器,则尤其如此。

支持的比特率 任意;除非强制执行基于级别的限制,否则无最大值
支持的帧速率 任意
压缩 有损基于 DCT 的算法
支持的帧大小 高达 65,536 x 65,536 像素
支持的颜色模式
配置文件 色彩深度 色度子采样
配置文件 0 8 4:2:0
配置文件 1 8 4:2:0、4:2:2 和 4:4:4
配置文件 2 10 到 12 4:2:0
配置文件 3 10 到 12 4:2:0、4:2:2 和 f:4:4

支持的色彩空间:Rec. 601Rec. 709Rec. 2020SMPTE C、SMPTE-240M(已过时;由 Rec. 709 取代)和 sRGB

HDR 支持 是;HDR10+、HLGPQ
可变帧速率 (VFR) 支持
浏览器兼容性

所有版本的 Chrome、Edge、Firefox、Opera 和 Safari

Firefox 仅在没有 H.264 硬件解码器可用时才支持 MSE 中的 VP8。使用 MediaSource.isTypeSupported() 检查可用性。

容器支持 MP4OggWebM
RTP / WebRTC 兼容
支持/维护组织 Google
规范 https://www.webmproject.org/vp9/
许可 开放且免版税,无其他许可要求

选择视频编解码器

选择使用哪个或哪些编解码器始于一系列问题,以帮助您做好准备

  • 您是希望使用开放格式,还是也考虑使用专有格式?
  • 您是否有资源为每个视频制作多种格式?提供备用选项大大简化了决策过程。
  • 您是否愿意牺牲与某些浏览器的兼容性?
  • 您需要支持的最旧的浏览器版本有多旧?例如,您需要支持过去五年发布的所有浏览器,还是仅仅过去一年?

在下面的部分中,我们为特定的用例提供了推荐的编解码器选择。对于每个用例,您最多会找到两个建议。如果被认为最适合该用例的编解码器是专有的或可能需要支付版税,则提供两个选项:首先是开放且免版税的选项,其次是专有选项。

如果您只能提供每个视频的单个版本,则可以选择最适合您需求的格式。第一个建议在质量、性能和兼容性方面具有良好的结合。第二个选项将是兼容性最广的选择,但会牺牲一定程度的质量、性能和/或大小。

日常视频推荐

首先,让我们看看在典型的网站上(例如博客、信息网站、使用视频演示产品的小企业网站(但视频本身不是产品)等)呈现视频的最佳选择。

  1. 一个使用 VP9 视频编解码器和 Opus 音频编解码器的 WebM 容器。这些都是开放、免版税的格式,通常支持良好,尽管仅限于最新浏览器,这就是为什么备用方案是个好主意。

    html
    <video controls src="filename.webm"></video>
    
  2. 一个 MP4 容器和 AVC (H.264) 视频编解码器,最好搭配 AAC 作为您的音频编解码器。这是因为带有 AVC 和 AAC 编解码器的 MP4 容器是广泛支持的组合——事实上,每个主流浏览器都支持——并且在大多数用例中质量通常很好。但是,请务必验证您是否符合许可证要求。

    html
    <video controls>
      <source type="video/webm" src="filename.webm" />
      <source type="video/mp4" src="filename.mp4" />
    </video>
    

注意:<video> 元素需要一个关闭的 </video> 标签,无论其中是否包含任何 <source> 元素。

高质量视频演示推荐

如果您的任务是以最高可能的质量呈现视频,您可能会受益于提供尽可能多的格式,因为能够提供最佳质量的编解码器通常也是最新的,因此最有可能在浏览器兼容性方面存在差距。

  1. 一个使用 AV1 视频和 Opus 音频的 WebM 容器。如果您能够使用高或专业配置文件编码 AV1,并在高水平(例如 6.3)下,您可以获得 4K 或 8K 分辨率下的非常高比特率,同时保持出色的视频质量。使用 Opus 的全频带配置文件以 48 kHz 采样率编码音频,可以最大限度地捕获音频带宽,捕获人类听觉范围内的几乎整个频率范围。

    html
    <video controls src="filename.webm"></video>
    
  2. 一个使用 HEVC 编解码器的 MP4 容器,使用高级主配置文件之一,例如带有 10 或 12 位色彩深度的主 4:2:2,甚至主 4:4:4 配置文件,每分量最高 16 位。在高比特率下,这提供了出色的图形质量和卓越的色彩再现。此外,您还可以选择包含 HDR 元数据以提供高动态范围视频。对于音频,使用 AAC 编解码器,采用高采样率(至少 48 kHz,但最好是 96 kHz),并使用复杂编码而非快速编码。

    html
    <video controls>
      <source type="video/webm" src="filename.webm" />
      <source type="video/mp4" src="filename.mp4" />
    </video>
    

存档、编辑或混音推荐

目前,网络浏览器中普遍没有无损或接近无损的视频编解码器。原因很简单:视频文件巨大。无损压缩本质上不如有损压缩有效。例如,带有 4:2:0 色度子采样的未压缩 1080p 视频(1920x1080 像素)至少需要 1.5 Gbps。使用 FFV1 等无损压缩(网络浏览器不支持)可能会将其降低到大约 600 Mbps,具体取决于内容。这仍然是每秒通过连接传输的巨大比特数,目前不适用于任何实际用途。

即使某些有损编解码器具有无损模式,情况也是如此;无损模式在任何当前网络浏览器中都没有实现。您能做的最好的事情是选择一种使用有损压缩的高质量编解码器,并将其配置为尽可能少地执行压缩。一种方法是将编解码器配置为使用“快速”压缩,这本质上意味着实现的压缩较少。

外部视频准备

要从您的网站或应用程序外部准备用于存档目的的视频,请使用对原始未压缩视频数据执行压缩的实用程序。例如,免费的 x264 实用程序可用于以 AVC 格式编码视频,使用非常高的比特率

bash
x264 --crf 18 -preset ultrafast --output out-file.mp4 in-file

尽管其他编解码器在显著压缩视频时可能具有更好的最佳质量水平,但它们的编码器往往足够慢,以至于通过这种压缩获得的近乎无损编码在相同的整体质量水平下要快得多。

录制视频

考虑到您能达到的接近无损的限制,您可能会考虑使用 AVCAV1。例如,如果您正在使用 MediaStream 录制 API 录制视频,您可以在创建 MediaRecorder 对象时使用如下代码

js
const kbps = 1024;
const Mbps = kbps * kbps;

const options = {
  mimeType: 'video/webm; codecs="av01.2.19H.12.0.000.09.16.09.1, flac"',
  bitsPerSecond: 800 * Mbps,
};

let recorder = new MediaRecorder(sourceStream, options);

此示例创建了一个配置为录制 AV1 视频的 MediaRecorder,使用 BT.2100 HDR,12 位颜色,4:4:4 色度子采样,以及 FLAC 用于无损音频。生成的文件将使用不超过 800 Mbps 的比特率,由视频和音频轨道共享。您可能需要根据硬件性能、您的要求以及您选择使用的特定编解码器来调整这些值。这个比特率显然不适合网络传输,可能只会在本地使用。

codecs 参数的值分解为其用点分隔的属性,我们看到以下内容

描述
av01 四字符代码 (4CC) 指定,用于识别 AV1 编解码器。
2 配置文件。值 2 表示专业配置文件。值 1 是高配置文件,而值 0 将指定主配置文件。
19H 级别和层。此值来自 AV1 规范A.3 节中的表格,表示 6.3 级的高层。
12 色彩深度。这表示每个分量 12 位。其他可能的值是 8 和 10,但 12 是 AV1 中可用的最高精度颜色表示。
0 单色模式标志。如果为 1,则不录制色度平面,所有数据应严格为亮度数据,从而产生灰度图像。我们指定了 0,因为我们想要颜色。
000 色度子采样模式,取自 AV1 规范中的第 6.4.2 节。值 000,与单色模式值 0 结合,表示我们想要 4:4:4 色度子采样,即没有颜色数据损失。
09 要使用的颜色原色。此值来自 AV1 规范中的第 6.4.2 节;9 表示我们想要使用 BT.2020 颜色,用于 HDR。
16 要使用的传输特性。这也来自第 6.4.2 节;16 表示我们想要使用 BT.2100 PQ 颜色的特性。
09 要使用的矩阵系数,再次来自第 6.4.2 节。值为 9 指定我们想要使用带有可变亮度的 BT.2020;这也被称为 BT.2010 YbCbCr。
1 视频“全范围”标志。值为 1 表示我们希望使用全色范围。

您的编解码器选择的文档可能会提供您在构建 codecs 参数时将使用的信息。

另见