第十章 H.264可伸缩编码SVC
10.1 概述
(1)自适应编码(Adaptive Coding)
根据网络状况,编码器可以使用码率控制技术,改变量化参数或编码帧率来生成所需速率的码流。
(2)转码技术(Transcoding)
根据网络状况和用户端情况,丢弃压缩数据中不会严重影响视频质量的部分,以获得较低码率/分辨率/帧率的视频流。
(3)联播(Simulcast),也就是多码流切换。
(4)多描述编码(Multiple Description Coding)。
(5)可伸缩编码(Scalable Video Coding)。
实质是按照重要性分解视频信息,对分解的各个部分按照其统计特性进行编码。可伸缩编码允许一次压缩后视频能以不同的码率、帧率、空间分辨率和视频质量解码。
10.2 SVC的基本原理
视频编码的可伸缩性包括时域可伸缩性、空域可伸缩性、质量可伸缩性等。时域可伸缩性是指将视频流分解成表示不同帧率的信息;空域可伸缩性是指将视频流分解成表示不同分辨率的信息;质量可伸缩性是指将像素值分解成不同级别。
根据可伸缩编码的压缩编码架构的不同,可以分为基于DCT变换的视频编码和基于小波变换的可伸缩视频编码。
可伸缩编码的基本类型:
(1)传统的可伸缩编码:时域、空域、质量的可伸缩编码。
(2)精细粒度可伸缩性编码
(3)渐进精细粒度可伸缩性编码
10.2.1 传统可伸缩性编码
10.3 H.264的SVC
10.3.1 空域可伸缩性
为了支持空域可伸缩编码,SVC沿用了传统的多层编码方案。每一个空间层对应一个空间分辨率,在每一个空间层,跟非伸缩编码一样,使用帧间预测和帧内预测。此时为了改善编码效率引入层间预测。
1、层间预测
在分层编码的概念下,不同层间的预测算法是改善编码效率的关键。层间预测算法的设计原则是尽量多地利用基础层的信息来改善增强层的率失真性能。层间预测机制只能在访问单元(Access Unit)内部进行,且被预测的帧,其空间层级应该高于参考帧。
(1)层间运动预测
增强层待编码宏块的分割模式、运动矢量和参考帧序号都将直接继承其对应的基本层宏块的值或尺度伸缩之后的值,所以实际上只需要传递残差信息,从而节省了编码比特数。
(2)层间残差预测
层间残差预测可以用到所有的帧间预测编码的宏块,相应的8x8的基础层子宏块的残差信号,在经过双线性滤波器上采样后,可以用来作为增强层宏块的预测残差信号。
(3)层间帧内预测
当一个增强层采用BlSkip预测编码模式时,其对应的基本层的8x8子宏块采用帧内编码模式时,就必须采用层间帧内预测模式。
2、空间可伸缩扩展
H.264支持任意分辨率的空间可伸缩编码。唯一的限制是水平和垂直的分辨率从基本层到增强层不能减小。
10.3.2 时域可伸缩性
运动补偿时域滤波器技术(MCTF,Motion Compensated Temporal Filter)在SVC标准初期被认为是一种有效的提供时间可分级功能的工具。但MCTF的开环结构在实际应用中很容易造成编解码两端的匹配错误,跟新算子也大大增加了算法和内存的开销。随着层次B帧预测技术的提出,大多数情况下性能要超出MCTF,JVT最终确定采用B帧哥预测技术作为实现时域可伸缩的标准方式。
在分层预测结构下,可以使用一下几点来改善编码效率。
(1)多分级量化
在分层预测结构的编码过程中,一个重要的问题是如何针对不同的时间层来选择量化参数。基本层必须有最高的保真度,它是其他层级图像运动补偿的参考。为了降低计算复杂度,可充分利用不同层次视频码流之间的相关性,假设基本层的量化参数是QP0,对于时间层级为K>0的增强层量化参数可以选择为QPk=QP0+3+k;
(2)时间直接模式
对于层次B帧预测通常使用时间直接模式。
(3)运动搜索
JM模型指出双预测块的运动向量是由两个参考列表的独立运动搜索决定的。
10.3.3 质量可伸缩性
质量可伸缩是空间可伸缩的一个特例,此时基本层和增强层的空间尺寸时相同的。
因此可以使用一种显而易见的方案来实现质量分级,这就是粗粒度质量可伸缩编码(CGS)。为了增加比特流码率自适应的灵活性,增加可支持的码率点个数,SVC的设计中包括了精细粒度质量可伸缩编码的技术(FGS)。但由于FGS实现复杂度过高,JVT提出了一种替代方案:中等粒度质量可伸缩方案(MGS)。
1、漂移控制
编码端和解码端必须是的运动补偿预测操作所需的参考图像信息一致,否则解码端的重建图像与编码端的图像就会出现差异,这就是漂移。
2、渐进精细片
质量可伸缩性通过反复的降低量化步长,从最小质量层开始通过逐步增加图像细节,这称为渐进精细(Progressive Refinement)。
3、比特流提取
比特流提取的主要任务是对编码码流进行分析,并根据解码端用户的需求对原始码流进行切割。
10.3.4 H.264的扩展
1、NAL扩展
新的结构在原NALU的头部增加了3个字节专门用于表示可伸缩级。
2、Slice扩展
H.264SVC标准扩展了几种Slice类型。