近期因为要准备暑期实习以及后期的秋招环节,再一次温习了《新一代高效视频编码H.265/HEVC原理、标准与实现》经典书籍,现在记录下有关阅读心得以及可能面试的问题(所有的答案都是我自己思考的或者网络/书上摘抄的,因为本人水平有限,如果有错误或者需要补充可以私聊我)。
第一章. 绪论
1. 视频编码标准如AVC HEVC VVC AVS AVS2 AVS3到底在规定什么?
- 规定编码码流的语法语义和解码器,只要求视频编码后的码流符合标准规定的语法结构,解码器就可以根据码流的语法语义进行正常解码。
- 编码器输出的码流每个bit都属于某语法元素,可以根据标准进行解释。
- 编码器选择什么编码模式/参数,不做规定,只要生成的码流可以解码即可。所以给编码器很大的自由度,标准规定解码过程。
2. 常见的编码标准(看过类似笔试的选择题)
- VCD: MPEG-1
- DVD: MPEG-2 / H.262
- H.264/AVC是MPEG-4的第10部分。MPEG-4支持面对对象编码。
3. HEVC编码框架(之前面试有要求当场画出)
与H.264相比没有革命性改变,仍然是基于混合编码框架,包括预测、变换、量化、熵编码、环路滤波等模块。
3. 视频编码利用和去除的哪些冗余?
- 空间相关性 (intra prediction, ibc)
- 时间相关性 (inter prediction)
- 频域相关性 (变换,量化)。其中,变换将图像从时域信号变换至频域,能量集中在低频。量化可以减少编码的动态范围。
- 视觉冗余 (人眼对亮度比色度敏感 4:2:0,对高频不敏感 量化)
4. HEVC/H.265 相比AVC/H.264的新技术/变化?
这个问题可以根据编码框架按照编码流程回答区别和新技术:编码单元与划分===> 预测(intra/inter) ===> 变换 ===> 量化 ===> 熵编码 ===> 环路滤波(去块滤波/SAO)。
① 编码单元与划分
不同于AVC采取宏块(1个16 * 16大小的亮度块和2个8 * 8大小的色度块)为基本的编码单元,HEVC新引入了编码树单元CTU的概念。对于CTU,可以采取四叉树划分,将CTU划分为若干个大小不一(8 * 8 ~ 64 * 64)的CU。HEVC定义了一套新的分割模式,包括CU、PU和TU,下面会有具体的问题分析区别与联系。
② 预测
-
帧内预测
HEVC帧内预测模式IPM从最多9种(4 * 4: DC+8角度 = 9, 16 * 16: DC+Plane+Hor+Ver = 4)变为35种(DC+Planar+33角度 = 35)。 -
帧间预测
HEVC引入了新的帧间预测技术,包括Merge、AMVP和基于Merge的Skip模式。
其中,AMVP技术产生的MV既可以作为ME的搜索起点,也可以作为MVP使用。
亚像素插值算法改进,从AVC的6抽头滤波器(半像素精度)和两点内插(1/4像素精度)变为基于DCT的8抽头和7抽头滤波器。
③ 变换
- HEVC引入了RQT(Residual Quad-tree Transform)技术。基于四叉树结构,根据CU的残差特性,自适应选择变换块大小。
- AVC中仅支持4 * 4和8 * 8大小的DCT,而HEVC支持的DCT最大尺寸为32 * 32。大尺寸的变换单元可以在处理高分辨率的平坦区域时提高压缩率。
- 除了支持DCT,HEVC还支持对于4 * 4的intra块使用4 * 4DST。
- HEVC引入了ACS(Adaptive Coefficient Scanning)技术。基于4 * 4的块,将TU划分为多个4 * 4块单元,分为对角、水平、垂直扫描。其中,inter块只使用对角扫描,4 * 4和8 * 8大小的intra块,IPM接近水平就垂直扫描,接近垂直就水平扫描,其他对角扫描。
④ 量化
HEVC引入了量化组QG的概念。一个QG可以包括多个CU,也可能存在1个CU包含多个QG的情形。
⑤ 熵编码
AVC中采取了CAVLC+CABAC(大于baseline),HEVC中采取并行的CABAC为主。
⑥ 环路滤波
-
去块滤波
HEVC的去块滤波先处理垂直边界再处理水平边界,并非AVC中的垂直和水平穿插进行,所以CTB的解码顺序更加灵活。 -
SAO
新增了SAO滤波技术来解决振铃效应。其他博文将会分析。
⑦ 其他
多了VPS参数集,用于描述时域各层的依赖关系,传输视频分级信息,兼容可分级视频编码、多视点视频编码的扩展。
第二章. 数字视频格式
1. YUV视频三分量的含义
Y是明亮度,即灰阶值。
U是RGB输入信号蓝色部分与亮度值的差异。
V是RGB输入信号红色部分与亮度值的差异。
2. 常见的色度亚采样
- 4:4:4格式,色度和亮度分量有相同的空间分辨率。
- 4:2:2格式,色度和亮度分量有相同的垂直分辨率,但是色度是亮度分量水平分辨率的1/2。
- 4:1:1格式,色度和亮度分量有相同的垂直分辨率,但是色度是亮度分量水平分辨率的1/4。
- 4:2:0格式,色度是亮度分量垂直分辨率的1/2,色度是亮度分量水平分辨率的1/2。
第三章. 编码结构
1. 编码的分层处理架构
GOP ===> Slice ===> SS ===> CTU ===> CU
① GOP图像组
HEVC中,GOP分为封闭式GOP和开放式GOP。其中,和AVC一样,IDR帧引领封闭GOP。IDR会导致DPB(Decoded Picture Buffer 参考帧列表)清空,所以对于IDR帧来说,在IDR帧之后同GOP内的所有帧都不能引用任何IDR帧之前的帧的内容。
此外,CRA是HEVC新增的类型,引领开放GOP。不同于IDR,CRA后的帧可以跨过CRA参考前一个GOP的帧,独立性较差,但是某种程度上可以提高编码效率(参考帧数量和选择增多)。
② Slice
Slice之间相互独立编解码,不能跨Slice边界进行帧内帧间预测,在熵编码前需要初始化,所以Slice的引入可以防止错误扩散,可方便在数据丢失时重新同步。注:由于Slice之间相互独立,所以也可以用来做基于Slice的并行编解码设计,但是并行编解码的效率不及Tile,原因在于Slice的形状为条带状,横向跨度高,数据的相关性不如矩形形状的Tile。
③ SS (Slice Segment)
SS中包含整数个(≥1)完整的按序排列的CTU,一个Slice可以划为一个独立SS和若干个依赖SS,以独立SS作为Slice的开始。而且,HEVC中每个VCLU包含一个SS的压缩数据,所以SS是VCL的压缩数据输出单位,SS可以作为一个分组传送视频编码数据。
④ CTU
编码树单元,HEVC新引入的编码结构,类似于AVC中的宏块,对CTU进行四叉树划分可以生成不同类型的CU。
2. 视频参数集
- 参数集是独立的数据单位,包含视频的不同层级编码单元的共享信息。
- 参数集在NAL被作为non-VCLU进行传输,对关键数据有高鲁棒性机制。
- VPS是HEVC中新增的视频参数集,包括了多个子层共享的语法元素,其他不属于SPS的特定信息。VPS的引入可以兼容标准在其他应用上的扩展,比如可分级视频编码、多视点视频编码。SPS可以引用VPS的信息。
- SPS包含了一个CVS(一个GOP生成的压缩数据)中所有图像的共享解码相关信息,比如档次级别、分辨率、某tool的开关标识及参数、时域可分级信息。PPS可以引用SPS的信息。
- PPS包含了一幅图像的共享参数,一幅图像所有SS(HEVC中每个VCLU包含一个SS的压缩数据,所以SS是VCL的压缩数据输出单位)引用同一个PPS。包含初始图象控制信息,比如QP、分块信息等。
3. 设置VPS的目的 - AVC中没有VPS来叙述时域各层的依赖关系,所以AVC-SVC中,必须在SEI中提供各层相关信息。但是在多播、广播场景,SEI的部分信息会重复在SPS中,会造成参数重传而导致延迟。所以,HEVC中新增了VPS克服这个问题。
- VPS的引入可以兼容标准在其他应用上的扩展,比如可分级视频编码、多视点视频编码。SPS可以引用VPS的信息。
4. 简述CU、PU、TU
① 概述
- CU是预测、变换、量化、熵编码等处理的基本单元。
- PU是帧内、帧间预测的基本单元
- TU是变换、量化的基本单元。
- 三部分单元的分离使得预测、变换和编码各个处理环节更加来灵活,划分更符合纹理特性,保证编码性能最优化。
② CU,编码单元
-
AVC中宏块的最大尺寸是16 * 16。而针对大尺寸图像,平缓区域面积更大,所以更大的块可以显著提高编码效率。HEVC新引入了CTU,CTU进行四叉划分可以分割为若干个尺寸不一的CU,CU的大小可以支持 8 * 8 ~ 64 * 64,更加灵活。
-
CU通过Split_flag(1,四叉树划分; 0,不划分)可以标识是否往下划分。
③ PU,预测单元 -
编码单元的所有预测模式,一切与预测有关的信息都定义在PU中,如IPM、PU的分割方式、MVP_index、MV等等。
-
CU可以进一步进行划分为若干个PU(intra: 2, inter: 8)。具体在标准中,在coding_unit()中,根据CuPredMode(intra/inter)和 PartMode(2N2N,NN,……)进行划分的标识。
④ TU,变换单元 -
TU是完成变换和量化的基本单元,尺寸支持4 * 4 ~ 32 * 32的变换编码。
-
HEVC引入了RQT(Residual Quad-tree Transform)技术。基于四叉树结构,根据CU的残差特性,自适应选择变换块大小。
-
AVC中仅支持 4 * 4 和 8 * 8 大小的DCT,而HEVC支持的DCT最大尺寸为 32 * 32。大尺寸的变换单元可以在处理高分辨率的平坦区域时提高压缩率。
-
除了支持DCT,HEVC还支持对于4 * 4的intra块使用4 * 4DST。
-
HEVC引入了ACS(Adaptive Coefficient Scanning)技术。基于4 * 4的块,将TU划分为多个4 * 4块单元,分为对角、水平、垂直扫描。其中,inter块只使用对角扫描,4 * 4和8 * 8大小的intra块,IPM接近水平就垂直扫描,接近垂直就水平扫描,其他对角扫描。
5. 档次、层和级别
- 档次Profile规定可以使用什么编码工具和算法。
- 级别Level根据解码端的负载和存储空间的情况对关键参数进行限制,如最大采样率、最大图像尺寸、分辨率、CPB大小等等。
- 层Tier是把Level分为Main Tier和High Tier。主层用于大多数应用,高层用于严苛应用。