H.265(HEVC)深度解析


***【在线视频教程】***

好文章,来自【福优学苑@音视频+流媒体】

H.265(HEVC)深度解析

带宽危机,H.265救驾


image.png

  数字视频的超高清潮流奔腾向前,帧率从30 fps向60fps、 120fps甚至240fps进发,与此同时,物理媒介日薄西山,内容正通过有形无形的网络在世界各个角落的终端设备上传递。高度密集的数据给带宽和存储带来巨大挑战,当前主流的H.264开始不敷应用,而新一代视频编码标准H.265似乎成为了数字4K时代的“救世主”。


  H.265又称为HEVC(全称High Efficiency Video Coding,高效率视频编码,本文统称为H.265),是ITU-T H.264/MPEG-4 AVC标准的继任者。2004年开始由ISO/IEC Moving Picture Experts Group(MPEG)和ITU-T Video Coding Experts Group(VCEG)作为ISO/IEC 23008-2 MPEG-H Part 2或称作ITU-T H.265开始制定。第一版的HEVC/H.265视频压缩标准在2013年4月13日被接受为国际电信联盟(ITU-T)的正式标准。。


  理论上H.265比H.264效率提高30-50%(尤其是在更高的分辨率情形下),但真的这么简单吗?


H.265的改变


  H.265重新利用了H.264中定义的很多概念。两者都是基于块的视频编码技术,所以它们有着相同的根源,和相近的编码方式,包括:


  1、以宏块来细分图片,并最终以块来细分。


  2、使用帧内压缩技术减少空间冗余。


  3、使用帧内压缩技术减少时间冗余(运动估计和补偿)。


  4、使用转换和量化来进行残留数据压缩。


  5、使用熵编码减少残留和运动矢量传输和信号发送中的最后冗余。


  事实上,视频编解码从MPEG-1诞生至今都没有根本性改进,H.265也只是H.264在一些关键性能上的更强进化以及简单化。


  那么问题来了,H.265到底强在哪里?


  和H.264一样,H.265也可以根据带宽需求进行调节。但你是想在普通互联网上传输4K内容,还是要实现最好的图像质量,就要厘清“更多的压缩”和“更好的压缩”这两个概念。如果只是更多的压缩,4K和超高清不一定要保证比今天的1080p或HD做到更好的图片质量。根据压缩数量的多少,流媒体4K有可能看起来比现在的1080p蓝光看起来更糟糕,因为1080p蓝光相比在线流媒体会有更多的带宽留给视频。更好的压缩则意味着更聪明的压缩,面对同样的原始素材,更好的压缩会以更好的方式,在不牺牲质量的情况下令数据量减少。更多的压缩很容易,而更好的压缩需要更多的思考和更好的技术,通过更智能的算法来处理图像,在维持质量的同时保持更低的比特率,这正是H.265所要做的。


  如何实现更好的压缩,举例来讲,我们通常会发现在很多的图像素材里,如视像会议或者电影的很多场景中,每一帧上的大部分内容并没有改变太多,视像会议中一般只有讲话者的头在动(甚至只有嘴唇在动),而背景一般是不动的,在这种情况下,我们的做法不是对每一帧的每一个像素编码,而是对最初的帧编码,然后仅对发生改变的进行编码。




  左图是经AVC/H.264处理的宏块,而右图则有更多的灵活性。


image.png

image.png


  H.265正从以下几个方面向着“更好的压缩”迈进。


图像分区


  H.265将图像划分为“树编码单元(coding tree blocks, CTU)”,而不是像H.264那样的16×16的宏块。根据不同的编码设置,树编码块的尺寸可以被设置为64×64或有限的32×32或16×16。很多研究都展示出更大的树编码块可以提供更高的压缩效率(同样也需要更高的编码速度)。每个树编码块可以被递归分割,利用四叉树结构,分割为32×32、16×16、8×8的子区域,下图就是一个64×64树编码块的分区示例。每个图像进一步被区分为特殊的树编码块组,称之为切割(Slices)和拼贴(Tiles)。编码树单元是H.264的基本编码单位,如同H.264的宏块。编码树单元可向下分区编码单元(Coding Unit,CU)、预测单元(Prediction Unit,PU)及转换单元(Transform Unit,TU)。


  每个编码树单元内包含1个亮度与2个色度编码树块,以及记录额外信息的语法元素。一般来说影片大多是以YUV 4:2:0色彩采样进行压缩,因此以16 x 16的编码树单元为例,其中会包含1个16 x 16的亮度编码树区块,以及2个8 x 8的色度编码树区块。



  编码单元是H.265基本的预测单元。通常,较小的编码单元被用在细节区域(例如边界等),而较大的编码单元被用在可预测的平面区域。


