H265(HEVC Heigh Efficiency Video Coding)介绍
1 概要
H.265(高效率视频编码(HEVC))是现行“H.264/MPEG-4 AVC”标准于2003年实现标准化以来时隔10年推出的新标准,将成为支撑未来十年的影像服务和产品的视频压缩技术。其特点是,支持1080p以上的4K×2K和8K×4K分辨率,将视频压缩率提高至H.264的约2倍。也就是说,能以原来一半的编码速度发送相同画质的视频。例如,按照20Mbit/秒发送的H.264格式视频内容,在相同画质的条件下用HEVC格式只需10Mbit/秒的速度。
1.1 H.265发展背景
H.264虽然是一个划时代的数字视频压缩标准,但是随着数字视频产业链的高速发展,H.264的局限性逐步显现,并且由于H.264标准核心压缩算法的完全固化,并不能够通过调整或扩充来更好地满足当前高清数字视频应用。
视频应用向以下几个方面发展的趋势愈加明显:
(1)高清晰度(Higher Definition):数字视频的应用格式从720P向1080P全面升级,在一些视频应用领域甚至出现了4K*2K、8K*4K的数字视频格式
(2)高帧率(Higher frame rate):数字视频帧率从30fps向60fps、120fps甚至240fps的应用场景升级
(3)高压缩率(Higher Compression rate):传输带宽和存储空间一直是视频应用中最为关键的资源,因此,在有限的空间和管道中获得最佳的视频体验一直是用户的不懈追求。
由于数字视频应用在发展中面临上述趋势,如果继续采用H.264编码就出现如下一些局限性:
(1)宏块个数的爆发式增长,会导致用于编码宏块的预测模式、运动矢量、参考帧索引和量化级等宏块级参数信息所占用的码字过多,用于编码残差部分的码字明显减少。即:单个宏块所表示的图像内容的信息大大减少,导致4*4或8*8块变换后的低频率相似程度也大大提高,会出现大量的冗余
(2)分辨率的大幅增加,表示同一个运动的运动矢量的幅值将大大增加,H.264中采用一个运动矢量预测值,对运动矢量差编码使用的是哥伦布指数编码,该编码方式的特点是数值越小使用的比特数越少。因此,随着运动矢量幅值的大幅增加,H.264中用来对运动矢量进行预测以及编码的方法压缩率将逐渐降低。
(3)并行度比较低
H.264的一些关键算法,例如采用CAVLC和CABAC两种基于上下文的熵编码方法、deblock滤波等都要求串行编码,并行度比较低。针对GPU/DSP/FPGA/ASIC等这种并行化程序非常的CPU,H.264的这种串行化处理越来越成为制约运算性能的瓶颈。
基于以上视频应用的发展趋势和H.264的局限性,面向更高清晰度、更高帧率、更高压缩率的高效视频编码标准(High Efficiency Video Coding)HEVC(H.265协议标准应运而生。
HEVC的核心目标:在H.264/AVC high profile的基础上,保证相同视频质量的前提下,视频流的码率减少50%。在提高压缩效率的同时,允许编码端适当提高复杂度
HEVC的编码框架:沿用H.263的混合编码框架,即用帧间和帧内预测编码消除时间域和空间域的相关性,对残差进行变换编码以消除空间相关性,熵编码消除统计上的冗余度。HEVC在混合编码框架内,着力研究新的编码工具或技术,提高视频压缩效率
HEVC的技术创新:基于大尺寸四叉树结构的分割技术,多角度帧内预测技术,运动估计融合技术,高精度运动补偿技术,自适应环路滤波技术以及基于语义的熵编码技术。
通信和广电行业的人士对HEVC的高压缩率寄予了厚望。
1.2 发展历程
早在2004年,ITU-T视频编码专家组(VCEG)开始研究新技术以便创建一个新的视频压缩标准。在2004年10月,H.264/ AVC小组对潜在的各种技术进行了调查。2005年1月VCEG的会议上,VCEG开始指定某些主题为“关键技术”作进一步研究。2005年成立软件代码库称为Key Technical Areas (KTA)用来评估这些新的“关键技术。KTA的软件是在联合模型(JM)基础上由MPEG和VCEG的视频组联合开发的,项目名称暂定为H.265和H.NGVC(Next-generation Video Coding),此项目在2010年最终演化为由VCEG和MPEG合资项目也叫做
按照NGVC的初步要求,在维持视觉HEVC(High efficiency video coding)。质量相同的情况下,比特率较H.264/MPEG-4 AVC的高中档(high profile),计算复杂度维持在比特率较H.264/MPEG-4 AVC的高中档的1/2至3倍之间。 “H.265” 只是作为 “高性能视频编码(HEVC)”一个昵称。2009年7月,实验结果表明比特率相较于H.264/AVC High Profile平均降低20%左右,这些结果促使MPEG与VCEG合作发起的新的标准化工作。
2010年1月,VCEG和MPEG开始发起视频压缩技术正式提案。相关技术由视频编码联合组(Joint Collaborative Team on Video Coding (JCT-VC))审议和评估,其合作小组第一次会议于2010年4月召开大会,一共有27个完整的提案。评价结果表明,一些提案在许多测试用例可以达到只用一半的比特率并维持H.264/AVC相同的视觉质量。在这次会议上,联合项目名改称为高效率的视频编码(HEVC),并且JCT-VC小组把相关技术集成到一个的软件代码库(HM)和标准文本草案规范,并进行进一步实验,以评估各项功能。
2012年2月10日,在美国圣何塞召开了第99届MPEG会议。MPEG组织和ITU-T组织对JCT-VC的工作表示满意,准备于2013年1月,同时在ISO/IEC和ITU-T发布HEVC标准的最终版本。
2013年1月26号,HEVC正式成为国际标准。
标准时间点:
2010年1月,ITU-T VCEG(Video Coding Experts Group)和ISO/IEC MPEG(Moving Picture Experts Group)联合成立JCT-VC(Joint Collaborative Team on Video Coding)联合组织,统一制定下一代编码标准:HEVC(High efficiency video coding)。
2012.2:委员会草案(标准草案完成稿);HEVC委员会草案获得通过。
2012.7:HEVC国际标准草案获得通过
2013.1:国际标准最终获得通过
1.3 应用领域
以前,伴随每次视频压缩技术的进化,多种影像服务和产品都会纷纷亮相(图1)。1995年实现标准化的MPEG-2得到了DVD和数字电视等领域采用,大幅扩大了视频压缩技术的应用范围。MPEG-4在1998年实现标准化后,立即应用到了移动和互联网视频服务领域。伴随视频压缩技术的升级,各种影像服务和产品随之登场。2013年以后,随着HEVC的进步, 4K及8K电视及网络全高清影像服务也纷纷出现。箭头指示的是各服务和产品主要采用的压缩技术。
图1:视频压缩技术及对应的影像服务和产品的历史
图2:HEVC的应用示例
HEVC的应用示意图如图2所示。在广播电视、网络视频服务、电影院及公共大屏幕(Public Viewing)等众多领域,4K×2K和8K×4K视频发送将变得更容易实现。个人电脑及智能手机等信息终端自不用说,平板电视、摄像机及数码相机等AV产品也会支持HEVC。
不仅是这些既有市场,HEVC还有可能在今后有望增长的新市场上大显身手。例如,影像监控系统就是其中之一。影像监控系统最近几年在快速从原来的模拟摄像头组合VTR的方式,向经由IP网络发送、存储和浏览数码摄像头拍摄的视频的方法过度。为提高安全性,需要增加摄像头数量、提高影像的精细度,而与此同时,确保网络频带和存储容量增加。估计HEVC将作为解决这些课题的措施而得到采用。
1.4 优缺点
优点:
1、高压缩率
1)在视频质量相同的条件下,较H.264平均减少50%的码流,可以节省下大量的网络带宽及存储空间
2)在同码流条件下提供更加高质量的视频
2、支持8192×4320分辨率
缺点:
1、HEVC使用到的技术和算法较前两代标准H.264和MPEG-2更为复杂,视频流在压缩过程中需要经过更多的选择和运算。
2、HEVC不支持大多数硬件,通常需要效率更高,更多的处理器来辅助,这意味着,如果有一个固件需要更新,而编解码器却跟不上升级速度的话,那么我们的电视机顶盒和蓝光播放机是无法播放HEVC编码内容的,需要等待解决方案出现后才能继续使用。
2 编解码技术
通过帧间预测编码和帧内预测编码消除时域空域的相关性;通过对预测残差的变换编码消除时间上的相关性;通过熵编码消除比特分配造成的编码冗余。但
2.1 H.265编码框架及编码单元结构
与H.263以来的视频编码标准一样,HEVC的设计沿用了经典的基于块的混合视频编码框架。框架主要包括,帧内预测(intra prediction)、帧间预测(inter prediction)、转换 (transform)、量化(quantization)、去区块滤波器(deblocking filter)、熵编码(entropy coding)等模块,但在HEVC编码架构中,整体被分为了三个基本单位,分别是:编码单位(coding unit,CU)、预测单位(predict unit,PU) 和转换单位(transform unit,TU )。
视频编码的基本流程为:将视频序列的每一帧划分为固定大小的宏块,通常为16×16像素的亮度分量及2个8×8像素的色度分量(对于4?誜2?誜0格式视频),之后以宏块为单位进行编码。对视频序列的第一帧及场景切换帧或者随机读取帧采用I帧编码方式,I帧编码只利用当前帧内的像素作空间预测,类似于JPEG图像编码方式。其大致过程为,利用帧内先前已经编码块中的像素对当前块内的像素值作出预测(对应图中的帧内预测模块),将预测值与原始视频信号作差运算得到预测残差,再对预测残差进行变换、量化及熵编码形成编码码流。对其余帧采用帧间编码方式,包括前向预测P帧和双向预测B帧,帧间编码是对当前帧内的块在先前已编码帧中寻找最相似块(运动估计)作为当前块的预测值(运动补偿),之后如I帧的编码过程对预测残差进行编码。编码器中还内含一个解码器,如图1中青绿色部分所示。内嵌解码器模拟解码过程,以获得解码重构图像,作为编码下一帧或下一块的预测参考。解码步骤包括对变换量化后的系数进行反量化、反变换,得到预测残差,之后预测残差与预测值相加,经滤波去除块效应后得到解码重构图像。
帧内预测编码图
帧间预测编码图
HEVC以LCU块为单位对输入视频帧进行处理,首先是预测,可进行帧内预测与帧间预测。
帧内预测:预测块由当前帧中已编码并解码重建的相邻块预测得到。
帧间预测:预测块通过基于一个或多个参考帧的运动估计和运动补偿得到。然后通过当前块减去预测块得到预测残差。预测残差进一步进行变换编码和量化,从而得到量化后的残差系数。然后对量化后的残差系数、编码模式以及相关的编码参数等信息进行熵编码,从而得到压缩后的比特流。同时量化残差还要进行反变换和反量化,然后将残差和预测值相加起来重建图像,再进行滤波,生成参考帧
2.2 编码单元结构
以往H.264会以16 x 16像素为单位(或是16 x 8、8 x 8、8 x 4、4 x 4等配置),将画面切割为数个大小相同的宏块,并以这些宏块做为编码时的最小元素。H.265则是将切割画面的工作从使用者手动设定,转交给编码器来决定,让编码器可视情况以16 x 16、32 x 32、64 x 64等尺寸,将画面切割为数个编码树单元,一般来说区块尺寸越大,压缩效率就会越好。
左图是传统的H.264标准,每个宏块大小都是固定的;右图是H.265标准,编码单元大小是根据区域信息量来决定的
H.265没有继续采用之前的宏块(Micro Block,MB)概念,而是使用编码单元(Coding unit,CU)作为基本的编码结构。一个CU可以包含一个或多个不同尺寸的预测单元PU(Prediction unit),一个PU包含若干变换单元(Transfore unit,TU)。CU,PU,TU三种在编码中起的作用不一样,不过这种编码方式还是基于混合编码,但是采用了这三种unit之后,能够更好的分割一张图像,变成一个一个的block用来后续的预测和处理。采用这种结构设计的目的是在增加灵活性的同时,使压缩预测更符合图像特性。
· CU(Coding Unit)
CU是用作帧间和帧内编码的基础单元,他的特点是方块,LCU是64×64,可以使用递归分割四叉树的方法来得到,大的CU适用于图像中比较平滑部分,而小的部分则适用于边缘和纹理较丰富的区域。采用大尺寸CU主要是为了高清压缩编码的应用,毕竟如1080p甚至更大分辨力的视频,其空间会有更大面积的一致性,因此采用更大的编码单元能更有效地减少空间的冗余。
如果仍采用光栅扫描顺序,对CU的寻址会很不方便,因此,H.265定义了Z扫描顺序
这种扫描顺序保证了对于不同分割都能按照相同的遍历顺序进行寻址有利于程序中递归实现
· PU(Prediction Unit)
PU是预测的基本单元,是编码单元CU基础上进行划分的,有SKIP,INTRA,INTER三种模式可以分割,每个CU中可以包含一个或多个PU。PU可以是方形也可以是矩形,这是为了分块能更好与图像中真实物体存在的边界匹配,但是其分割不是递归的,与CU的分割还是有区别的。
PU的尺寸不能超过其所属的CU,PU的划分方式有两类
a. 2Nx2N,NxN,Nx2N,2NxN如图三a所示
b.64×64的CU支持AMP(不对称分割),主要为了适用于CU中纹理偏差比较大的情况,增加预测的精准度,不对称的PU仅适用于帧间预测,如图三b所示
· TU(TransformUnit)
TU是变换和量化的基本单元,它可以大于PU,但是却不可以大于CU的大小。TU同样采用四叉树的分割结构,所支持的尺寸从4×4至32×32的大小。TU的形状取决于PU的划分模式,当PU为正方形时,TU也是正方形的,当PU为非正方形时,TU也是非正方形的,一个CU可以包含一个或多个TU。
下图可以形象的展示CU、PU及CU之间的关系。
2.3 帧内预测
利用图像的空间相关性,用周围重建像素值对当前编码块进行预测
H.265更多的帧内预测方向,在H.264采用9个帧内预测方向的场合,H.265预测方向拓展到33个,另外加上一个DC和一个planar,一共35中预测模式,使得预测更加精细,增加更多提升更高效帧内压缩的可能的参考像素块。明显的代价是在增加的方向中搜索需要更多编码时间。
Planar模式
平面预测是一种新提出的预测方法,常用于内容平滑或纹理不清晰的单元。它为预测单元中的每一个像素点也都要进行插值预测,如图所示。首先根据左侧相邻单元的右下角像素和上方相邻单元的下边界像素插值出当前预测单元下边界的每个像素点,再根据上方相邻单元的右下角像素和左侧相邻单元的右边界像素插值出当前预测单元右边界的每个像素点,然后利用上方相邻单元的下边界、左侧相邻单元的右边界以及插值出的当前单元的下边界和右边界插值出其余的像素点。
在平面预测中,首先右下角的像素Z由图中重建像素L和T平均得到,然后利用重建像素L和T与Z进行线性插值计算出最下面一行和最右边一列像素值,如图中像素M和N,然后利用插值得到的像素进行双线性插值计算其他预测像素值,如图中像素P。
与亮度的帧内预测相比,色度的帧内预测过程要简单的多,只有率失真优化的模式选择过程,且与亮度的率失真优化模式选择过程相同。
色度预测只有5种预测模式:planar、DC、horizontal、vertical、DM_CHROMA等。
DM_CHROMA模式就是利用亮度分量所选择的预测模式,因此如果前4种预测模式中存在亮度分量所选择的预测模式,为了避免重复,就利用垂直向右对角线方向(34)预测替换该重复的预测模式。
2.4 帧间预测
帧间预测利用连续图像之间的相关性,通过运动估计和运动补偿的编码方法去消除视频信息的时间冗余。利用先前已编码重建帧作为参考帧进行预测。
1、帧间预测采用融合模式时,当前PU块的运动信息(包括运动矢量、参考索引、预测模式)都可以通过相邻PU的运动信息推导得到。编码时,当前PU块只需要传送融合标记(Merge Flag)以及融合索引(Merge Index),无需传送其运动信息。
2、帧间预测还可以通过空域相邻PU以及时域相邻PU的运动矢量信息构造出一个预测运动矢量候选列表,PU遍历运动矢量候选列表,在其中选择最佳的预测运动矢量。
2.4.1 广义B帧预测技术
在高效预测模式下,H.265仍然采用H.264中的等级B 预测方式,同时还增加了广义 B (Generalized P and B picture ,GPB )预测方式取代低时延应用场景中的P预测方式。GPB 预测结构“是指对传统P帧采取类似于B帧的双向预测方式进行预测。在这种预测方式下,前向和后向参考列表中的参考图像都必须为当前图像之前的图像,且两者为同一图像。对P帧采取B帧的运动预测方式增加了运动估计的准确度,提高了编码效率,同时也有利于编码流程的统一。
2.4.2 去块滤波(Deblock filter)
去块滤波位于反变换之后,主要是去除视频压缩过程中产生的方块效应。首先对垂直边界进行水平滤波,先亮度块后色度块;再对水平边界进行垂直滤波,先亮度块后色度块。HEVC对8×8块的边界进行滤波,与H.264/AVC中对4×4边的边界进行滤波相比,HEVC中去块滤波算法的时间复杂度有所降低。
2.4.3 采样点自适应偏移(Sample Adaptive Offset,SAO)
把Frame划分为若干LCU, 然后对每个LCU中每个像素进行SAO操作.将根据其LCU像素特征选择一种像素补偿方式,以减少源图像与重构图像之间的失真。自适应样点补偿方式分为带状补偿(Band Offset,BO)和边缘补偿(Edge Offset,EO)两大类。
· 带状补偿
带状补偿将像素值强度等级划分为若干个条带,每个条带内的像素拥有相同的补偿值。进行补偿时根据重构像素点所处的条带,选择相应的带状补偿值进行补偿。
现有的HM模型将像素值强度从0到最大值划分为32个等级。同时这32个等级条带还分为两类,第一类是位于中间的16个条带,剩余的16个条带是第二类。编码时只将其中一类具有较大补偿值的条带偏移信息写入片头;另一类条带信息则不传送。。这样的方式编码将具有较小偏移值的一类条带忽略不计,从而节省了编码比特数
· 边缘补偿
边缘补偿主要用于对图像的轮廓进行补偿。它将当前像素点值与相邻的2个像素值进行对比,用于比较的2个相邻像素可以在下图中所示的4种模板中选择,从而得到该像素点的类型。解码端根据码流中标示的像素点的类型信息进行相应的补偿校正。
2.4.4 自适应环路滤波(Adaptive Loop Filter,ALF)
ALF在编解码环路内,位于Debtock和SAO之后,用于恢复重建图像以达到重建图像与原始图像之间的均方差(MSE)最小。ALF的系数是在帧级计算和传输的,可以整帧应用ALF,也可以对于基于块或基于量化树(quadtree )的部分区域进行ALF,如果是基于部分区域的ALF。还必须传递指示区域信息的附加信息。
对于亮度分量,采用CU为单位的四叉树ALF结构。滤波使用5*5,7*7和9*9三种大小的二维钻石型模板。滤波器计算每个4*4块的Laplacian系数值,并根据该值将所有4*4块分成16类,分别对应16种滤波器。
3种ALF滤波模板
对于色度分量,滤波的选择过程会简单很多。原因如下:首先,色度分量的滤波只需要在图像层级上进行。其次,滤波时色度分量统一使用5*5矩形滤波模板,不需要通过Laplacian系数来选择滤波器类型。
2.5 并行设计
当前芯片架构已经从单核性能逐渐往多核并行方向发展,因此为了适应并行化程度非常高的芯片实现,H.265引入了很多并行运算的优化思路。
2.5.1 Tile
用垂直和水平的边界将图像划分为一些行和列,划分出的矩形区域为一个Tile,每一个Tile包含整数个LCU(Largest Coding Unit).Tile之间可以互相独立,以此实现并行处理。
Tile划分示意图
2.5.2 Entropy slice
熵编码以slice为单位,容易造成负载不均衡。Entropy SIice允许在一个slice内部再切分成多个Entropy SIices。每个Entropy SIice可以独立的编码和解码,从而提高了编解码器的并行处理能力。
Entropy sIice与Slice的关系
一个Entropy sIice不能跨越sIice边界,也就是一个slice不可以含有多个Entropy sIice,但是一个Entropy sIice只能属于一个slice
2.5.3 WPP(Wavefront Parallel Processing)
WPP将一帧视频按照编码树单元行划分为多个子码流,每个线程对其中一行进行编码,由于运动估计和帧内编码的空间依赖性,每下一行必须在上一行前两个编码树单元编码完成后才开始编码,同时当前编码树单元的熵编码上下文会引用上一行前两个编码树单元完成之后的上下文,如图所示。WPP没有破坏各编码单元间的依赖性,仅破坏了熵编码的上下文,因此WPP造成的编码性能下降最小。
即:上一行的第二个LCU处理完毕,即对当前行的第一个LCU的熵编码(CABAC)概率状态参数进行初始化,如图所示。因此,只需要上一行的第二个LCU编解码完毕,即可以开始当前行的编解码,以此提高编解码器的并行处理能力。
WPP示意图
2.6 熵编码(entropy coding)
HEVC的熵编码只采用了基于上下文的二进制熵编码算法(CABAC),在本质上与H.264/AVC的CABAC是一致的,只是在实现细节上有些差别。HEVC减少了上下文的数量,以改进熵编码的性能和编码速度。
2.7 变换量化
HEVC中的变换支持4×4到32×32,比H.264/AVC增加了16×16和32×32两种变换核。在H.264/AVC中,一个宏块只能采用一种变换核,而HEVC提供了残差四叉树(RQT)的递归变换结构,对于一个CU或者PU,可以采用多种变换核。
另外,对于4×4的TU,HEVC提供了transformskip模式,即跳过变换模式,在这种模式中,预测残差只进行移位。对于帧间预测的4×4变换块,HEVC还提供了离散正弦变换(DST)。
在量化方面,HEVC采用了与H.264/AVC相同的量化方法,HEVC还提供了率失真优化量化(RDOQ)方法。率失真优化量化就是在量化过程中引入率失真优化选择的思想,具体可以分为三个步骤。1)对当前处理的TU,以4×4的块为单位进行扫描,对于4×4量化块的每一个量化值,分别加一和减一,这样就得到三个量化值,根据率失真代价最小准则对4×4块的每一个点选择最佳的量化值;2)对于扫描到的每一个4×4量化块,将其量化值设置为零,并与之前的率失真代价比较,选择一种最佳的量化方式;3)对于当前TU来说,若最后一个非零系数的位置距离前一个非零系数的位置较远,则将最后一个非零系数改为零,同时比较这种方式下的率失真代价并与之前的率失真代价进行比较,选择一种最佳的方式。
�
