音视频基础- 编解码 码控

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 不适用 不适用 推荐使用 可用 不适用

引用

-->