why rate control
Rate control is a crucial step in determining that tradeoff between size and quality.
Rate Control Modes
CQP(Constant QP)
恒定QP,所有编码图像区域,编码帧,编码片段都用相同的QP
- 画质不恒定
- 人类视觉主观特性,对不同纹理,运动快慢敏感度不同,相同QP对不同的区域编码,主观视觉体验不一致;
- 对平滑的画面,失真相对变化剧烈的画面失真要少,画质更好 - 码率不固定,内容相关
- 比特浪费
- 可用于算法验证或者测试,或者高质量的录制,如抖音的录制配置
CBR(constant bitrate):
恒定码率,就是编码过程要求恒定码率;
1. 不管是运动的片段还是比较静止的片段,都分配相同的码率,会导致因不同片段之间画质变化导致的主观体验较差;
2. 在恒定码率较高的时候,在静止片段,画质/比特边际收益较低,造成不必要的比特浪费
3. 使用场景,网络带宽要求较高,
VBR(Variable bitrate):
可变码率,编码过程根据实际编码帧、编码片段的内容特性,来分配合理的比特,在保证给定码率的前提下,尽可能提升画质主客观指标
常用的VBR 有crf, crf + VBV, abr, abr+vbv, abr + 2pass
CRF(Constant rate factor):
基于恒定质量因子来对不同内容特性计算最佳的QP
1. 人类主观特性
- 对平坦图像区域比较敏感,如天空,草原等,表征在编码器内部,Intra 模式的cost较小;
- 对细节比较丰富的区域不敏感,如小树叶等,表征在编码器内部,Intra 模式的cost 较大;
- 对运动缓慢的片段比较敏感,比如微风轻拂的花圃,表征在编码器内部,帧间的相似度较高,inter cost 较小;
- 对运动剧烈的片段比较不敏感,比如高铁窗外的电线杆,表征在编码器内部,帧间的相似度较小,inter cost 较大;
基于以上编码器在不同场景下的特性:
编码决策如下:
- 会对Cost 较大的区域或者视频片段,分配较小的码率,也就是是对应的QP较高;
- 对Cost 较小的区域,分配较多的码率,QP较小;
- 总体上编码视频片段在主观上相近
ABR (Average Bitrate)
平均码率,是VBR的一种,就是设定编码文件的平均码率,在编码过程中根据编码图像内容,分配不同的码率,在最终编码结束后,达到设定目标码率大小;
由于编码过程中,未编码的图像特性未知,所以编码器在编码过程中会基于已编码帧的统计,做出保守的决策,所以往往会对一些复杂的视频,做2pass 编码,基于第1 pass 编码统计特性,来做全局优化;
例子如下:
- 目标码率1000kbps, 第50帧平均800kbps,后续51帧会降低QP,提升后面片段码率
- 特殊case:前100帧平缓画面,后面100帧运动较大的画面,为了达到目标码率,后面片段画质较差,因为前面比较保守,后面没有更多可用的码率分配;
- 上述case 需要2pass
- 目标码率1000kbps, 第100帧平均1200kbps,后续101帧会增加QP,降低后面片段码率,
- 同上
VBV(Video buffer verifier)
是在点播场景下衍生出来的一种码控模型; Video buffer 可以对应我们点播场景,比如快手、西瓜视频,爱奇艺,优酷,腾讯视频等,在用户观看下一个视频的时候,App 提前加载了一定数量的视频文件数据,以保证用户在观看过程中不会卡顿。 通常会用如下参数:
- MinBitrate, 用户最小的下载速度;
- MaxBitrate, 用户最大的下载速度;
- VBVBuffSize, App在用户观看前预加载了多少的视频数据
用泳池充水和放水作比喻:
- 入水口: 用户的下载速度(MaxBitrate、MinBitrate)
- 出水口:编码器实际编码的码率,也对应播放器播放消耗的码率
水池:VBVBufferFill
- - 水池没水:VBVBufferFill <= 0; underflow,用户端卡顿
- 水池满水:VBVBufferFill > VBVBuffSize, 也就是下载下来的数据没来得及播放,只能丢弃, 现代播放器一般不会出现这种case, 因为bufferSize 会比较大
总结
码控模式 | 画质 | 中间码率 | 平均码率 | 是否有卡顿 | 码率是否 |
---|---|---|---|---|---|
CQP | 不固定 | 不固定 | 不固定 | 无保证 | 码率浪费 |
CRF | 固定 | 不固定 | 不固定 | 无保证 | 最佳分配 |
CBR | 不固定 | 固定 | 固定 | 保证 | 码率浪费 |
ABR | 不固定 | 不固定,但基本在目标码率上下浮动 | 固定 | 无保证 | 看视频内容 |
ABR 2pas | 不固定 | 不固定 | 固定 | 无保证 | 最佳分配 |
ABR+VBV | 不固定 | 不固定,比ABR浮动更小 | 固定 | 保证 | 看视频内容 |
CRF +VBV | 不固定,在保证VBV前提下,画质固定 | 不固定 | 不固定 | 保证 | 无浪费 |
encoding scenario
码控模式 | 直播 | 实时通信 | 点播 | 存档 | 存档 |
---|---|---|---|---|---|
CQP | 不适用 | 不适用 | 不适用 | 可用 | 不适用 |
CRF | 不适用 | 不适用 | 不适用 | 推荐使用 | 不适用 |
CBR | 可用 | 可用 | 可用 | 不适用 | 可用 |
ABR | 推荐使用 | 推荐使用 | 可用 | 不适用 | 可用 |
ABR 2pass | 不适用 | 不适用 | 可用 | 可用 | 推荐使用 |
ABR+VBV | 可用 | 可用 | 可用 | 可用 | 可用 |
CRF +VBV | 不适用 | 不适用 | 推荐使用 | 可用 | 不适用 |