编码器介绍 - 图文

发布时间 : 星期一 文章编码器介绍 - 图文更新完毕开始阅读

视频编码器介绍

所谓视频序列是由一幅幅图像构成的时间序列。视频压缩的目的就是去除数字视频中的各种冗余,以节省传输和存储开销。一般而言,冗余类型包括空域冗余、时域冗余和熵冗余。

HEVC(High Efficiency Video Coding)是由ISO和ITU-T联合提出的一种新一代视频编码标准,又称为H.265,于2013年1月发布了标准草案终版。相比于H.264/AVC,在相同编码质量下,HEVC大约可以节省30%-45%的码流。下面分别从技术比较和代码实现两方面对HEVC与H.264/AVC编码器展开说明。

位率控制视频序列+-变换量化反变换反量化熵编码码流+帧内预测运动补偿运动估计去块滤波自适应采样偏移

图1 编码器框架

HEVC与H.264/AVC都采用了混合编码框架,只是在H.264/AVC的基础上,HEVC增加了采样点自适应偏移模块。HEVC的编码结构框架如图1所示,实线部分为标准编码器中的数据流,虚线部分为位率控制的信息。

图2 编码树单元的划分

1 数据结构 帧:在数字视频中,每一幅图像称为一帧(Frame)。在HEVC和H.264/AVC中,常用的帧类型包括I帧、P帧、B帧。I帧为帧内编码帧,编码时只利

用当前帧的信息去除图像的空域冗余;P帧为帧间编码帧,编码时除了去除空域冗余,还利用前向预测去除时域冗余;B帧为帧间编码帧,除了空域冗余,编码时还利用双向预测去除时域冗余。

宏块、编码树单元、编码单元:在H.264中,一幅图像被划分为多个宏块(Macroblock),宏块的大小为16x16,是编码的基本单元。在HEVC中,一幅图像被划分为多个编码树单元(Coding Tree Unit, CTU),如图2中的黑框划分。编码单元(Coding Unit, CU)是CTU的叶子节点,是HEVC中的基本编码单元。它支持的大小范围从8x8到64x64。从CTU开始,CU可以递归地划分为四个相同大小的块,一直到8x8。因此CU概念是一个递归的四叉树结构,如图3所示。

图3 CU结构示例

在H.264中,预测块的大小可以为16x16、8x8、4x4、8x16、16x8。HEVC提出了预测单元(prediction unit, PU)的概念, PU是预测的基本单元。为了使预测单元与真实的物体边界相一致,PU的形状可以是四方的,也可以是长方形的,相比于H.264/AVC,HEVC增加了非对称分割模式。PU的分割模式有八种,如图4所示。在帧间预测模式下,这八种模式都支持,而在帧内预测模式下,只支持2Nx2N和NxN模式。

PART_2Nx2NPART_2NxNPART_Nx2NPART_NxNPART_2NxnUPART_2NxnDPART_nLx2NPART_nRx2N

图4 PU结构的八种形式

H.264提供了两种变换核4x4和8x8,在实际应用中通常只使用4x4的

变换核。HEVC提出了变换单元(Transform Unit, TU)的概念, TU是变换和量化的基本单元。HEVC提供了RQT(residual quad-tree)编码,变换核可以从4x4到32x32。对于帧内编码,TU在PU的基础上可以进一步的递归划分,对于帧间编码,TU在CU的基础上可以进一步的递归划分。

除以上基本结构外,H.264还提供了片(Slice)的概念,一帧可以划分为多个Slice,一个Slice可以包含多个宏块,各片间的编码互相独立。同样,HEVC也提供了Slice的概念,与H.264类似。另外,为了实现编码器的并行工作,HEVC引入了Tile结构和WPP(wavefront parallel processing)结构。

用垂直和水平边界将图像划分为一些行和列,划分出的矩形区域称为一个Tile,每个Tile包含整数个编码树单元,Tile之间互相独立,如图5所示。Tile改变了原来编码树单元的扫描顺序,从而使得在帧间编码时减少因运动估计所需要的缓存空间。但是也存在很大缺陷,阻断了编码之间的依赖性,导致编码性能下降较大。Tile与Slice的主要区别在于,Tile不像Slice在码流中包含sliceheader;Tile的划分是矩形形状,而Slice的划分比较灵活。

159462610473711484812132129142230152331162432172533182634192735202836374043384144394245 图5 Tile划分示意图

WPP将一帧视频按照编码树单元行划分为多个子码流,每个线程对其中一行进行编码,由于运动估计和帧内编码的空间依赖性,每下一行必须在上一行前两个编码树单元编码完成后才开始编码,同时当前编码树单元的熵编码上下文会引用上一行前两个编码树单元完成之后的上下文,如图6所示。WPP没有破坏各编码单元间的依赖性,仅破坏了熵编码的上下文,因此WPP造成的编码性能下降最小。

core1core2core3core4core5core1core2core3core4 图6 基于WPP的并行方案示意图

2 帧内预测

对于一个CTU来说,只有最小的CU即最深层次的CU才支持2Nx2N和NxN两种PU划分模式,其余CU只支持2Nx2N的PU划分模式。

对于每一个PU来说,与H.264/AVC中的帧内预测相比,HEVC将预测方向更加精细化,支持到35种方向,包括34种角度预测和planar预测,如图6所示。

对于每一个PU的亮度分量,帧内预测分为两个过程:粗选过程和率失真优化选择过程。粗糙的模式选择过程中,对所有的预测模式都做一遍预测,选择出代价较小的几种预测模式;在率失真优化的模式选择过程中,对前一过程选择的几种代价较小的预测模式,计算精确的率失真代价,即对预测残差进行变换、量化、熵编码、反量化、反变换等过程,计算出实际的失真和比特数量,从中选择一种率失真代价最小的预测模式,作为当前PU的最佳预测模式。

所不同的是,在H.264/AVC中,对一个块进行帧内预测时需要首先检测相邻块是否可用,如果某个相邻块不可用,与其相关的预测模式就不可用。而HEVC标准使用了一致的帧内预测方法,不管相邻块是否可用,所有的预测模式都会使用。若相邻块不可用,则利用最近相邻可用的像素延拓生成。

角度预测与H.264/AVC中的方向预测一致,只是将原有的预测角度更加细化。但是计算复杂度却增加了很多,这是由于大部分角度预测的像素点是有相邻的参考像素点根据不同角度插值出来的,同时对于每一个预测点,插值的角度都不同。平面预测是一种新提出的预测方法,常用于内容平滑或纹理不清晰的单元。它为预测单元中的每一个像素点也都要进行插值预测,如图7所示。首先根据左侧相邻单元的右下角像素和上方相邻单元的下边界像素插值出当前预测单元下边界的每个像素点,再根据上方相邻单元的右下角像素和左侧相邻单元的右边界像素插值出当前预测单元右边界的每个像素点,然后利用上方相邻单元的下边

联系合同范文客服:xxxxx#qq.com(#替换为@)