image.png


转换尺寸


  每个编码单元可以四叉树的方式递归分割为转换单元。与H.264主要以4×4转换,偶尔以8×8转换所不同的是,H.265有若干种转换尺寸:32×32、16×16、8×8和4×4。从数学的角度来看,更大的转换单元可以更好地编码静态信号,而更小的转换单元可以更好地编码更小的“脉冲”信号。


image.png


预测单元


  在转换和量化之前,首先是预测阶段(包括帧内预测和帧间预测)。


  一个编码单元可以使用以下八种预测模式中的一种进行预测。


image.png


  即使一个编码单元包含一个、两个或四个预测单元,也可以使用专门的帧间或帧内预测技术对其进行预测,此外内编码的编码单元只能使用2N×2N或N×N的平方划分。间编码的编码单元可以使用平方和非对称的方式划分。


  帧内预测:HEVC有35个不同的帧内预测模式(包括9个AVC里已有的),包括DC模式、平面(Planar)模式和33个方向的模式。帧内预测可以遵循变换单元的分割树,所以预测模式可以应用于4×4、8×8、16×16和32×32的变换单元。


image.png


  帧间预测:针对运动向量预测,H.265有两个参考表:L0和L1。每一个都拥有16个参照项,但是唯一图片的最大数量是8。H.265运动估计要比H.264更加复杂。它使用列表索引,有两个主要的预测模式:合并和高级运动向量(Merge and Advanced MV.)。


  在编码的过程,预测单元是进行预测的基本单元,变换单元是进行变换和量化的基本单元。这三个单元的分离,使得变换、预测和编码各个处理环节更加灵活,


去块化


  与H.264在4×4块上实现去块化所不同的是,HEVC的只能在8×8网格上实现去块。这就能允许去块的并行处理(没有滤波器重叠)。首先去块的是画面里的所有垂直边缘,紧接着是所有水平边缘。与H.264采用一样的滤波器。


  采样点自适应偏移(Sample Adaptive Offset)


  去块之后还有第二个可选的滤波器,叫做采样点自适应偏移。它类似于去块滤波器,应用在预测循环里,结果存储在参考帧列表里。这个滤波器的目标是修订错误预测、编码漂移等,并应用自适应进行偏移。


并行处理


  由于HEVC的解码要比AVC复杂很多,所以一些技术已经允许实现并行解码。最重要的为拼贴和波前(Tiles and Wavefront)。图像被分成树编码单元的矩形网格(Tiles)。当前芯片架构已经从单核性能逐渐往多核并行方向发展,因此为了适应并行化程度非常高的芯片实现, H.265 引入了很多并行运算的优化思路。


image.png


  总而言之,HEVC将传统基于块的视频编码模式推向更高的效率水平,总结一下就是:


  -可变量的尺寸转换(从4×4 到32×32)


  -四叉树结构的预测区域(从64×64到4×4)


  -基于候选清单的运动向量预测。


  -多种帧内预测模式。


  -更精准的运动补偿滤波器。


  -优化的去块、采样点自适应偏移滤波器等。




关键编码特征比较


H.265所面临的挑战


  与之前从H.261到H.264的其他标准相比,H.265的显著改善不仅表现在帧间压缩领域,还表现在帧内压缩方面。由于可变量的尺寸转换,H.265在块压缩方面有很大的改善,但是增加压缩效率的同时也带来了一些新挑战。


