X264设置-码率控制选项


封面图来自pixiv 藤原

友情提示

1、此文章内容为个人存档且内容及其硬核,大家抱着看不下去右上角X的心态阅读,亦或者是你想入X264的坑 :huaji22:
2、此文章为X264官方文档的个人修改和补充版,如果想要进阶数据请访问原文档。
3、为蓝光做优化的设置会用蓝字体标注出
4、所有设置前缀为红色方便阅读
5、本文参考了VCB-Studio 教程 09 x264 参数设置

知识储备

MB-tree
即Marco-Block Tree。先上总结:开启mb-tree更注重平均压缩率、质量的提升,而no-mbtree则更容易保证整体质量的平衡。因此,在crf低于16时关闭,大于16后开启,默认是开启。是 x264 后期引入的一种码率控制和决策的工具,在时域和空域都有重要的影响。mbtree 的原理简单点说,就是在编码过程中,被大量参照的 block(被前后帧参照,或者被同一帧其他部分参照),给的 qp 值降低,画质更好,体积更大;反之,被参照少的帧,qp 增加,画质更烂,体积更小。其逻辑在于,被参照多的 block 理应有更好的画质,这可以让参照它的更多 block 受益。mbtree 的弊端主要在通常将平面和纹理涂抹的较为过分(这些block通常是直接参照别的block),mbtree也倾向于降低高动态部分的质量。如果关闭mbtree,通常细节会更好,但是线条会有些欠码。
AQ
Adaptive Quantizers,简称 AQ。没有 AQ,x264 会倾向于在平面和纹理处降低码率。造成的效果就是线条部分看上去还行,但是平面大幅度 block,纹理烂掉。AQ 的作用就是来防止码率在纹理和平面处被过分的降低。

可以修改的值

--qp
默认值:无(目前基本都用crf代替)
三种可选的码率控制方法之一。设置x264使用固定量化参数模式。给定的数量将被作为P帧的量化参数,I帧和B帧的量化参数由–ipratio 和 –pbratio参数进一步算出。QP模式适用固定的量化参数,这意味着最终的文件大小是不可知的(可以通过一些其他方法预测)。设置为0将产出无损的输出。相同视觉质量时,QP模式产出的文件比crf模式大。QP模式将关闭自适应量化器,因为它是固定QP的。一般而言crf都能代替QP模式,不过QP因为完全不需要预测所以它会运行地更快些。
--bitrate
默认值:无
三种位元率控制方法之二。以目标位元率模式来编码视频。目标位元率模式意味着最终档桉大小是已知的,但最终品质则未知。x264会尝试把给定的位元率作为整体平均值来编码视频。参数的单位是千位元/秒(8位元=1位元组)。注意,1千位元(kilobit)是1000位元,而不是1024位元。
此设定通常与--pass在两阶段(two-pass)编码一起使用。
--crf
默认值:23.0(可以在16-23.5之间调整)
最后一种位元率控制方法:固定位元率系数(Constant Ratefactor)。当qp是把某个量化值作为目标,而bitrate是把某个档桉大小作为目标时,crf则是把某个“品质”作为目标。crf值的度量单位是“位元率係数(ratefactor)”。CRF是由降低“较不重要”的帧之品质来达到此目的。在此情况下,“较不重要”是指在复杂或高动态场景的帧,其品质不是很耗费位元数就是不易察觉,所以会提高它们的量化值。从这些帧裡所节省下来的位元数被重新分配到可以更有效利用的帧。
--rc-lookahead
默认值:40(建议将其修改到视频帧数的3倍70左右)
设定mb-tree位元率控制和vbv-lookahead使用的帧数。最大允许值是250。对于mb-tree部分,增加帧数带来更好的效果但也会更慢。mb-tree使用的最大缓冲值是MIN(rc-lookahead, --keyint)。对于vbv-lookahead部分,当使用vbv时,增加帧数带来更好的稳定性和准确度。
--vbv-maxrate;--vbv-bufsize
默认:0(如果必须设置,请设置一个较高的值,建议maxrate=1.1bufsize)
简单来说就是码率上线,官方解释前者是设定重新填满VBV缓冲的最大位元率;后者是设定VBV缓冲的大小(单位是M)。
--qpmin
预设值:0
x264可以使用的最小量化值。量化值越小,输出视讯就越接近输入视讯。到了一定的值,x264的输出视讯看起来会跟输入视讯一样,即使它并不完全相同。不建议提高qpmin,因为这会降低帧里面平滑背景区域的品质。
--qpmax
预设值:69(如果为了限制压缩的最低下线,可以设置为30-40其中的一个值,例如36)
x264可以使用的最大量化值。预设值69是H.264规格可供使用的最大量化值,而且品质极低。此预设值有效地停用了qpmax。通常并不建议调整此值。
--ipratio
预设值:1.40
修改I帧量化值相比P帧量化值的目标平均增量。越大的值会提高I帧的品质。
--chroma-qp-offset
预设值:0(422请自动+2)
在编码时增加色度(chroma)平面量化值的偏移。偏移可以为负数。当使用psy的选项启用时(psy-rd、psy-trellis),x264会自动将此值再减去2,以补偿因这些最佳化而过度地偏好亮度(luma)细节。
--aq-mode
默认:1(有1-4)
选择AQ的模式,一般来说,mode=1 效果中等,比较安全,不容易出现较烂的帧。mode=2 比较省码率,但是偶尔容易出现烂帧。mode=3适合动漫,但是码率稍高;mode=4 是由2优化而来,更保险一点。
--aq-strength
预设值:1.0(动漫0.6~1.0,真人0.8~1.2)
弹性量化强度。设定AQ偏向低细节(平滑)的宏区块之强度。不允许为负数。0.0~2.0以外的值不建议。
--pass
预设值:无
此为两阶段编码的一个重要设定。它控制x264如何处理--stats档案。有三种设定:
1:建立一个新的统计资料档案。在第一阶段使用此选项。
2:读取统计资料档案。在最终阶段使用此选项。
3:读取统计资料档案并更新。
--qcomp
预设值:0.60(mbtree关闭时+0.1即可)
量化值曲线压缩系数。0.0是固定位元率,1.0则是固定量化值。当mbtree启用时,它会影响mbtree的强度(qcomp越大,mbtree越弱)。mbtree 开启的时候,qcomp 的灵活度会被放大。所以一般开 mbtree,需要增加qcomp(qcomp数值增加,灵活度降低)。关闭 mbtree 的时候,qcomp 的敏感度则降低。

