编码参数

记录H264、H265中用到的一些编码参数,及其特点等。

编码器相关参数说明:

码率控制

CBR

  • CBR:constant bitrate 恒定比特率编码,属于码率优先模型

由于码率恒定,只能通过增大QP来减少码字大小,图像质量变差,当场景静止时,图像质量又变好,因此图像质量不稳定。这种算法优先考虑码率(带宽)。

适用场景:

一般也不建议使用这种方式,虽然输出的码率总是处于一个稳定值,但是质量不稳定,不能充分有效利用网络带宽,因为这种模型不考虑视频内容的复杂性,把所有视频帧的内容统一对待。但是有些编码软件只支持固定质量或者固定码率方式,有时不得不用。用的时候在允许的带宽范围内尽可能把带宽设置大点,以防止复杂运动场景下视频质量很低,如果设置的不合理,在运动场景下直接就糊的看不成了。

特点:

  • 码率稳定,但是质量不稳定,带宽有效利用率不高,特别当该值设置不合理,在复杂运动场景下,画面非常模糊,非常影响观看体验;
  • 但是输出视频码率基本稳定,便于计算视频体积大小;

VBR

  • VBR:variable bitrate 可变比特率编码

比特分配根据图像内容的复杂度进行。如果图像细节较丰富或者含有大量的运动,则给其分配大一点的码流,若图像比较平坦,就给其分配较少的码流,这样既保证了质量,又兼顾带宽限制。

简单场景分配比较大的QP,压缩率小,质量高。复杂场景分配较小QP。得到基本稳定的视觉质量,因为人眼人眼本来就对复杂场景不敏感,缺点在于输出码率大小不可控。

有两种调控模式:质量优先模式2PASS二次编码模式

  • 质量优先模式: 不考虑输出视频文件的大小,完全按照视频的内容复杂程度来分配码率,这样视频的播放效果质量最好。
  • 2PASS二次编码模式: 第一次编码检测视频内容的简单和复杂部分,同时确定简单和复杂的比例。第二遍编码会让视频的平均码率不变,复杂的地方分配多bit,简单地方分配少bit。这种编码虽然很好,但是速度会跟不上。

适用场景:

VBR适用于那些对带宽和编码速度不太限制,但是对质量有很高要求的场景。特别是在运动的复杂场景下也可以保持比较高的清晰度且输出质量比较稳定,适合对延时不敏感的点播,录播或者存储系统。

特点:

  • 码率不稳定,质量基本稳定且非常高;
  • 编码速度一般比较慢,点播、下载和存储系统可以优先使用,不适合低延时、直播系统;
  • 这种模型完全不考虑输出的视频带宽,为了质量,需要多少码率就占用多少,也不太考虑编码速度;

CRF

  • CRF:Constant Rate Factor 恒定码率系数,属于视频质量优先模型

把某一个”视觉质量”作为输出目标。通过降低那些耗费码率但是又难以用肉眼察觉的帧(高速运动或者纹理丰富)的质量提升那些静态帧的码率来达到此目的。

适用场景

适用于对视频质量有一定要求的场合,CRF值可以简单理解为对视频质量期望的一个输出固定值,希望无论是在运动复杂场景下还是在静止简单情况下,都希望有一个稳定的主观视频质量可以选择该模式,该模式是视频质量优先模型。视频质量可以简单理解为视频的清晰度,像素的细腻程度和视频的流畅度。

特点:

  • 帧间QP变化,帧内宏块的QP变化,输出码率未知,各帧输出的视觉质量基本恒定,这种方式相当于固定质量模式+限制码率峰值的方式。
  • CRF值越大视频压缩率越高,但视频质量越低,各codec的CRF取值范围一般[0-51],但是一般默认值x264用23,x265库默认为28;

ABR

  • ABR:(Average Bit Rate)恒定平均目标码率

简单场景分配较低bit,复杂场景分配足够bit,使得有限的bit数能够在不同场景下合理分配,这类似VBR。同时一定时间内,平均码率又接近设置的目标码率,这样可以控制输出文件的大小,这又类似CBR。可以认为是CBR和VBR的折中方案,这是大多人的选择。特别在对质量和视频带宽都有要求的情况下,可以优先选择该模式,一般速度是VBR的两倍到三倍,相同体积的视频文件质量却比CBR好很多。

适用场景:

ABR在直播和低延时系统用的比较多,因为只编码了一次,所以速度快,同时兼顾了视频质量和带宽,对于转码速度有要求的情况下也可以选择该模式。B站的大部分视频就选择了该模式。

特点:

  • 视频质量整体可控,同时兼顾了视频码率和速度,是一个折中方案,实际用的比较多;
  • 使用过程一般要让调用方设置,最低码率、最高码率和平均码率,这些值要尽可能设置合理点;

CQP

  • CQP: Constant QP 固定QP

最简单的码率控制方式,每帧图像都按照一个特定的QP来编码,每帧编码后的数据量有多大是未知的,既不是码率优先模型也不是质量优先模型,不过是实现最简单的模型;

适用场景:

一般不建议使用这种方式,因为这种方式不考虑编码内容的复杂性,用相同的压缩比处理每一帧。出来的视频质量和码率都不固定。个人觉得只有那种非常简单的场景,比如静止不变的场景运动量很小的场景可以尝试用,一遇到复杂场景,码率波动就非常大。或者在算法研究或者验证可以使用。

特点:

  • 瞬时码率会随场景复杂度波动;
  • 编码速度快,调控最简单,每帧的QP值相同;
  • x264和x265中支持CQP模式,libvpx不支持;
  • H.264中QP范围是[0, 51]。QP值越大表示越大的量化步长,编码视频的质量越低。QP为0表示进行无损编码;

ROI (region of interest) encoding

基于感兴趣区域的视频编码技术,对图像中感兴趣的区域减少量化参数值(qp:quantization parameter),从而分配更多码率以提升画面质量,而对不感兴趣的区域则增加量化参数值(qp),从而分配更少码率(这部分区域的画面质量会因此有所下降),这样,在不损失图像整体质量的前提下,可以节省网络带宽占用和视频存储空间,或者,在不增加网络带宽占用和存储空间的前提下,可以提高视频的整体质量。这在监控、窄带高清等领域都有较大的应用。

参考

  • 视频编码码率控制:CBR、VBR和ABR