视频 码率控制类型和内涵
在做视频编码时,当我们给编码器设定一个目标码率的时候,编码器内部是怎么达到码率要求的呢 ?
编码器如何合理分配码率,以获得更高的视频质量 ?
这都是码率控制的问题。
x264的码率控制分为帧间级和帧内级,本文介绍帧间级各种码率控制类型,其内涵和使用方法。
1 目的和意义:
码率控制有两个目的
- 兼容传输、播放条件
- 更高的视频质量
1.1 兼容传输、播放条件
视频编码中,越高的码率通常可以产生更高的质量。同时,保持一定质量的情况下,不同复杂度场景需要的码率是不一样的。
如果不进行码率控制,视频的码率会不可控制。下图是对一段40s的视频,采用固定量化参数(也就是没有码率控制)编码后的瞬时码率分布。
可以看到,码率的波动很大。这对于传输是不利的。码率控制通过调节编码参数,控制单位时间内的编码视频流的数据量,以使产生的比特流符合各种应用的需求。
【图1】固定量化参数,码率分布
1.2 更高的视频质量
在满足码率要求的前提下,码率控制的另一个目标是更高的视频质量。
如何通过在帧间以及帧内合理分配比特,实现率失真性能优化,是码率控制研究的问题。
2. 分类
码率控制可以分为两类:
- CBR : constant bit rate, 固定码率
- VBR: variable bit rate, 可变码率
2.2 恒定码率模式
图2是第一节中同样视频用CBR模式编码得到的码率分布图。
可以看到它的码率波动比图1小。
恒定码率不代表每个瞬间的码率都一样,实际上那是不可能的。恒定码率模式究竟是什么原理,我们在下文会详细展开。
【图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 能容忍的最大码率波动和缓冲区的大小,以及缓冲区初始充盈程度有关。
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, 通过对视觉感知特点的运用,产生一个恒定的“质量”。