视频 码率控制类型和内涵

在做视频编码时,当我们给编码器设定一个目标码率的时候,编码器内部是怎么达到码率要求的呢 ?

编码器如何合理分配码率,以获得更高的视频质量 ?

这都是码率控制的问题。

x264的码率控制分为帧间级和帧内级,本文介绍帧间级各种码率控制类型,其内涵和使用方法。

1 目的和意义:

码率控制有两个目的

  • 兼容传输、播放条件
  • 更高的视频质量

1.1 兼容传输、播放条件

视频编码中,越高的码率通常可以产生更高的质量。同时,保持一定质量的情况下,不同复杂度场景需要的码率是不一样的。

如果不进行码率控制,视频的码率会不可控制。下图是对一段40s的视频,采用固定量化参数(也就是没有码率控制)编码后的瞬时码率分布。

可以看到,码率的波动很大。这对于传输是不利的。码率控制通过调节编码参数,控制单位时间内的编码视频流的数据量,以使产生的比特流符合各种应用的需求。

bitrate, fixed QP

【图1】固定量化参数,码率分布

1.2 更高的视频质量

在满足码率要求的前提下,码率控制的另一个目标是更高的视频质量。

如何通过在帧间以及帧内合理分配比特,实现率失真性能优化,是码率控制研究的问题。

 

2. 分类

码率控制可以分为两类:

  • CBR :  constant bit rate, 固定码率
  • VBR:   variable bit rate, 可变码率

2.2 恒定码率模式

图2是第一节中同样视频用CBR模式编码得到的码率分布图。

可以看到它的码率波动比图1小。

恒定码率不代表每个瞬间的码率都一样,实际上那是不可能的。恒定码率模式究竟是什么原理,我们在下文会详细展开。

constant bitrate

【图2】恒定码率

使用固定码率会损害视频质量,但对传输有好处。

2.3 可变码率模式

可变码率是一类码率控制算法的统称,它们的特点是局部的码率是可变的。 常用的可变码率子类包括:

  • abr : average bit rate, 平均码率。
    局部码率是可变的,限制整个文件的的评价码率。
  • crf: constant refactor, 恒定质量
    把某个恒定的“质量”作为目标,灵活分配码率,最终的码率大小是不确定的。
  • cqp: constant qp: 恒定量化参数
    采用固定的qp, 相当于没有码率控制

3. 恒定码率 CBR 的内涵

恒定码率模式有点tricky,容易导致误解。

  • 它不代表每个瞬间码率相同。这是不可能的,由于I帧,P帧和B帧体积相差巨大。
  • 它也不代表每一秒(或者某个时间窗口)码率相同。实际上,如图2所见,每一秒的数据量是不同的。
  • CBR 的 “固定码率”, 指的是固定 “信道容量”。 码率控制的目标是,在用恒定的速率传输码流,播放器的接收缓存不会上溢,也不会下溢。

3.1 vbv 模型

CBR 码率控制算法是针对缓冲区校验模型的。

区校验模型是视频编码标准的重要组成部分,是用来验证编码码流是否符合标准的重要工具。

在 MPEG系列标准中缓冲区模型常称 VBV ( Video Bu Verifier ) , 即视频缓冲区校验器,在 H.26x系列标准中,该部分称 HRD ( Hypothetical Reference Decoder) ,即假想参考解码器。

vbv 模型假想编码码率通过一个容量受限的信道传输到解码设备,解码设备在解码前有一个缓存。解码器实时从缓存区取数据解码。vbv必须保证缓存区不上溢,也不下溢。

解码器的缓存可以理解成一个水池,如下图所示。水池的输入速度是恒定的,也就是设定的码率。水池的输出的不恒定的,是视频的实际瞬时码率。

vbv model

缓存区的存在使得视频的瞬时码率可以在一定范围内波动。

但是,如果视频实际瞬时码率过大,从缓存区取数据的速度就会大于填数据的速度,这是缓冲区有可能就被取空了,这叫做缓冲区的下溢。

相反,如果视频实际瞬时码率过小,从缓存区取数据的速度就会小于填数据的速度,这是缓冲区有可能就会溢出,这叫做缓冲区的上溢。

不难理解,vbv 能容忍的最大码率波动和缓冲区的大小,以及缓冲区初始充盈程度有关。

3.2 vbv 参数的设置方法

在x264中, vbv 有两个参数可以设置,分别是:

---vbv-maxrate, 设置缓冲区最大填入速度。

---vbv-bufsize , 设置缓冲区大小。

例子:

假设设置maxrate= 1M, bufsize = 2M,  缓冲区初始是充盈的。假设某时峰值率是2M, 那么能容忍的峰值的最大长度为 2M/(2M-1M) = 2s

假设某时峰值率是3M, 那么能容忍的峰值的最大长度为 2M/(3M-1M) = 2s

假设某时峰值率是11M, 那么能容忍的峰值的最大长度为 2M/(11M-1M) =0.1s

也就是说,计算设置最大码率为1M, 也能容忍很高的码率峰值。越高的峰值,能容忍的时长越短。

效果:

bufsize 越大,码率波动空间越大 → 视频质量越好。

bufsize 越大,播放延时越大。 延时 delay = bufsize / maxrate。 (假设需要等缓冲区填满才开始播放)

bufsize设置的大小取决于容忍的延时以及播放器的硬件内存限制。

足够长的时间里,总码率 约等于  maxrate * 时间。  

4. 可变码率 VBR 的类型和内涵

  • abr   平均码率,控制的目标是整个文件的平均码率
    2 pass : 两趟编码,根据第一趟的实际码率,估计每一帧复杂度
    1 pass : 一趟编码, 根据已编码的邻近帧,估计正在编的帧的复杂度
  • crf 
    恒定质量: 控制一个恒定的“质量”,总码率不可控。 
  • cqp
    恒定qp: 恒定量化参数,关闭一切码率控制算法。cqp 和crf 的区别是,crf 允许x264对每一帧,每一宏块灵活选取qp, 通过对视觉感知特点的运用,产生一个恒定的“质量”。

猜你喜欢

转载自blog.csdn.net/soulmate_scut/article/details/82985365