音视频基础- 编解码 码控

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

引用