聊聊H265的性能提升原理
0.引言
阅读本文前,可以参考前面的文章,可以有更好的对比。文章列表如下:
1.H265简述
H.265旨在在有限带宽下传输更高质量的网络视频,仅需原先的一半带宽即可播放相同质量的视频。这也意味着,我们的智能手机、平板机等移动设备将能够直接在线播放1080p的全高清视频。H.265标准也同时支持4K(4096×2160)和8K(8192×4320)超高清视频。可以说,H.265标准让网络视频跟上了显示屏“高分辨率化”的脚步。
继 H.264 编解码标准之后,联合视频组(JVT)于 2010 年 1 月份的第一届 JCT-VC会议上确定了新一代视频标准的名称为高性能视频编码(HEVC,High Efficiency Video Coding)。在 2013 年 1 月份由 ITU-T 以及 ISO/IEC 共同发布了 H.265/HEVC 标准的第一版。
H.265/ HEVC 标准沿袭了 H.264/AVC 标准中的预测编码结合混合编码的模式,保留了原有的一些技术,如帧内预测、帧间预测、熵编码等,同时对这些技术加以改进和修正,用以平衡码流、编码质量、编码延时和编码算法时间复杂度之间的关系,从而达到最优化设置。在主观效果相似的前提下,在 H.264/AVC 已有码率的基础上节约 50%的比特率。当采用 PSNR 作为客观质量评价指标时,与 H.264/AVC 的 High Profile 相比,在全部帧内编码的条件下可以节省大约 22%的比特率,在支持随机访问的条件下可以节省大约 34%的比特率,在低延时的条件下可以节省 37%的比特率。但在实际应用方面,H.265/HEVC 节省码率的背后是数倍于 H.264/AVC 的算法时间复杂度。
相对于 H.265 编解码标准,目前其最有力的竞争对手是由 Google 开发的开放格式、无使用授权费的视频压缩标准 VP9。VP9 是 Google 于 2011 年开始研发的基于 VP8 的视频编解码标准。并且已于 2013 年正式应用于 Google 的 Chroma 网页浏览器中。但同等PSNR 的条件下,H.265 较 VP9 有 12%的码流节省;H.265 在并行处理方面也优于 VP9。
在软编解码工具方面,目前应用最为广泛的为 x265开源编码器。x265 基于H.265/HEVC 视频压缩标准,是一个面向实用性的开源视频编解码库。它由 Multicore Ware公司建立,并允许所有用户在 GNU GPL 2 授权协议下使用。x265 通过多线程机制支持帧级并行和行级并行编码,并集成了大量的算法优化、汇编加速、单指令多数据实现等,大幅度提高了编码速度。H265的计算量比较大,可能有些CPU编码起来,比较费力。目前市面上支持
H.265/HEVC 的主流显卡厂家主要包括:Intel,Nvidia 以及 AMD。多核架构的应用方式通常是以 Intel 或 AMD 公司研发的多核处理器作为核心运算部件,利用多个核心之间的并行处理能力,加速编解码的运算进程。众核架构通常以 NVIDIA 公司推出的通用计算图形处理器为代表。回顾Intel 的 CPU 的发展历程,从 2015 年发布的第六代 skylake 架构的 CPU 开始支持硬件编解 HEVC/H.265,但是还不支持 HEVC 10bit,直到在 CES 2017 大会上正式发布的第七代 Kaby Lake 才完整的支持 HEVC 10bit 编码,多媒体功能进一步加强。而 Nvidia 则是从 GTX960 开始支持 HEVC/H.265,AMD 则是从第六代 A 系列 APU 支持 HEVC/H.265 硬件解码加速。
2.H.265/HEVC 基本编码框架
H.265 继承了 H.264/AVC 中算法结构的基本框架,从整体上来说变化不大,依然沿用了混合编码框架。编码框架,如下图所示:
该框架中,帧间预测和帧内预测共同组成了编码器的预测模块,帧内预测根据单帧图像内部的像素特点,压缩图像内部的冗余,消除空间上的相关性。帧间预测通过根据特定参考帧,来计算当前帧的运动矢量,用来消除时间上的相关性。一般对于视频中的第一帧,由于编码器中还没有相应的参考帧可用,将仅使用帧内编码模式编码,之后才可以用帧间编码方式。
当预测模块产生预测信息后,编码器将预测信息与当前帧信息做差值得到残差数据,并对所得到的残差数据进行一系列的量化变换处理,进一步消除冗余信息,最后将其与其他信息合在一起就构成了最终的编码好的数据流。而对于框架中的反量化、反变以及滤波等过程其实与解码器中的对应功能相同,即在编码器中部分存在着解码器的部分功能,这一部分的主要功能是根据变换和量化处理后的残差信息重建原始残差信息,这些原始残差信息将与一些预测信息一起,作为帧内预测所需要的数据。或者经过一系列的滤波处理,加上运动估计,作为帧间预测中的参考帧。
3.H.265/HEVC 与 H.264/AVC 相比的新特性
虽然整体框架相比于 H.264/AVC 标准基本不变,但是 H.265 在每个主要模块上都有不同程度上的改进和创新,具体部分下面将分几个小节具体介绍。
H.265/HEVC的编码架构大致上和H.264/AVC的架构相似,主要也包含,帧内预测(intra prediction)、帧间预测(inter prediction)、转换(transform)、量化(quantization)、去区块滤波器(deblocking filter)、熵编码(entropy coding)等模块。
反复的质量比较测试已经表明,在相同的图象质量下,相比于H.264,通过H.265编码的视频大小将减少大约39-44%。由于质量控制的测定方法不同,这个数据也会有相应的变化。
通过主观视觉测试得出的数据显示,在码率减少51-74%的情况下,H.265编码视频的质量还能与H.264编码视频近似甚至更好,其本质上说是比预期的信噪比(PSNR)要好。
4.H.265/HEVC 的编码结构
与前一代标准 H.264/AVC 以相对固定的大小进行宏块划分的策略不同,H.265 标准引入了新的宏块划分策略,即四叉树划分技术。而为了支持这种更高效灵活的划分策略,H.265 标准引入了四种新的编码结构,即编码树单元(CTU,Coding Tree Unit),编码单元(CU,Coding Unit),预测单元(PU,Predicttion Unit)以及变换单元(TU,Transform Unit)[20]。一个编码树单元(CTU)包含了同一位置处的一个亮度编码树块(CTB,Coding Tree Block)和两个色度编码树块以及一些相应的语法元素。编码树单元在概念和功能上等同于 H.264/AVC 标准中的宏块,即为每一帧图像的划分单位。但与H.264/AVC 固定尺寸的 16x16 宏块不同的是,在 H.265 标准中 CTU 的大小范围更加灵活,不但可以取 16X16,还可以是 8X8、32X32 甚至最大到 64X64。如图 2.2 所示,一幅图像依据编码器设置的 CTU 大小,能够被划分为若干个互不堆叠的 CTU。图像的 CTU 划分,如下图所示:
对于每一个 CTU 的内部,其划分依然使用基于四叉树的划分策略进行循环分层,用编码单元 CU 进行划分。CTU 的根节点 CU 是最大编码单元(LCU,Largest Coding Unit),其大小与当前 CTU 的大小相当,最大可达 64X64,而一个 CTU 中最小的 CU 称为最小编码单元(SCU,Smallest Coding Unit)。一个 CTU 能够仅包含一个 CU,即没有继续划分,也可能被划分为多个 CU,而且在分割树上处于同一层次上的 CU 的深度也相同,深度的最大值为 3。划分示例如下图:
预测单元 PU 主要的功能是用于预测运算,它的划分以 CU 的划分为基础。对于一个 2Nx2N划分的 CU,帧内预测单元的划分方式有两种 2Nx2N和 NxN。帧间预测方式则有8种类型,其中包括 4 种对称模式 2Nx2N、NxN、Nx2N、2NxN,4 种非对称模式 2Nxn U、2Nxn D、n Lx2N、n Rx2N(其中 U、D、L、R 分别对应上下左右四个方向),其中 n Lx2N、n Rx2N是指左右 1:3,3:1 的比率划分,2Nxn U,2Nxn D为以上下 1:3,3:1 的比率划分。PU预测的方式如下图:
TU 是用于变换量化的基本单元,其划分方式与 CU 的划分方式类似。变换单元划分时以 CU 的大小为根据,使用迭代的方式进行四等分。按照划分过程中的深度不同,TU 其大小可以是 32x32,16x16,8x8和 4x4中的一个。以上这些H.265 的编码结构划分方式,在像素较平坦的地方可以用更大的编码块进行表示,对于像素变化敏感的区域则使用较小的编码单元进行描述。这样,就扩大了在对一帧图像进行划分时编码块大小的灵活性,不仅提高了编码的效率,又在很大程度上降低了图像细节在编码过程中的失真。
以该图为例,信息量不多的区域(颜色变化不明显,比如车体的红色部分和地面的灰色部分)划分的宏块较大,编码后的码字较少,而细节多的地方(轮胎)划分的宏块就相应的小和多一些,编码后的码字较多,这样就相当于对图像进行了有重点的编码,从而降低了整体的码率,编码效率就相应提高了。
5.H.265/HEVC 的帧内预测
在帧内预测放面,H.265 标准中采用的帧内预测算法原理与 H.264/AVC 基本标准一致。不同的是在 H.265 中,支持的预测模式达到了 35 种,包括 33 种角度预测以及不带方向性的 Planar 和 DC 两种模式,如下图所示。由于使用了基于四叉树的编码结构,所以在帧内预测时的参考值并不局限于当前编码单元左上方到右上方之间的像素值,有了更大的参考元素空间。HEVC 在帧内预测模式的过程中会更具不同的 PU 大小选择不同的帧内预测模式,这种选择方式更加细致,并且能提高帧内预测的精准度,最终反映为冗余空间大小的降低。
6.H.265/HEVC 的帧间预测
在帧间预测中,H.265/HEVC 主要在如下四个方面做了改进:
(1)H.265/HEVC 仍然采用了 H.264 中的 B 预测方式,同时还增加了广义 B(GPB,Generalized P and B picture)预测方式。对于单个 P 帧,H.265/HEVC 使用一个向前参考列表和向后参考列表对其进行帧间预测,两个列表中的图像相同并且在序列上均位于该帧之前。
(2)H.265/HEVC 的编码器对像素的大小进行了拓展,具体分为 8 bit、10bit、12bit。通过这种方式,可以提升每个像素中包含的信息量,从而提升解码的效果。
(3)H.265/HEVC 提出了融合模式(Merge Mode),它融合了之前使用的它将以往预测过程中的跳过模式(Skip Mode)和直接模式(Direct Mode)的过程。当使用这种模式时,某个 PU 块的运动信息可以通过与之相邻的 PU 块的运动信息进行推导来得到,这些信息包括:运动适量、参考索引等等
(4)自适应运动矢量预测技术(AMVP,Adaptive Motion Vector Predition):这种预测方式的作用对象为普通的帧间预测 PU。使用 AMVP 时,PU 通过对运动矢量的候选列表来选择最合适的预测运动适量,而运动矢量候选表则是通过相邻的 PU 以及相邻空域和时域的 PU 的信息由 AMVP 进行构造。
7.H.265/HEVC 的滤波技术
H.265 标准继承了 H.264/AVC 标准中的去块滤波器,并且在此基础上加入了采样点自适应偏移(SAO ,Sample Adaptive Offset)技术,用于对重构的像素值进行滤波和补偿。在编码结构中可以看出,编解码环路内,SAO 位于去块滤波器之后,经过对重建的图像进行分类,根据类别不同,对每类中的图像像素值加减一个偏移量,进而达到减少失真的目的,从而提高压缩率,减少码流。采用SAO技术之后后,H.265/HEVC 的编码结果 H.265/HEVC 可以压缩掉2%~6% 的码流,而对应的编解码器的时间复杂度仅仅上升约2%。
8.总结