开始看h264的码率控制,很多地方都提到 G012,拿来做为参考比较,看来很有必要研究清楚。
偶这人,E文文档不翻译的话,看过就忘了,于是草草翻译了下,因为不打算做B帧,也不准备在同一帧中使用不同的MB,这些地方就跳过了。
Title: |
Adaptive Basic Unit Layer Rate Control for JVT |
编码器使用码率控制来控制编码码流变化的bit rate特性,以追求给定目标bit rate下的高质量解码。码率控制因此成为了编码器的必要部分,并在标准中被广泛的研究,比如MPEG2,MPEG4,H.263等等。因此,他也被JVT充分的研究。JVT的码率控制与其他的标准相比更加困难。这是因为量化参数被同时应用到码率控制算法(rate control algorithm)和码率失真最优化(rate distortion optimization RDO)中,这样在进行码率控制研究的时候导致了蛋鸡悖论:要对当前帧的宏块进行RDO,需要用当前帧或者宏块的MAD决定每个宏块的QP值。然而,当前帧或宏块的MAD只有在RDO之后才能算出。此外,可用的编码信道带宽也可能是固定的或是随时间变化的。因此我们需要同时考虑固定bit rate(CBR)和可变bit rate(VBR)。然而现存的方案集中与CBR。
JVT通过引入基本单元的概念和线性模型,提出了一种自适应基本单元层的码率控制算法。这个基本单元可以是帧,条带,或者宏块MB,线性模型通过前一帧的相关位置的基本单元来预测当前帧当前基本单元的MAD。蛋鸡悖论解决如下:当前帧的目标码率采用漏桶(leaky bucket)模型和线性跟踪理论根据预先定义的帧率,当前缓冲区占有率,目标缓冲区级别和可用的信道带宽计算。因为未编码的基本单元MAD未知,所以剩余的bit平均分配到未编码的当前帧基本单元中。当前基本单元的MAD靠线性模型使用前一帧相关位置的基本单元的MAD来预测。二次率失真模型(RD)用于计算相应的QP,这个值用与当前基本单元中每个宏块的最小率失真(rate distortion optimization)我们同时也关注VBR。我们设计了虚拟缓冲区来根据信道带宽的动态变化而调整编码程序。该缓冲区是不能向上或者向下溢出的。因为该模型和漏桶模型基本一致,我们的码率控制因此符合理想参考解码器(hypothetical reference decoder)
我们测试VBR和CBR来验证我们的设计。VBR比特率曲线是一条预定义的曲线。他表明实际生成的比特数保持接近比特率曲线并且缓冲并没有溢出。CBR中,我们的码率控制方案的编码效率与使用固定QP值的比较。编码的计算率由我们的码率控制方案指定。我们方案的编码效率提高了1.02dB,所有测试序列的平均PSNR提高了0.32dB。我们也同使用AHM2.0软件AHG推荐的F086进行比较。PSNR提高了1.73dB,最高损失0.25dB,必须提及的是我们的方案是one pass而F086是two pass(two pass:采用2次编码,每一帧的第一次编码用来产生第2次编码所需要的编码策略)
在这一章中,我们提出关于H.264码率控制的相关问题。
2.1 The Chicken and Egg Dilemma
涉及码率控制的MB编码过程如下
因为QP由码率控制和RDO指定,这里就有个问题,当进行码率控制时:为MB做RDO,MB的QP应该首先使用MB的MAD决定。然而,当前MB的MAD只有在做了RDO之后才能得到。这是一个典型的蛋鸡悖论。因此,H.264的码率控制要比MPEG2,MPEG4,H.263的更加困难。学习H.264的码率控制,我们必须解决这个问题去建立当前MB的MAD。除此之外,我们也应该计算当前MB的目标码率和决定共享相同QP的连续MB数量。为了解决这些问题,我们需要下列的预备知识。
2.2 Definition of A Basic Unit
基本单元的概念定义。
定义1:假设一帧由 MB组成,基本单元定义为一组由 MB组成的连续MB,其中 属于
在一帧中基本单元的总数 如下
(1)
假设一个基本单元可以为MB,条带,场,帧。例如,一个QCIF大小的视频序列 = 99. 根据定义1, 可以为 1, 3, 9, 11, 33, or 99. 相应的 分别为 99, 33, 11, 9, 3, and 1,
这表明使用一个较大的基本单元,可以实现较高的PSNR值同时码率波动也就更大。换句话说,使用较小基本单元,码率波动会显著变小,但是会轻微损失PSNR
2.3 A Fluid Flow Traffic Model
我们现在提出一种流体流动通信模型(fluid flow traffic model)来计算当前编码帧的目标bit。 标识一组图片(GOP)的总帧数。 表示在ithGOP中的jth帧, 表示编码jth帧后虚拟缓存的占有率。那么我们得到
(2)
其中A( )是ithGOP中jth帧生成的比特数。u( )是可用信道带宽,可以使VBR,也可以是CBR, 是预定义的帧率, 是缓存大小,其最大值由不同的level和profile决定。
注意初始缓冲区的值设置为 ,这个是可以设置为其他的值的,通常,初始缓冲区值可以设置为一个小的值如果比特波动很小的话。
这个模型和漏桶模型[7]类似,令 ,在我们的设计中,我们保证码流包含在上述的虚拟缓存中,因此,当码流以参数 and 输入到HRD,中,HRD缓存是不会向上或者向下溢出的,换句话说,我们的码率控制方案是符合HRD的。
2.4 A Linear Model for MAD Prediction
现在引入线性模型在当前帧中预测当前基本单元的MAD。
这个同样是依赖于前一帧中相关位置的基本单元。假设当前帧中当前基本单元的预测MAD和前一帧相关位置基本单元的实际MAD分别表示为为 和 ,线性预测模型由下式给出
(3)
其中 和 为预测模型的2个相关系数。 和 的初始值分别设置为1和0,他们在每个基本单元被编码后更新。线性模型被用来解决蛋鸡悖论。
使用基本单元的概念和模型(2)模型(3),我们方案的步骤如下:
1. 使用fluid traffic模型(2)和线性跟踪理论[5]计算当前帧的目标bit
2. 把剩余的bit平均分配给给当前帧的未编码基本单元。
3. 使用前一帧相关位置的基本单元的实际MAD通过线性模型(3)来预测当前帧基本单元的MAD。
4. 使用二次RD模型计算相应的参数
5. 使用来自step4的QP计算当前基本单元每个MB的RDO
如果基本单元选择为帧,那么我们的码率控制方案由2层组成:GOP层和帧层。否则,应该加上基本单元层码率控制。他们会在下面详细说明。
以上内容为转载,个人接着翻译以后的章节,属于原创了吧。