没搞懂的值

--qpstep
默认值:4
设定两帧之间量化值的最大变更幅度。其实这个也不是我没搞懂,就是不知道改这个有什么意义。
--ratetol
预设值:1.0
此参数有两个目的:在一阶段位元率编码时,此设定控制x264可以偏离目标平均位元率的百分比。可以指定inf来完全停用溢出侦测(overflow detection)。可以设定的最小值是0.01。值设得越大,x264可以对接近电影结尾的复杂场景作出越好的反应。此目的的度量单位是百分比(例如,1.0等于允许1%的位元率偏差)。很多电影(例如动作片)在电影结尾时是最复杂的。因为一阶段编码并不知道这一点,结尾所需的位元数通常被低估。将ratetol设为inf可以减轻此情况,借由允许编码以更像--crf的模式运行,但档案大小会暴增。这是真没看懂
zones(放在这里时觉得一个一个定义很麻烦,虽然很有用)
默认值:无
调整视频的指定片段之设定。可以修改每区段的大多数x264选项。
一个单一区段的形式为<起始帧>,<结束帧>,<选项>。
多个区段彼此以"/"分隔。

可以选择的选项
这两个是特殊选项。每区段只能设定其中一个,而且如果有设定其中一个,它必须为该区段列出的第一个选项:
b=<浮点数> 套用位元率乘数在此区段。在额外调整高动态和低动态场景时很有用。
q=<整数> 套用固定量化值在此区段。在套用于一段范围的帧时很有用。
其他非特殊选项如下:
ref=<整数>
b-bias=<整数>
scenecut=<整数>
no-deblock
deblock=<整数>:<整数>
deadzone-intra=<整数>
deadzone-inter=<整数>
direct=<字串>
merange=<整数>
nr=<整数>
subme=<整数>
trellis=<整数>
(no-)chroma-me
(no-)dct-decimate
(no-)fast-pskip
(no-)mixed-refs
psy-rd=<浮点数>:<浮点数>
me=<字串>
no-8x8dct
b-pyramid=<字串>
crf=<浮点数>

--cplxblur(真没搞懂)
默认值:20.0
以给定的半径范围套用高斯模煳(gaussian blur)于量化值曲线。这意味着分配给每个帧的量化值会被它的邻近帧模煳掉,以此来限制量化值波动。

不建议修改的值

--crf-max
默认值:无
一个类似--qpmax的设定,除了指定的是最大位元率系数而非最大量化值。当使用--crf且启用VBV时,此选项才会运作。它阻止x264降低位元率系数(亦称为“品质”)到低于给定的值,即使这样做会违反VBV的条件约束。此设定主要适用于自订资料流服务器
--vbv-init
默认值:0.9
设定VBV缓冲必须填满多少才会开始播放。如果值小于1,初始的填满量是:vbv-init * vbv-bufsize。否则该值即是初始的填满量(单位是千位元)。
--pbratio(只有关闭mbtree后才生效的值)
预设值:1.30
修改B帧量化值相比P帧量化值的目标平均减量。越大的值会降低B帧的品质。当mbtree启用时(预设启用),此设定无作用,mbtree会自动计算最佳值。
--no-mbtree(上一个的前置条件)
默认值:无
停用巨集区块树(macroblock tree)位元率控制。
--stats
预设值:"x264_2pass.log"
设定x264读取和写入统计资料档案的位置。
--qblur
默认值:0.5
在曲线压缩之后,以给定的半径范围套用高斯模煳于量化值曲线。不怎么重要的设定。

Like

Leave a Reply

Your Email address will not be published. The required items are marked with *