困难的场景


  视频编码是一个复杂的问题,对于内容的依赖性很高。众所周知,有静态背景的和高亮的低动态场景可以比高动态、黑场的图片进行更多的压缩。所以对于像H.264这样的现代化编解码器来说首要解决的是最困难的场景/情境。包括:


  有细节的关键帧:无论怎么计算,压缩关键帧都是非常困难的,特别是当图像特征丰富的时候(如一片森林)。如果关键帧从一个安静场景开始,低动态上的高效动态预测和补偿可以实现整体的有效压缩,但是如果图像组之间突然增加了复杂性,编码器很容易就会遭遇危机。


  高动态的“勾边(crisp)”图像:预测高度复杂的动态是相当困难的。当它与高空间复杂性混在一起,将会出现持续的比特率飙升和/或越来越多的伪影。


  黑暗区域的慢动态:对黑暗区域编码是一个很大的挑战,因为眼睛在明亮环境要比黑暗环境更敏感。此外,如果你增加了带有纹理物体或烟雾或颜色、阴影细微改变的慢动作场景,那么即使使用了自适应量化或类似的优化,也非常容易看到讨厌的伪影。


    噪声/纹理:噪声几乎是不能被明显压缩的。幸运地市眼睛对于平坦区域和黑暗区域等图像特定区域的纹理和噪音更加敏感,而对于明亮和细节区域的敏感度更低,所以智能的编解码器可以给这些更有需要的区域多留些预算。尽管如此,去压缩噪声内容非常困难,特别是快速移动场景中的噪声。被压缩噪声很容易被发现,因为在低频创建了一个丑陋的模型,并干扰了运动估计/补偿。降噪并不总是适合或者紧迫

H.265为何优于H.264


    比起H.264/AVC,H.265/HEVC提供了更多不同的工具来降低码率,以编码单位来说, 最小的8x8到最大的64x64。信息量不多的区域(颜色变化不明显,比如车体的红色部分和地面的灰色部分)划分的宏块较大,编码后的码字较少,而细节多的地方(轮胎)划分的宏块就相应的小和多一些,编码后的码字较多,这样就相当于对图像进行了有重点的编码,从而降低了整体的码率,编码效率就相应提高了。同时,H.265的帧内预测模式支持33种方向(H.264只支持8种),并且提供了更好的运动补偿处理和矢量预测方法。



    反复的质量比较测试已经表明,在相同的图象质量下,相比于H.264,通过H.265编码的视频码流大小比H.264减少大约39-44%。由于质量控制的测定方法不同,这个数据也会有相应的变化。通过主观视觉测试得出的数据显示,在码率减少51-74%的情况下,H.265编码视频的质量还能与H.264编码视频近似甚至更好,其本质上说是比预期的信噪比(PSNR)要好。这些主观视觉测试的评判标准覆盖了许多学科,包括心理学和人眼视觉特性等,视频样本非常广泛,虽然它们不能作为最终结论,但这也是非常鼓舞人心的结果。


    目前的HEVC标准共有三种模式:Main、Main10和Main Still Picture。Main模式支持8bit色深(即红绿蓝三色各有256个色度,共1670万色),Main10模式支持10bit色深,将会用于超高清电视(UHDTV)上。前两者都将色度采样格式限制为4:2:0。预期将在2014年对标准有所扩展,将会支持4:2:2和4:4:4采样格式(即提供了更高的色彩还原度)和多视图编码(例如3D立体视频编码)。


    事实上,H.265和H.264标准在各种功能上有一些重叠。例如,H.264标准中的Hi10P部分就支持10bit色深的视频。另一个,H.264的部分(Hi444PP)还可以支持4:4:4色度抽样和14比特色深。在这种情况下,H.265和H.264的区别就体现在前者可以使用更少的带宽来提供同样的功能,其代价就是设备计算能力:H.265编码的视频需要更多的计算能力来解码。目前已经有支持H.265解码的芯片发布了——美国博通公司(Broadcom)在今年1月初的CES大展上发布了一款Brahma BCM 7445芯片,它是一个采用28纳米工艺的四核处理器,可以同时转码四个1080P视频数据流或解析分辨率为4096×2160的H.265编码超高清视频。


    H.265标准的诞生是在有限带宽下传输更高质量的网络视频。对于大多数专业人士来说,H.265编码标准并不陌生,其是ITU-TVCEG继H.264之后所制定的视频编码标准。H.265标准主要是围绕着现有的视频编码标准H.264,在保留了原有的某些技术外,增加了能够改善码流、编码质量、延时及算法复杂度之间的关系等相关的技术。H.265研究的主要内容包括,提高压缩效率、提高鲁棒性和错误恢复能力、减少实时的时延、减少信道获取时间和随机接入时延、降低复杂度。

好文章,来自【福优学苑@音视频+流媒体】
***【在线视频教程】***