x264 码率控制

1. 概述

在视频编解码过程中,我们一直在追求更低的码率和更高的编码质量。更低的码率意味着更低的带宽占用和更小的文件体积,但往往意味着更低的视频质量。所以我们会根据应用场景和视频复杂度,选择恰当的视频编码码率以及其他控制参数。对于 x264 而言,共有三种码率控制模式,接下来进行介绍。

2. 码率控制的三种模式

2.1 恒定量化参数模式

X264_RC_CQP constant quantizer parameter

取值范围:[0, 51],0 = lossless

最简单的码率控制方式,每帧图像都按照这一个特定的 QP 来编码,每帧编码后的数据量有多大是未知的。参数 i_qp_constant 设置的是 P 帧的 QP,I、B 帧的 QP 根据 f_ip_factor,f_pb_factor 计算得到。

每种帧类型的量化参数设置位于 x264/encoder/encoder.c 中,具体代码:
在这里插入图片描述X264 YUV420 格式 8 比特采样的 QP 范围是 [0, 51],QP 值越小,编码视觉质量越好。0 代表无损编码。

在研究编码算法时,一般会选用 CQP 方法,设定 QP 值为 24,28,32,40 等,编码得到 RD 曲线,然后比较算法优劣。

相同视觉质量时,CQP 编码输出的文件会比 CRF 模式更大,一般而言 CRF 都能替代 CQP 方法,不过 CQP 方法因为完全不需要预测所以运行更加快。

帧的重要级别:IDR 帧 > I 帧 > P 帧 > 做参考的 B 帧 > 不做参考的 B 帧。QP 值可以随着帧的重要级别降低而增大。

i_qp_min
默认值:0. 定义 x264 可以使用的最小量化参数值。量化参数值越小,输出的视频质量越好。
当 QP 小于某一个值后,编码输出的宏块质量与原始块极为相近,这时没有必要继续降低 QP。
如果开启了自适应量化器(默认开启),不建议提高 i_qp_min 的值,因为这样会降低平滑背景区域的视觉质量。

i_qp_max
默认值:51. 定义 x264 可以使用的最大量化值。默认值 51 是 h264 规格中可供使用的最大值。

i_qp_min 和 i_qp_max 在 CRF 和 ABR 方法下是有效的,将 i_qp_max 设置过小,可能导致 ABR 码率控制失败,不建议调整这个参数。

i_qp_step
默认值:4. 设置两帧间量化值的最大变化幅度。
帧间 QP 变化,帧内宏块 QP 不变,输出码率未知,各帧输出的视觉质量有变化。

2.2 恒定码率系数模式

X264_RC_CRF constant rate-factor

这种控制模式在控制所有视频帧的质量上有很好的效果,但是无法有效地控制码率。

这种码率控制模式是 x264 采用的默认码率控制模式,f_rf_constant 默认值取 23。
在这里插入图片描述
CRF 可以提供和 CQP 一样的视觉质量,但是文件更小,CRF 通过降低那些“less important”的帧的质量来达到这个目的。

“less important”指那些过于耗费码率但是又难以用肉眼察觉的帧,比如复杂或者告诉运行的场景,省下来的码率分配给其他更有效的帧。

在 x264 编码器内部 CRF 和 ABR 采用了相同的调整策略,只是它不遵循一个特定的输出码率。

它也是通过改变不同重要级别帧(I、P、B),以及帧内不同宏块类型(高速运动、复杂纹理、平坦区域)的 QP 值,以此来调整输出的视觉质量。

和 QP 的范围一样 RF 的范围也是 [0, 51]。其中 0 对应无损模式, 51 质量最差。RF 值加 6,输出码率大概减少一半。

从主观上讲,18~28 是一个合理的范围, 18 往往被认为从视觉上看是近似无损的。
帧间 RF 变化,帧内宏块 RF 变化,输出码率未知,各帧输出视觉质量基本恒定。

2.3 恒定平均码率模式

X264_RC_ABR average bitrate

参数设置的量纲为 kilobits/sec。X264 中的 1k 是 1000,而不是 1024.

恒定比特率模式意味着最终文件的大小是可知的,但是目标文件的质量不可知。X264 会试图让最终文件的整体码率与给定的码率相等。

与 ABR 模式相应的有 CBR 和 VBR 。
CBR 编码码率基本保持恒定,有利于流式播放。
CBR 的缺点在于复杂场景码率不够用,简单场景码率浪费,因此编码内容的视觉质量不稳定。通常在比较低的比特率下,这种质量变化会更加明显。

VBR 为简单场景分配较大的 QP,为复杂场景分配较小的 QP,得到基本稳定的输出视觉质量。
相较于 CBR ,在同样文件大小的条件下,VBR 的输出结果要比 CBR 好很多,有利于媒体的下载和本地存储。
VBR 的缺点在于输出码流的大小不可控,同时对于复杂度恒定的内容没什么优势。

ABR 编码为简单场景分配较少的比特,从而留出足够的比特用于生成高质量的复杂部分。使得有限的比特数能够在不同的场景间合理分配。这一点类似于 VBR。
同时 ABR 分配码率,使得在一定时间内,平均码率趋近于目标码率,这样可以控制输出文件的大小。这一点类似于 CBR。
因此,可以认为 ABR 是一种 VBR 和 CBR 的折中方案。

对比结果

模式 视觉质量稳定性 即时输出码率 输出文件大小
CBR 不稳定 恒定 可控
VBR 稳定 变化 不可控
ABR 基本稳定 变化 可控

2.4 使用建议

在这里插入图片描述
CQP 模式是把某个量化值作为目标,ABR 是把某个文件大小作为目标,而 CRF 则是把某个输出“视觉质量”作为目标。

3. 小结

码率控制属于视频编码的核心内容之一,简单的看几篇博客目前还只是停留在比较粗略的认识上,后续随着对视频编码理解的加深也会对码率控制有更多的认识。

参考

[1] x264码率控制方法介绍

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章