写点什么

码控算法

作者:qh12346
  • 2023-06-27
    新加坡
  • 本文字数:1239 字

    阅读完需:约 4 分钟

码率控制,它是编码器的一个重要模块,主要的作用就是用算法来控制编码器输出码流的大小。虽然它是编码器的一个非常重要的部分,但是它并不是编码标准的一部分,也就是说,标准并没有给码控设定规则。我们平时用的编码器的码控都是编码器程序自己实现的。

常用的码控算法主要有:VBR(动态码率)、CQP(恒定 QP)、CRF(恒定码率因子)和 CBR(恒定码率)这几种。


· VBR(Variable Bitrate,动态码率)

VBR 指的是编码器输出码率随着原始视频画面复杂度的变化不断的变化,即允许在码率统计时间内编码码率波动,从而保证编码图像质量平稳。通常当画面复杂或者说运动比较多的时候使用的码率会比较高;而当画面比较简单的时候使用的码率会比较低。VBR 主要的目标是保证视频画面质量,因此比较适合视频点播和短视频场景使用。

码率可以随着图像的复杂程度的不同而变化,因此其编码效率比较高,Motion 发生时,马赛克很少。码率控制算法根据图像内容确定使用的比特率,图像内容比较简单则分配较少的码率,图像内容复杂则分配较多的码率,这样既保证了质量,又兼顾带宽限制。这种算法在画质相同的前提下,可以缩小文件体积。


· CQP(Constant QP,固定质量参数)

CQP 从头到尾每一个画面都是用同一个 QP 值去编码:

  • 在画面复杂的时候,残差比较大,相同 QP 值做量化之后的残差还是比较大的,编码之后的图像大小就会比较大。

  • 而画面简单的时候,残差很小,同一个 QP 值量化之后残差可能很小,甚至都为 0 了,编码之后的大小就会很小。

每一帧图像在压缩的时候,采用相同的 QP 值。(QP 值决定了量化编码时从像素宏块的原始信息中丢弃多少信息,QP 越大压缩率越高同时质量越低,QP 越小压缩率越低同时质量越高)


· CRF(Constant Rate Factor,恒定码率因子)

使用 CBR 和 VBR 时,需要选择一个目标码率,编码器会调整视频质量以达到该目标。这种方法的问题是,如果你对所有视频片段使用了相同的码率阶梯,那么就会在容易编码的视频上浪费很多不必要的带宽。

所以,当使用 CBR 和 VBR 编码时,编码器会调整所需的视频质量进而达到目标码率。相比之下,使用 CRF 编码,选择一种目标质量,编码器会通过调整码率达到该质量水平。CRF 值分布为从 0 到 51,一般来说这个取值越小,视频帧编码质量相对越高,取值为 0 则是无损压缩。


· CBR

另外一种码控算法就是 CBR 了,它是恒定码率的。这种码控方式用户需要设置一个目标码率值给编码器。编码器在编码的时候不管图像画面复杂或简单、运动多或运动少的时候,都尽量使得输出的码率接近设置的目标码率。

这种方式非常适合 RTC 场景,因为 RTC 场景希望编码的码率跟实际预测的带宽值接近,不能超出目标码率太多,也希望能够尽量有效地利用可用带宽,不能太低于目标码率,从而尽量保证编码后图像画面清晰。

因此,在 RTC 场景中,我们会将预估带宽分出一定比例给视频数据,并将这部分带宽值当作目标码率设置给编码器。需要编码器的码控算法,能够在各种网络状况下和各种画面变化的情况下,都能使得输出的码率尽量接近于当前预估带宽得到的目标码率。


用户头像

qh12346

关注

还未添加个人签名 2018-05-01 加入

还未添加个人简介

评论

发布
暂无评论
码控算法_qh12346_InfoQ写作社区