--rc-lookahead <integer> Number of frames for frametype lookahead [40]
默认:40
说明:为mb-tree码率控制机制(Macroblock Tree Ratecontrol)和vbv-lookahead设置可用的帧的数量。最大可设置为250。
对于mb-tree而言,调大这个值会得到更准确地结果,但也会更慢。mb-tree能使用的最大值是MIN(rc-lookahead, keyint)。
对于vbv-lookahead而言,调大这个值会得更稳定和精确的码率控制。vbv-lookahead能使用的最大值是如下公式算出来的:MIN(rc-lookahead, MAX(keyint, MAX(vbv-maxrate, bitrate) / vbv-bufsize * fps))
参见:–no-mbtree, –vbv-bufsize, –vbv-maxrate
rc-lookahead会增加编码启动群延时(编码器会储满rc-lookahead帧数据后,才开始第一帧编码),在实时视频通信系统中设置它为0。
--vbv-bufsize <integer> Set size of the VBV buffer (kbit) [0]
默认:0
说明:设置VBV可用的最大缓冲区,单位是kbits。VBV(Video Buffering Verifier,视频缓存检验器),它作用是处理各帧编码后大小不一和恒定输出码率的矛盾。可以将VBV想象成为一个水池,水池的入口连接着encoder的输出,出口为恒定码率的网络输出。为了使得输出恒定,encoder必须保证水池既不上溢也不下溢。下溢会导致无数据输出,上溢会导致数据丢失。所以encoder在编码一帧时会参考当前vbv的充盈情况,并由此计算出,当前帧应当编码出多少比特,从而保证既不上溢(增加QP)也不下溢(减少QP)。为了防止上溢,VBV会要求降低编码比特,encoder会采用更大一些的QP,这样必然降低了视频序列质量,因此只在真正需要的时候才设定它。一般在硬件解码端的时候,一定要做这个设置。例如蓝光定义最大的数据缓冲为30M比特,能够解码的最大视频码率为40Mbps。这是对硬件解码器资源选配的一个合理限制,否则解码器不知道预留多大的数据缓冲空间才是安全的。这类似264标准的level设定。
http://mewiki.project357.com/wiki/X264_Encoding_Suggestions#VBV_Encoding有三个例子是介绍vbv-bufsize和vbv-maxrate这两个参数的设定。
--crf-max <float> With CRF+VBV, limit RF to this value May cause VBV underflows!
默认:无
说明:这个选项仅用于CRF和VBV同时启用的时候。它限制x264使用大于给定值的ratefactor(太大的CR,质量下降太多),哪怕会违反VBV。一般用于流服务器。
在bitrate模式下无视它。
--qpmax <integer> Set max QP [69]
默认:QP_MAX,范围[0, QP_MAX]
说明:设置x264可以使用的最大量化值。在H.264标准里面8比特编码的最大量化值为51,对应的输出视频质量非常差。一般而言不推荐调节这个值。
参见:–qpmin, –pbratio, –crf-max
在bitrate模式下,qpmin <= qp <= qpmax,保持他们的缺省值就可以。
--qpmin <integer> Set min QP [0]
默认:0,范围[0, qpmax]
说明:设置x264可以使用的最小量化器。量化参数越小,输出越接近输入。使用某些值时,x264的输出可以和输入看起来完全一样(虽然其实并不是精确相同的),这样的QP就足够了,没有必要再选用更低的QP。
如果开启了自适应量化器(默认开启),则不鼓励提高qpmin的值,那样可能会降低帧的平坦部分的质量。
参见:–qpmax, –ipratio
--qpstep <integer> Set max QP step [4]
默认:4,范围[2, QP_MAX]
说明:设置2个码率控制单元间QP最大的可变值。码率控制单元可以是一帧,也可以是一行,在ABR+VBV的方法中,控制单元是一行。
QP与视频质量有大致正比的关系,QP变化过大视频质量变化也会过大,周期性的视频质量变化,会被人类视觉感知,造成不良的视觉感受。
--ratetol <float> Tolerance of ABR ratecontrol and VBV [1.0]
默认:1.0, 范围[0.01 - inf], x264里面定义 inf = 1e9
说明:这个参数有2个可能的含义:
1、在1次bitrate编码时,这个参数控制x264可以偏离给定平均目标码率的百分比。1.0意味着允许bitrate*1%比特的偏差,设置为inf是完全关闭码率溢出侦测。有些影片(比如说动作打斗片)在最后的片段里十分复杂。1趟编码并不知道哪里是最复杂的片断,往往到最后比特都已经用完了。把rateol设置为inf就能解决这个问题,它允许编码器用类似 –crf的方式工作,当然文件大小会溢出。
2、当开启了VBV时(只要使用了任何–vbv-开头的选项就会开启),这个值定义偏离平均目标码率的程度,较大的值意味着允许更大的码率波动。
较小的值码率控制的精度会更准确一些。建议保持缺省1.0。
--ipratio <float> QP factor between I and P [1.40]
默认:1.40,范围[0.01, )
说明:设置平均I帧QP相比P帧QP的减值。更高的值意味着更高的I帧质量。ipratio与I帧QP成反比例关系。等于1的时候,I帧QP与P帧相同。
参见:–pbratio
rc->ip_offset = 6.0 * log2f( h->param.rc.f_ip_factor );
rc->qp_constant[SLICE_TYPE_I] = x264_clip3( h->param.rc.i_qp_constant - rc->ip_offset + 0.5, 0, QP_MAX );
--pbratio <float> QP factor between P and B [1.30]
默认:1.30,范围[0.01, )
说明:设置平均B帧QP相比P帧QP的增值。更高的值意味着更低的B帧质量。pbratio与B帧QP成正比例关系。等于1的时候,B帧QP与P帧相同。
开启mbtree(默认开启)选项时不可用,mbtree会自适应地计算B帧量化器。
参见:–ipratio
rc->pb_offset = 6.0 * log2f( h->param.rc.f_pb_factor );
rc->qp_constant[SLICE_TYPE_B] = x264_clip3( h->param.rc.i_qp_constant + rc->pb_offset + 0.5, 0, QP_MAX );
--chroma-qp-offset <integer> QP difference between chroma and luma [0]
默认:0,范围[-12, 12]
说明:设置色度宏块的QP偏移值,chromaQP = LumaQP + chroma-qp-offset。正值则色度选用较大的QP,色度质量被降低;负值色度质量提升。在开启 psy-rd或 psy-trellis时,x264增加整体的quantizers来提升亮度质量,这间接的伤害了色度质量,因此人为的降低这个值对色度质量做一些补偿。(Psy RDO increases overall quantizers to improve the quality of luma--this indirectly hurts
chroma quality so we lower the chroma QP offset to compensate)。注意:H.264标准中定义QP<30亮度和色度使用同样的量化器。30<=QP<=51,色度使用比亮度好的量化器。
--zones <zone0>/<zone1>/... Tweak the bitrate of regions of the video
Each zone is of the form
<start frame>,<end frame>,<option>
where <option> is either
q=<integer> (force QP)
or b=<float> (bitrate multiplier)
默认:无
说明:调节视频的特殊片断。可以用它修改大多数x264选项。
一个单独的zone使用<start frame>,<end frame>,<options>的形式表达。多个zone用’/‘分隔。
<options>
--qpfile <string> Force frametypes and QPs for some or all frames
Format of each line: framenumber frametype QP
QP is optional (none lets x264 choose). Frametypes: I,i,K,P,B,b.
K=<I or i> depending on open-gop setting
QPs are restricted by qpmin/qpmax.
说明:手工设定序列中某些帧的帧类型及QP。格式是’帧序号 帧类型 量化器’。帧类型包括:I(IDR frame, Keyframe),i (non-IDR I frame, maybe keyframe), K(I or i Keyframe), P(P frame),B(Referenced B-frame),b(Non-referenced B-frame)
例子:
0 I 18 < IDR (key) I-frame
1 P 20 < P-frame
2 B 22 < Referenced B-frame
3 i 21 < Non-IDR (non-key) I-frame
4 b 18 < Non-referenced B-frame
5 K 16 < Keyframe*
注意:
不用指定每一个帧。
只想设置帧类型时,可以把量化器设置为-1来表明允许x264自行选择优化的QP,
如果手工指定大量的帧类型和量化器之间间歇穿插着让x264自行决策的部分,则会降低x264的表现。
‘Keyframe’ 表示可以seek到的关键帧。如果–open-gop设置为none则I,i都是Keyframe,如果open-gop打开(本GOP内的帧B会参考到前面一个GOP内的帧)这样的I帧就不一定是keyframe.