一文读懂视频编码的前世今生及未来
数字视频的超高清潮流奔涌向前。随着4K、AR/VR、全息视频等技术的逐步落地,视频高密度的数据给带宽和存储都带来了巨大挑战。当前主流的H.264已不堪重负,新一代视频编码标准H.265在“韬光隐晦”了多年后,终于要爆发。
那么,什么是H.264、又什么是H.265?他们的差距究竟有多大?视频编码的原理是什么?H.265如此优越,为什么很多企业敬而远之要另辟蹊径?下一代视频编码的方向又在哪里?
这篇文章将通过深度剖析视频编码的内部工作原理,来解释清楚怎样将千兆字节的数据压缩到1/100而人眼分辨不出差别。它好比是数学学位,你将无法在社区大学获得,但可能更有用。除此之外,它还将告诉你下一代视频编码标准的进展及方向。
如果你想更好的控制编码,理解编码器内部工作原理是非常有帮助的。具有讽刺意味的是,上文提到的标准没有一个是对编码器的定义,而是编码器的要求。正如我们将要看到的,这些能帮助编码器写入器用所有的技术手段和用户设置来增强编码,为了甚至一个小文件或画质的提升,通常以更长的编码时间和更多的处理器为代价。
OK,开始畅游视频编码技术的海洋
▲JPEG在低质量设置压缩下难以保持细节清晰
曾几何时,出席了GIF动画,事情变得更糟。从1987年起,我们从一个知名的国际标准组织获得了30年的稳定编码增强功能,直到上个十年。
我们不打算详述历史,不过有一些固定的命名大会和系统的事情值得我们注意。在动图出来之前,有静态的图片。1991年底,联合图像专家小组发布首个JPEG代码,1992年出台标准。这个小组从1986年开始研究JPEG。
同样,国际电信联盟(ITU)于1984年成立了视频编码专家组(VCEG),以开发电话会议的国际数字视频标准。 第一个标准是H.261,于1990年完成,旨在通过64kb / s ISDN链路以高达176x144的分辨率发送动态图像。 由此,H.262,H.263,H.264和H.265都相继诞生了。在H.261之后,下一个视频标准被称为MPEG-1。
因此,您可以了解到这些标准的来源。 我们之前提到JPEG有两个原因:首先,MPEG(动态图像专家组)是在JPEG成功之后形成的。 它还使用了一些相同的技术来减少编码文件的大小,这是从现有的无损数字存储到使用有损技术的巨大转变。
关于现代有损压缩的最重要的事情之一是如何处理和压缩图像。 我们将从基础开始, JPEG压缩(见上图)原理是整个行业的核心 - 并将这些知识扩展到动态图片和MPEG中。 一旦我们掌握了这一点,我们将明白这些标准是如何改进和扩展以创建我们今天的H.264和H.265标准的。
▲ 针对不同颜色空间对颜色通道采样原理
空间:多彩的疆界
首先进入脑海的事色彩空间的变化。你可能习惯于认为PC上的所有东西都是以16位、24位或32位颜色存储,这些颜色分别在红、绿、蓝颜色通道上。同样强调存储所有颜色、色调和亮度信息。事实上,人眼对亮度(即发光度)的敏感程度远高于其他任何因素,然后是色调,最后是色彩饱和度。
色彩空间从RGB变为YCbCr,又称亮度和两个色度通道(此处为蓝色和红色) - 如果您想知道,这与YUV有关。 原因是启用图像的色度子采样, 也就是说,我们将降低Cb和Cr通道的分辨率以节省空间(希望如此),而不会出现任何可察觉的质量下降。
这表示为亮度与色度通道的比率。 最高质量的全RGB - 将是4:4:4,每个像素具有Y,Cb和Cr数据。 它仅用于高端视频设备。 广泛使用的4:2:2,对于每个像素具有Y,但是对于色度数据,水平分辨率减半; 这在大多数视频硬件上使用。而4:2:0保持水平分辨率减半,但现在跳过每隔一条垂直线(见上图) - 这是在每个H.26x 标准和DVD/蓝光等标准的MPEG中使用的编码。 Why? 它将所需的带宽减半。
▲ 每张图片都可以大致由此构成
如此的科学
现在繁重的数学运算开始了,所以准备你的灰质...... 对于每个通道Y,Cb和Cr,图像被分成8×8像素块。 对于视频,这些被称为宏块。 事实上,每个宏块都使用类型二的前向离散余弦变换(DCT)进行处理。
DCT过程将离散空间域像素变换为频域表示。 看看8x8余弦网格 - 黑白干涉图案(见上图)。 DCT输出8x8数字矩阵; 每个数字表示原始8x8图像块与每个对应的基本功能元素的相似程度。 将它们与指定的权重相结合,你就可以得到与人眼无法区分的原始图像。
正如您所看到的,左上角的基本功能元素是普通的(描述为低频),并将描述8x8网格的整体强度。逐渐变高的频率元素在描述整体模式中扮演的角色越来越少。 我们希望的是,最终能够在不损失感知质量的情况下丢弃大部分高频数据(细节部分)。
▲ DCT产生频域矩阵; 我们量化它以得到最终的有损压缩矩阵
该DCT矩阵通过8×8量化器矩阵运行; 提供标准矩阵(基于研究的数量),但软件编码器可以创建自己的,例如50%的质量,因为它一直在进行。 量化器被设计成试图保持低频细节 - 眼睛在高频细节上更容易看到。 每个DCT元素被每个对应的量化器元素划分,并且结果四舍五入到最接近的整数。 最终结果是一个矩阵,低频元素保留在矩阵的左上角,更多的高频元素向矩阵的右下角减少到零,这就是JPEG无损元素的来源。
由于这种左上角的加权,矩阵使用“Z字形”图案重新排列成一个列表,处理对角线中的矩阵,从左上角开始,将大多数零推到末尾(参见上图)。 霍夫曼编码压缩了这个最终数据。 JPEG图像的质量由量化器矩阵的积极程度控制。 尝试将元素向下舍入为零越强烈,工件越多。 恭喜 - 你压缩了静止图像!
如果JPEG非常擅长压缩,为什么不将一个负载粘在一起来制作一个动态图像格式呢? 嗯,你可以 - 它被称为Motion JPEG-但与动态图像编码方案相比,它的效率非常低。
▲ 相比MPEG H.262最新的H.265模型复杂程度在增加
Motion压缩
对于MPEG(和其他压缩方案),每个帧被分成16×16像素的宏块。 为什么不在MPEG标准中使用曾在JPEG中使用的8x8?嗯,MPEG使用4:2:0颜色空间,它会跳过每条水平线,因此我们需要加倍才能在水平和垂直方向保留均匀的数据量。
MPEG标准使用三种类型的帧来创建运动图像。 I(帧内)帧实际上是全帧JPEG图像。 P(预测)帧仅存储I帧和未来P帧之间的差异。 在它们之间是一系列B(双向或帧间)帧,其存储每个宏块的运动矢量细节-B帧能够在之前和即将到来时参考帧。
那么,运动矢量和宏块发生了什么? 编码器将当前帧的宏块与来自锚帧的视频的相邻部分进行比较,该锚帧可以是I帧或P帧。 这达到宏块的预定义半径。 如果找到匹配,则将运动矢量方向和距离数据存储在B帧中。 对此的解码称为运动补偿,即MC。
但是,预测与实际帧不完全匹配,因此也存储预测误差数据。 误差越大,必须存储的数据越多,因此高效的编码器必须执行良好的运动估计,即ME。
因为同一帧中的大多数宏块具有相同或相似的运动矢量,所以可以很好地压缩这些宏块。在MPEG-1中,P帧每个宏块存储一个运动矢量; B帧能够具有前一帧中的两个,以及来自未来帧的一个。编码器将I,P和B帧组无序地组合在一起,并且解码器按照MPEG比特流的顺序重建视频。可以想象,编码器可以实现各种质量和效率变量,从I帧,P帧和B帧的比率到运动补偿效率。
在这一点上,我们已经介绍了压缩的MPEG-1视频的基础知识。音频集成到比特流中,MPEG-1支持立体声MP3音频,但我们不会进入音频压缩。 MPEG-2(又名H.262,见上图)主要使用相同的系统,但经过增强,可支持更广泛的配置文件,包括DVD,隔行扫描视频,高达4:4:4的高质量色彩空间,以及多声道音频。 MPEG-3被纳入MPEG-2,其中包含1080p HD配置文件。
▲ H.264中的可变大小宏块更有利于压缩
MPEG-4:缩放与强化
MPEG-4-又称 H.264开始时的目的是优化数字流媒体的标准。 从一半的比特率中获得更好的图像质量。 但随着蓝光和高清DVD的出现(记得吗?),MPEG-4 Part 10-又称 MPEG-4高级视频编码(AVC)形成了。
AVC于研究工作始于1998年,首次获批是在2003年,即MPEG-1获批的10年后。MPEG-1在1988年开始研究,1993年获批。正如你想象的,一系列的改进在进行中,借助处理器速度和编解码器系统资源的大幅度增加,以及显示器性能的提升。我们已从Video CD是的迈入全高清蓝光时代。
我们不会深入研究用于MPEG-1各个方面的细节,部分原因在于我们已经对基本技术进行了改进,并且很大程度上因为实现的复杂性如此之多,我们已经无能为力了!
为了开始,I帧预测通过增加其复杂性而得到极大改善。 主要的变化是宏块中运动补偿的可变块大小,从16x16到4x4,以及它们之间的任何变化,例如8x16或8x4(上图)。 每个宏块和可用参考帧的多个运动矢量增加到16,缓冲要求为4或5,而之前只有一个或两个。 运动补偿以四分之一像素精度工作。 内置的去块滤波器有助于消除这些16x16伪像。
这只是改进的一小部分 - 例如,关于损失弹力的以提高损坏的数据流的性能的部分,加上增强的协议压缩,无损功能和特定功能的选项,以增强黑白镜头,视觉转换 ,或淡出。
▲ 在低比特率下x265高清能力与H.264的对比
MPEG-5:专利战争
与上一代一样,H.265(即高效视频编码(HEVC)的核心设计目标是获得与H.264相同的图像质量水平,但比特率为一半(上图)。 主观测试率能够使720p的比特率至少降低56%,在2160p时达到64%。
那么,改变了什么? 首先,修复了16x16宏块,取而代之的是编码树块(CTB)。 这些可以是64x64,32x32或16x16像素。 然后可以递归地将CTB细分为编码单元(CU)块,从32x32大小降到8x8,存储为“四叉树”,因为每个CU分支是小方块的四边形。
每个CU递归地分成变换单元(TU),用DCT处理,又可变成32x32到4x4。 除此之外,备选的且更有效的离散正弦变换(DST)被用于4x4块。 这种灵活性和准确性的提高极大地提高了H.265的效率。
真正的力量是连接帧间预测运动矢量系统。 它仍然有两个参考列表,每个参考列表有16个条目,但它可以缓冲8个图片,这些图片可以多次包含相同的帧以进行加权预测。 亮度和铬通道上都有改进的运动补偿滤波器,以及可以并行处理的优化解块滤波器。 最后,H.265的设计考虑了现代系统的多线程处理。 CTB设计生成一个独立可解码块网格。
终于从深奥的技术海洋中浮出水面
音频编码:难觅存在感
感觉好像人们消费音频的方式已经发生了巨大的变化,从旧的所有者/收集者到新的流媒体/订阅模式。即使考虑到这一点,如果您要存储自己的音频,如果您以任何方式关心,您将使用无损编解码器。 存储空间很便宜了,FLAC应该是首选。你可以继续使用MP3编码,但更应选择ogg Vorbis。
这两个标准都是开放的(实际上,MP3也在专利已过期时开放),因此技术上可以得到任何关心的人的支持。 FLAC拥有广泛的行业支持,包括Windows,MacoS,ioS,Android和Linux。 同样重要的是,它的设备支持是一流的,包括Sonos,一系列车载系统,Denon,Synology和Plex,仅举几例。 ogg的支持有限,但Windows,MacoS和ioS可以支持。
有些人可能会指出,更新的格式opus,其无损格式可提供更高的质量,但它的年幼也意味着硬件支持比ogg更有限。
下一代HEVC
H.265编码方式表明了编解码器设计人员已取得了难以置信的成就:在降低比特率的同时提高了图像质量,而且并没有大幅提高解码复杂度。 编解码器世界不爽的地方是需要授权许可的软件专利。
如果公平的话,许可证是好的,但众所周知,HEVC的专利费显著的提升,这迫使了该行业开始寻找替代品。拥有视频博客平台YouTube的谷歌显然不愿意为其不断增长的用户群体支付授权费。 它曾购买了VP8编解码器技术,现在使用与H.265对等但免版税的VP9用于YouTube流媒体。 Netflix大量使用H.264 AVC,但可以为兼容设备切换到VP9。
因此,您可以理解为什么开放媒体联盟由Google,Mozilla,Microsoft,Netflix,亚马逊,英特尔,AMD,ARM和Nvidia组成。 AV1是它一直在开发的编解码器,于2018年3月底发布.Netflix的测试显示比HEVC和VP9低25%的比特率,但编码复杂了10倍,莫斯科州立大学项目发布的未经优化的编码器速度慢了3500倍。 AV1的一大障碍是硬件支持; 2019年底之前估计无解。HEVC人员并没有坐以待毙 - 一个新的联合视频探索团队已经成立,以便在2020年末开发下一代编解码器。它的效率将提高50%,并支持下一代显示技术。