本次将介绍视频编码中的码率控制技术。码率控制技术是实际视频编码器中一个非常重要的技术模块,用于保证码率的顺利传输和信道带宽的充分利用,并且在满足各项带宽要求的前提下同时尽可能优化编码性能。
首先介绍码率控制的目标和类型,然后介绍码率控制中的基本理论,如缓冲器、率失真模型和分层码率控制技术,之后介绍了非常经典的R-Q模型和R-λ模型,最后介绍了目前码率控制的研究和发展方向。
在实际的视频编码中,序列的时间、空间冗余都是随机的,且熵编码也是变长编码,所以编码器输出的码率肯定是波动的。下图是某序列(IPPPP结构)的编码比特数,由于帧类型(I帧和P帧)以及场景复杂度的不同,产生的码率也是波动的。实际的通信信道并不能处理无限制的码率,所以才需要引入码率控制,来保证码率的顺利传输和信道带宽的充分利用。
码率控制类型可分为CBR和VBR,VBR又可以进一步分为ABR、CRF和CQP等。CBR指的是恒定的信道传输码率,CBR还是允许每帧的实际编码码率有一定范围的上下浮动,通常假定视频解码器端有一定大小的输入码流缓冲器(buffer),缓冲器的概念会在之后详细介绍。
VBR假定信道传输有一个最大码率,传输码率可以等于或低于这个最大码率甚至是0,但不能超过这个最大码率。
VBR又可以分为好几类,但也有很多时候把这些概念看成是并列关系。ABR 的码率要求是某一段连续的视频帧块的平均码率为一个目标码率,相当于CBR和VBR的折衷。CRF是实际中常用的一种恒定编码质量的视频编码模式,设定一个特定的目标编码质量,使得整体视频的编码效率最大化。CQP就是简单地固定量化参数,相当于没有做码率控制。
缓冲器模型在工业界称为VBV (Virtual Buffer Verifier,视频缓冲区校验器),在MPEG 系列的标准里叫做HRD (Hypothetical Reference Decoder,假想参考解码器)。
CBR和VBR HRD 由码率、缓冲器大小,和初始移除延时三个参数定义。如左图所示,横坐标是时间,纵坐标是缓冲区的占用量。tr(0)、tr(1)等点是视频播放间隔的时间间隔点,两个相邻点的时间是1/帧率,斜率则代表码率。时间点0到tr(0)之间即初始移除延时,Linit是初始缓冲器水平,经过一定的时间就会取出某一帧对应的码流,缓冲区的占用率会下降。缓冲延时的大小跟实际的应用场景要求密切相关,在实际中可以根据具体的业务需求来选择是否需要HRD。
下面介绍常见的线性模型和二次模型,这里的编码单位可以是帧、片、宏块。
线性模型和二次模型来自于对数RD率失真模型,对其进行泰勒展开后取一次项和取二次项,然后根据DQ模型是线性关系的结论来推出R-Q模型。同时在R-Q模型中引入复杂度(通常使用MAD),复杂度的引入是考虑到人眼的遮蔽效应,比如纹理复杂的区域、运动很快的区域,这时候即使量化参数QP大一点,人眼也不太能分辨出来质量损失。
分段模型中,前者用于高码率情况,后者用于低码率情况。
首先,视频编解码的应用范围实际上是非常广泛的。只要是涉及到视频的传输和存储,都会需要视频压缩的过程。
JVT-G012使用了流体传输模型,其中Bc(n_i,j)表示在编码第i个GOP第j帧后虚拟缓冲区的占用量,A(n_i,j)代表第i个GOP第j帧在编码后生成的比特数,Fr为预设的帧率,u(n_i,j)为信道带宽。
JVT-G012采用线性模型来预测MAD的值的方法解决了“蛋鸡悖论”。什么叫“蛋鸡悖论”呢?如右图所示。H.264的模式选择需要用率失真优化,率失真优化需要确定QP值,而QP值是码控确定的,码控又需要MAD作为输入,MAD又是模式选择确定好模式后才能算出来。JVT-G012中当前基本单元的MAD值通过前一帧相同位置基本单元的MAD值来预测得到,a1和a2是预测模型的参数,其值在编码完成之后进行更新。
在R-Q模型中,采用分层的码率控制技术。
GOP层码率控制中,剩余比特数的计算主要是根据缓冲区的占用量,以及信道带宽和帧率决定的,参考缓冲区漏桶模型。首个GOP的起始量化参数就是整个序列的初始量化参数,首个GOP的I帧和第一个P帧都采用它作为量化参数。其它GOP的起始量化参数则为上一个GOP中所有P帧量化参数的平均值,并根据GOP长度做进一步的调整。
帧层码率控制分预编码和后编码两个阶段。预编码阶段需分开讨论B帧和P帧量化参数的计算。B帧一般不用于其它帧的参考,所以B帧的量化参数可以比邻近的P帧或I帧设定的大一定,从而节省比特数给I帧或P帧使用。B帧的量化参数可通过线性插值方法来计算,但是为了保证图像质量的平滑性,插值结果需要满足相邻帧之间的量化参数的差异不超过2的要求。P帧的比特分配过程比较复杂,主要是考虑了缓冲区占有量以及已编码帧(P帧和B帧)的权重,P帧的计算量化参数部分需要先预测当前帧的MAD值,然后通过R-Q模型计算得到对应的量化参数。
基本单元层的码率控制主要是针对P帧进行的,而I帧和B帧仍然使用帧层的量化参数。与帧层码率控制类似,预编码阶段完成比特分配和计算量化参数,不过还考虑了头比特数(根据已编码基本单元的头比特数预测当前基本单元的头比特数),比特分配更加精细。基本单元层的量化参数的计算是先预测当前帧的MAD值,然后通过R-Q模型计算得到对应的量化参数。
R-λ模型可由R-D幂函数模型推导而来,通过率失真理论,对R求导之后得到λ和R的关系。并且为了将图像本身的特点和码率控制联系起来,提案建议用bpp表示R,bpp和R的关系中的f为视频源的帧率,w和h分别为图像的宽和高。
JCTVC-K0103提案中的比特分配过程与JVT-G012相似,都分为三级,分别是GOP级比特分配,帧级比特分配和基本单元(CU)级比特分配。R-λ模型的码率控制需要考虑两个问题:给定什么样的目标码率和怎么样获得准确的参数α和β。
此提案在GOP比特分配中使用了平滑窗口法,SW为平滑窗口系数,目的是平滑比特波动,一般取值为40,较小的SW容易导致GOP之间较大的比特波动。
帧级与LCU级码率分配当中,则引入权重ω的概念,每一帧和每一LCU依照自身权重与未编码内容的总权重之比在剩余的比特数中分配比特。帧级别码控中的权重是根据GOP中的帧结构预定义的,可以通过查表得到。CU级别码控根据前一帧对应的CU的MAD值作为权重。
参数更新规则如下所示,下标old和new分别表示更新前后,编码后实际的bpp_real和由此计算的λ_comp在更新规则中起了关键作用。Skip情况即当码率很低时,模型的准确度很低,直接采用特殊更新策略。
论文《Recent Advances in Rate Control: From Optimization to Implementation and Beyond》中总结了码率控制领域中很多重要的论文,该综述论文中不同的码控模型相关论文的发表年份和对应标准的数量统计如下表所示。
该综述论文中总结了码率控制未来可能的发展方向。第一点是利用机器学习和深度学习实现RC。码控实际上就是根据目标码率、缓冲区的信息以及视频信息和已编码信息来决定比特分配和比特控制,神经网络比较适合解决这类分析决策类任务,并且神经网络中有像增强学习这种self-updating的机制。第二点是quality control,在网络带宽限制不高时,且对高质量视频传输要求很高,需要尽可能保持质量稳定,使用可变码率。第三点是研究视频质量评估方法和码率关系提出更优的RC方法。第四点是对AR、VR以及多视点视频等视频来源的RC。第五点使用RC压缩点云信息,在基于点云的视频压缩算法中,需要合理的R-D模型来解决点云的稀疏性,不规则性和旋转不变性。
 关 注 我 们 
实验室网站:http://viplab.fudan.edu.cn/
OpenASIC官方网站:www.openasic.org
知乎专栏:http://zhuanlan.zhihu.com/viplab
微信公众号:OpenASIC
继续阅读
阅读原文