转载自http://blog.sina.com.cn/s/blog_4e0869690100xa85.html
【 翻译 】x264参数介绍(一、帧类型和码率控制)
2010年10月2日
评论 发表评论
翻译自:http://mewiki.project357.com/wiki/X264_Settings,水平有限,勿吝指教。
第二部分:http://blog.yikuyiku.com/?p=2206
输入
用1个绝对路径定义输入文件(或者2个,rawYUV文件)。如下例:
x264.exe -o NUL C:\input.avs
x264 -o /dev/null ~/input.y4m
如果输入文件是rawYUV格式的,还要把分辨率一并输入。如果开启了比特率控制,还需要输入帧率。如下例:
x264.exe -o NUL –fps 25 D:\input.yuv 1280×720
x264 -o /dev/null –fps 30000/1001 ~/input.yuv 640×480
预设值
预设值是x264在r1177版本增加的一个方便的命令行选项。可以用x264.exe –fullhelp查看所有的命令行帮助。
profile
默认:无
说明:限制输出文件的profile。这个参数将覆盖其它所有值,此选项能保证输出profile兼容的视频流。如果使用了这个选项,将不能进行无损压缩(qp 0 or crf 0)。
可选:baseline,main,high
建议:不设置。除非解码环境只支持main或者baseline profile的解码。
preset
默认:medium
一些在压缩效率和运算时间中平衡的预设值。如果指定了一个预设值,它会在其它选项生效前生效。
可选:ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow and placebo.
建议:可接受的最慢的值
tune
默认:无
说明:在上一个选项基础上进一步优化输入。如果定义了一个tune值,它将在preset之后,其它选项之前生效。
可选:film, animation, grain, stillimage, psnr, ssim, fastdecode, zerolatency and touhou.
建议:根据输入选择。如果没有合适的就不要指定。
slow-firstpass
默认:无
说明:随着预设值机制在r1177版本的出现,使用–pass 1会在解析命令行时增加以下设置:
* ref 1
* no-8x8dct
* partitions i4x4 (if originally enabled, else none)
* me dia
* subme MIN( 2, subme )
* trellis 0
如果设置preset=placebo则自动关闭此特性。如果想显式关闭此特性,使用slow-firstpass。
帧类型
keyint
默认:250
说明:设置x264输出中最大的IDR帧(亦称关键帧)间距。
IDR帧是视频流的“分隔符”,所有帧都不可以使用越过关键帧的帧作为参考帧。IDR帧是I帧的一种,所以它们也不参照其它帧。这意味着它们可以作为视频的搜索(seek)点。
通过这个设置可以设置IDR帧的最大间隔帧数(亦称最大图像组长度)。较大的值将导致IDR帧减少(会用占用空间更少的P帧和B帧取代),也就同时减弱了参照帧选择的限制。较小的值导致减少搜索一个随机帧所需的平均时间。
建议:默认值(fps的10倍)对大多数视频都很好。如果在为蓝光、广播、直播流或者其它什么专业流编码,也许会需要更小的图像组长度(一般等于fps)。
参见:min-keyint, scenecut, intra-refresh
min-keyint
默认:auto(keyint/10)
说明:参见keyint的说明。过小的keyint范围会导致产生“错误的”IDR帧(比如说,一个闪屏场景,参见上一篇blog)。此选项限制了IDR帧之间的最小距离。
建议:默认,或者与fps相等
参见:keyint, scenecut
no-scenecut
默认:无
说明:完全关闭自适应I帧决策。
参见:scenecut
scenecut
默认:40
说明:设置决策使用I帧、IDR帧的阈值(场景变换检测)。
x264会计算每一帧与前一帧的不同程度并得出一个值。如果这个值低于scenecut,那么就算检测到一个“场景变换”。如果此时距离上一帧的距离小于 min-keyint则插入一个I帧,反之则插入一个IDR帧。较高的值会增加侦测到“场景变换”纪律。更详细的工作原理可见 http://forum.doom9.org/showthread.php?t=121116
设置scenecut=0与no-scenecut等效。
建议:使用默认值
参见:keyint, min-keyint, no-scenecut
intra-refresh
默认:off
说明:让x264为每keyint数量的帧使用宏块内部编码取代IDR帧。块以水平移动列的方式更新,也叫刷新波。对于低延迟的流,这样可以让帧的尺寸比使用标准的IDR帧更加保持恒定。而且这样可以增强视频流对丢包的容错能力。这个选项会降低压缩率,所以在确实需要的时候才选择它。
还有一些有意思的事情:1、第一帧依然是IDR帧。2、内部宏块只在P帧中存在,刷新波在一个或多个B帧后的P帧中广泛存在。3、主要的压缩率下降原因是在宏块中新(左边)的波并不能参考旧(右边)的波。
建议:使用默认值
bframes
默认:3
说明:设置x264可使用的B帧的最大连续数量。
没有B帧时,一个典型的x264流帧类型是这样的:IPPPPP…PI。如果设置了-bframes 2,那么两个连续的P帧就可以用B帧替换,然后就像这样:IBPBBPBPPPB…PI。
B帧和P帧的区别在于它可以参照它之后的帧,这个特点让它可以显著地提升压缩率。他们的平均品质受 –pbratio选项的控制。
还有一些有意思的事情:
1、x264有2种B帧,一种可以作为参照帧,一种不能;
2、关于x264如何决策B帧或P帧,可以看看这个ffmpeg-devel邮件列表中的这一封http://article.gmane.org /gmane.comp.video.ffmpeg.devel/29064。这种情况下帧类型看起来就像这样IBBBPBBBPBPI(假设设置 –bframes 3)。
参见:–no-b-adapt, –b-bias, –b-pyramid, –ref, –pbratio, –partitions, –weightb
b-adapt
默认:1
说明:设置B帧决策算法,这个选项会影响到x264使用P帧或者B帧。
0 —— 关闭。总是使用B帧。和以前的 no-b-adapt选项效果相同;
1 —— ‘快速’算法。快速,–b-frames越大速度越快。推荐配合使用–bframes 16;
2 —— ‘最佳’算法,慢速,–b-frames越大速度越慢;
注意:多趟编码时,只有第一趟编码的此选项起效,因为第一趟编码结束时,帧类型就已经被决定了。
b-bias
默认:0
说明:调节使用B帧的力度。越大的值越偏向B帧,可以在-100和100之间选择。100或-100不能保证完全或是全是B帧(使用 –b-adapt 0)。
请只在你认为你能做出比x264更好的码率控制时才使用这个选项。
参见: –b-frames, –ipratio
b-pyramid
默认:normal
说明:允许B帧作为参照帧。如果关闭,那么只有I帧和P帧才能作为参照帧。可以作为参照帧的B帧的量化参数会介于P帧和普通B帧之间。只在–b-frames设置大于等于2时此选项才生效。如果是在为蓝光光盘编码,请使用none或者strict。
none —— 不允许B帧作为参照帧;
strict —— 一个图像组内只允许一个B帧参照帧,这是蓝光编码强制要求的标准;
normal —— 任意使用B帧参照帧;
参见:–bframes, –refs, –no-mixed-refs
open-gop
默认:none
说明:Open-GOP是一个提升压缩效率的编码技术。它有以下选项:
none —— 关闭
normal —— 开启
bluray —— 开启。一个稍低效的open-GOP版本,因为normal模式不能用于蓝光编码
有些解码器不能完全支持open-GOP流,因此这个选项默认关闭。如果要用,请测试你的解码器。
更多open-gop的资料可以看这个链接http://forum.doom9.org/showthread.php?p=1300124#post1300124
no-cabac
默认:无
说明:关闭CABAC (Context Adaptive Binary Arithmetic Coder)压缩,使用较为低效的CAVLC (Context Adaptive Variable Length Coder)。这两者在压缩效率和解码效率上有10%-20%的差别。
ref
默认:3
说明:控制DPB (Decoded Picture Buffer)的大小。可以在0-16之间选择。简单地说,就是设置P帧可以选择它之前的多少帧作为参照帧(B帧的值要小1-2,取决于那个B帧能不能作为参照)。最小可以选择值1,只参照自己前面的那帧。
注意H.264标准限制了每个level可以参照的帧的数量。如果选择level4.1,1080p最大选4,720p最大选9。
参照: –b-pyramid, –no-mixed-refs, –level
no-deblock
默认:无
说明:完全关闭内置去块滤镜。不推荐使用。
参见: –deblock
deblock
默认:0:0
说明:调节H.264标准中的内置去块滤镜。这是个性价比很高的选则。
详细的参数运作原理可以看这篇文章http://forum.doom9.org/showthread.php?t=109747(看楼主和akupenguin的回复)。
See Also: –no-deblock
slices
默认:0
说明:设置每帧的分片数,强制使用矩形分片。(会被–slice-max-size 或 –slice-max-mbs选项覆盖)
如果是在为蓝光光盘编码,设置为4。如果不是,不要使用这个选项,除非你确定你需要它。
参见:–slice-max-size, –slice-max-mbs
slice-max-size
默认:0
说明:设置每个分块包括NAL头的最大大小(bytes)。 (目前与 –interlaced选项不兼容)
参见:–slices
slice-max-mbs
默认:0
说明:设置每个分块包含的最大宏块数量。 (目前与 –interlaced选项不兼容)
参见:–slices
tff
说明:开启隔行编码并设置上半场在前。x264的隔行编码使用MBAFF,因此效率不如逐行扫描。所以,仅在需要在隔行显示的设备上显示时才开启这个选项(或是送给x264之前无法进行反隔行扫描)。这个选项会触发 –pic-struct开启。
bff
说明:开启隔行编码并设置下半场在前。更多信息同–tff。
constrained-intra
默认:无
说明:开启SVC编码的底层要求的强制帧内预测。选择每个人都无视SVC了,你也可以忽略这个设置。
pulldown
默认:none
说明:为你的输入流(逐行扫描的,固定帧率的)使用一组预设的“软性电视模式”。“软性电视模式”在HandBrake Wiki里面有很好的解释。可选的参数有:none、22、32、64、double、triple、euro。除了none之外的选项都会触发 –pic-struct开启。
fake-interlaced
默认:无
说明:把流标志为隔行的但不按隔行编码。用于编码25p和30p的蓝光兼容视频。
码率控制
qp
默认:无
说明:三种可选的码率控制方法之一。设置x264使用固定量化参数模式。给定的数量将被作为P帧的量化参数,I帧和B帧的量化参数由–ipratio and –pbratio参数进一步算出。QP模式适用固定的量化参数,这意味着最终的文件大小是不可知的(可以通过一些其他方法预测)。设置为0将产出无损的输出。相同视觉质量时,QP模式产出的文件比crf模式大。QP模式将关闭自适应量化器,因为它是固定QP的。
这个选项和 –bitrate和–crf是互斥的,三者只能选一个,它们背后的原理可以看这篇文章http://blog.yikuyiku.com/index.php/archives/1901。
一般而言crf都能代替QP模式,不过QP因为完全不需要预测所以它会运行地更快些。
参见:–bitrate, –crf, –ipratio, –pbratio
bitrate
默认:无
说明:三种可选的码率控制方法之二。设置x264使用固定目标比特率模式。固定目标比特率意味着最终文件的大小是可知的,但是目标的质量是不可知的。 x264会试图让最终文件的整体码率与给定的码率相等。参数的量纲为kilobits/sec(8bit = 1byte)。
通常这个选项和–pass选项配合进行2趟编码。
这个选项和 –qp和–crf是互斥的,三者只能选一个,它们背后的原理可以看这篇文章http://blog.yikuyiku.com/index.php/archives/1901。
参见:–qp, –crf, –ratetol, –pass, –stats
crf
默认:23.0
说明:三种可选的码率控制方法之二。固定ratefactor。QP是固定量化器,bitrate是固定文件大小,crf则是固定“质量”。crf可以提供跟QP一样的视觉的质量,但是文件更小。crf的单位是ratefactor。
crf是通过降低那些“不那么重要”的帧的质量做到这一切的。“不那么重要”意思是过于耗费码率又难以用肉眼察觉的帧,比如复杂或者超高速运行的场景。省下来的码率会用在其它更有效的帧里。
crf编码比2趟编码快,因为它相当于省略了第1趟编码。所以crf的最终码率也是不可预测的。你应该根据应用场景来选择码率控制方式。
这个选项和 –qp和–crf是互斥的,三者只能选一个,它们背后的原理可以看这篇文章http://blog.yikuyiku.com/index.php/archives/1901。
参见:–qp, –bitrate
rc-lookahead
默认:40
说明:为mb-tree ratecontrol(Macroblock Tree Ratecontrol)和vbv-lookahead设置可用的帧的数量。最大可设置为250。
对于mb-tree而言,调大这个值会得到更准确地结果,但也会更慢。mb-tree能使用的最大值是–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
vbv-maxrate
默认:0
说明:设置VBV(Video Buffering Verifier)可用的最大码率。使用VBV会降低视频质量,只在真正需要的才设定它。
参见:–vbv-bufsize, –vbv-init,http://mewiki.project357.com/wiki/X264_Encoding_Suggestions#VBV_Encoding
vbv-bufsize
默认:0
说明:设置VBV(Video Buffering Verifier)可用的最大缓冲区,单位是kilobits。使用VBV会降低视频质量,只在真正需要的才设定它。
参见:–vbv-maxsize, –vbv-init,http://mewiki.project357.com/wiki/X264_Encoding_Suggestions#VBV_Encoding
vbv-init
默认:0.9
说明:设置重放之前必须先载入多大的VBV缓冲。
如果值小于1,那么大小就为 vbv-init * vbv-bufsize。如果大于1,则是以kbits为单位的值。
参见:–vbv-maxsize, –vbv-bufsize,http://mewiki.project357.com/wiki/X264_Encoding_Suggestions#VBV_Encoding
crf-max
默认:无
说明:类似 –qp-max,但是设置的是最大的ratefactor值而不是量化参数。这个选项仅用于crf和vbv同时启用的时候。它阻止x264使用小于给定值的ratefactor(也就是“质量”),哪怕会违反vbv。一般用于流服务器。更多的信息请看http://git.videolan.org /gitweb.cgi/x264.git/?a=commit; h=81eee062a4ce9aae1eceb3befcae855c25e5ec52。
参见:–crf, –vbv-maxrate, –vbv-bufsize
qpmin
默认:10
说明:设置x264可以使用的最小量化器。量化参数越小,输出越接近输入。使用某些值时,x264的输出可以和输入看起来完全一样,虽然其实并不是精确相同的,通常就够了没有必要使用更多比特在宏块上了。
如果开启了自适应量化器(默认开启),则不鼓励提高qpmin的值,那样可能会降低帧的平坦部分的质量。
参见:–qpmax, –ipratio
qpmax
默认:51
说明:qpmin的反面,设置x264可以使用的最大量化器。默认值51是H.264标准中的最大值,质量非常低。默认值51其实相当于没有设置 qpmax。如果你想控制x264输出的最低品质,也许你想要把这个值调低一点(调到30-40最低了),但一般而言不推荐调节这个值。参见:–qpmin, –pbratio, –crf-max
qpstep
默认:4
说明:设置2帧间量化器最大的可变值。
ratetol
默认:1.0
说明:这个参数有2个可能的含义:
1、在1趟bitrate编码时,这个参数控制x264可以偏离给定的平均目标比特率的百分比。可以设置为inf完全关闭码率溢出侦测。最低可以设置为 0.01。较高的值可以让x264更好地处理影片结束部分的复杂场景。对于这个目的而言单位是百分比(1.0意味着允许1%的bitrate偏差)。
很多影片(比如说动作打斗片)在最后的片段里十分复杂。1趟编码并不知道哪里是最复杂的片断,往往到最后比特都已经用完了。把rateol设置为inf就能解决这个问题,它允许编码器用类似 –crf的方式工作,当然,文件大小会溢出。
2、当开启了vbv时(只要使用了任何–vbv-开头的选项就会开启),这个选项意味着vbv的强度。更高的值意味着允许更高的在设定的vbv值上下波动。在这个含义时,可以使用任意的度量单位。
ipratio
默认:1.40
说明:设置平均的I帧的量化器相比P帧量化器增值。更高的值意味着更高的I帧质量。
参见:–pbratio
pbratio
默认:1.30
说明:设置平均的B帧的量化器相比P帧量化器减值。更高的值意味着更低的B帧质量。开启mbtree(默认开启)选项时不可用,mbtree会自适应地计算B帧量化器。
参见:–ipratio
chroma-qp-offset
默认:0
说明:设置一个用于色度编码(译者按:视频使用YUI编码,人眼对于亮度更敏感)的量化器的偏移值。可以是负值。在开启 psy-rd或 psy-trellis时 x264会自动降低色度的量化参数用于补偿亮度的量化器,意味着色度质量会被降低。它们默认会在chroma-qp-offset的基础上减2。
注意:x264在量化器29时会为亮度和色度使用同样的量化器。往后,色度都会使用比亮度还好的量化器,最后,亮度达到q51时,色度的量化器是q39。这个是H.264标准中要求的做法。
aq-mode
默认:1
说明:自适应量化器模式。不使用自适应量化的话,x264趋向于使用较少的bit在缺乏细节的场景里。自适应量化可以在整个视频的宏块里更好地分配比特。它有以下选项:
0 —— 完全关闭自适应量化器
1 —— 允许自适应量化器在所有视频帧内部分配比特。
2 —— 根据前一帧强度决策的自变量化器(实验性的)。
参见: –aq-strength
aq-strength
默认:1.0
说明:自适应量化强度。设置自适应量化对于缺乏细节(平坦)的宏块的剥削程度。不允许负值。0.0 – 2.0之外的值不推荐。
参见:–aq-mode
pass
默认:无
说明:这对2趟编码是一个重要的选项。这个选项控制了x264如何处理 –stats指定的文件。它有三个选项。
1 —— 建立一个新的stats文件,用于第一趟编码。
2 —— 读取stats文件,用于最后一趟编码。
3 —— 读取stats文件,而且更新它。
stats文件包含了每个输入帧的信息,x264可以读取这些信息来改进输出。大概意思就是先跑一趟编码生成stats文件,然后第二趟编码就可以使用这个文件优化编码结果。视频质量会得到很大的提升,大部分原因是因为可以更好地进行比特分配。
参见:–stats, –bitrate, –slow-firstpass X264_statsfile
stats
默认:’x264_2pass.log’
说明:设置x264读取和写入的stats文件名
no-mbtree
默认:无
说明:关闭基于宏块树的比特控制(macroblock tree ratecontrol)。基于宏块树的比特控制通过持续监控宏块在帧间的运动和相对权重来提升视频质量。它会单独生成一个很大的stats文件。
建议值:保持默认
参见:–rc-lookahead
qcomp
默认:0.60
说明:量化器曲线压缩参数。0.0意味着恒定比特率,1.0意味着恒定量化器。如果开启了mbtree,这个选项会影响mbtree的强度(更高的值意味着更弱的mbtree)。
建议:保持默认
参见:–cplxblur, –qblur
cplxblur
默认:20
说明:把给定值作为高斯模糊的半径应用到量化曲线上。这意味着分配给每个帧的量化器会被它附近的帧的量化器平均掉,这样会达到限制量化器波动的效果。
参见:–qcomp, –qblur
qblur
默认:0.5
说明:在量化曲线压缩后,把给定值作为高斯模糊的半径应用到量化曲线上。这不是一个很重要的选项。
参见:–qcomp, –cplxblur
zones
默认:无
说明:调节视频的特殊片断。可以用它修改大多数x264选项。
一个单独的zone使用,,的形式表达。多个zone用’/’分隔。
选项:
以下2个选项,每个zone只能设置其中一个,此选项必须是zone列出来的第一个选项:
b= 使zone内的bitraye乘上给定的系数。在调整快速和慢速场景时很有用。
q= 使用zone内使用给定的量化器。在优化一个帧序列是很有用。
其他可用选项:
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=
限制:
一个zone的参照帧数量不能超过–ref定义的值。
如果Scenecut原本是关闭的,无法开启它。
–me如果原本被设置为–me esa/tesa则不能修改。
Subme如果原本被设置为0则不能修改。
如果–me被设置为dia, hex或umh,不能修改为–me esa/tesa。
例子:
0,1000,b=2/1001,2000,q=20,me=3,b-bias=-1000
建议值:保持默认
qpfile
说明:人工改变标准的码率控制方法。给定一个为特殊帧给定了量化器和帧类型的文件。格式是’帧序号 帧类型 量化器’。
例子:
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自行选择优化的量化器,
如果手工指定大量的帧类型和量化器之间间歇穿插着让x264自行决策的部分,则会降低x264的表现。
‘Keyframe’ 表示可以seek到的关键帧。如果–open-gop设置为none则意味着IDR帧,不然就意味着一个Non-IDR的标记为“发现点SEI”的I帧。
【 翻译 】x264参数介绍(二、分析和视频可用性信息)
2011年2月11日
评论 发表评论
翻译自:http://mewiki.project357.com/wiki/X264_Settings,水平有限,勿吝指教。
第一部分:http://blog.yikuyiku.com/?p=2029
分析
partitions
默认:’p8x8,b8x8,i8x8,i4x4′
说明:H.264在压缩前会被切分为16×16大小的宏块。这些块可被进一步切分成更小的块,利用此参数,可以控制不同的帧类型(I、P、B)开启更细的帧切分(8×8、4×4),具体参数如下:
I帧:i8x8、i4x4;
P帧:p8x8(会同时开启p16x8和p8x16)、p4x4(会同时开启p8x4和p4x8);
B帧:b8x8(会同时开启b18x8和b8x16);
另外,也可以设置为’none’和’all’。一般而言,开启p4x4不会带来多少的质量提升,而且它极其耗时,是个性价比比较低的选项。
参见:–no-8x8dct
direct
默认:’spatial’
说明:为’direct’类型的运动矢量设定预测模式。有两种可选的模式:spatial(空间预测)和temporal(时间预测)。可以设置为’none’关闭预测,也可以设置为’auto’让x264去选择它认为更好的模式,x264会在编码结束时告诉你它的选择。’auto’最好在2趟编码中使用,但也可以在1趟编码时使用。如果用于2趟编码,x264会在第1趟编吗时同时尝试2种预测模式,然后在第2趟编码时使用它认为较好的那一个。注意,如果第1趟编码时选择了’auto’,那么第2趟编码时也必须设置为’auto’。不然,第2趟编码会使用’temporal’。本选项从不会浪费比特,强烈推荐使用。
建议:’auto’
no-weightb
默认:无
说明:H.264允许给可参考B帧加上影响预测图像的权重,此选项会关闭此特性。
建议:保持默认
weightp
默认:2
说明:开启明确的权重预测以增进P帧压缩。越高级的模式越耗时,有以下模式:
0 —— 关闭
1 —— 静态补偿(永远为-1)
2 —— 智能统计静态帧,特别为增进淡入淡出效果的压缩率而设计。
注意:为Adobe Flash(版本低于10.1)编码时请把此值设为0,会导致解码时出现错误。Flash 10.1时此BUG得到修正。
me
默认:’hex’
说明:设置全局的运动预测方法,有以下5种选择:
dia(四边形搜索) —— 最简单的搜索,从最乐观的情况开始预测,在运动矢量的上下左右分别偏移一个像素对比,选择其中最好的,循环直至找不到更匹配的运动矢量。
hex(六边形搜索) —— 和菱形差不多的策略,不同的是,它在6边形的6个顶点上进行rang-2的搜索,它实现了比dia有效率地多的搜索而几乎不会使用更多的耗时,它是普通编码任务一个很好的选择。
umh(不均匀的多六边形搜索) —— 显著地比hex要慢,但它尝试进行复杂多六边形的搜索,以避免错过那些难以找到的运动矢量。与hex和dia不同的是,merange参数直接任意大小控制umh的搜索半径。
esa(全局搜索) —— 高度优化的全局智能搜索,在最佳预测器的merange范围内进行运动搜索。在全局面进行运动向量的算术对比,虽然计算过程并不慢,但好事仍比umh有显著提升,而且并不会带来太多质量方面的提升。所以,对于日常的编码任务来说,它不是特别有用。
tesa(变换全局搜索) —— 使用一种算法,效果近于对全局的每个运动矢量进行Hadamard 变换比对。搜索方式上和esa很像,但是效果比esa好一点点,耗时也多一点点。
参见:–merange
merange
默认:16
说明:merange控制运动搜索的最大像素范围。对于hex和dia,范围被控制在4-16像素,默认就是16。对于umh和esa,可以超过默认的 16像素进行大范围的运行搜索,这对高分辨率视频和快速运动视频而言很有用。注意,对于umh、esa、tesa,增大merange会显著地增加编码耗时。
参见:–me
mvrange
默认:-1(自动)
说明:设置垂直的运动矢量最大像素值。默认值如下:
level 1/1b —— 64
level 1.1-2.0 —— 128
level 2.1-3.0 —— 256
level 3.1+ —— 512
注意:如果打算手动设置此值,要在上面给出的值的基础上减去0.25(如:–mvrange 127.75),
建议:保持默认
mvrange-thread
默认:-1(自动)
说明:设置线程间运动矢量的缓冲区大小的最小值。不要碰这个选项。
建议:保持默认
subme
默认:7
说明:设置亚像素估计的复杂度。值越高越好。级别1-5简单控制亚像素的细化力度。级别6给模式决策开启RDO(码率失真优化模式),级别8给运动矢量和帧内预测模式开启RDO。开启RDO会显著增加耗时。
使用小于2的值会开启一个快速的、低质量的预测模式,效果如同设置了一个很小的 –scenecut值。不推荐这样设置。
可使用的值如下:
0 —— fullpel only
1 —— QPel SAD 1 iteration
2 —— QPel SATD 2 iterations
3 —— HPel on MB then QPel
4 —— Always QPel
5 —— Multi QPel + bi-directional motion estimation
6 —— RD on I/P frames
7 —— RD on all frames
8 —— RD refinement on I/P frames
9 —— RD refinement on all frames
10 —— QP-RD (requires –trellis=2, –aq-mode > 0)
建议:保持默认,或设置为更高,除非对速度十分敏感。
subq
–subme的别名
psy-rd
默认:1.0:0.0
说明:第1个数字是psy-RDO的强度(subme大于等于6时激活)。第2个数字是Psy-Trellis的强度(subme大于等于1时激活)。注意Trellis的特性仍是’实验性’的,至少对于动画视频来说,它总是会坏事的。
关于psy-rd的更详尽解释可以参见doom9的这篇文章:http://forum.doom9.org/showthread.php?t=138293。
no-psy
默认:无
说明:关闭全部为了心理视觉而降低psnr或ssim的优化。此选项同时也会关闭一些不能通过x264命令行设置的内部的心理视觉优化方法。
建议:保持默认
no-mixed-refs
默认:无
说明:Mixed refs(混合参照)会以8×8的切块为参照取代以整个宏块为参照。会增进多帧参照的帧的质量,会有一些时间耗用。此选项将禁用这个特性。
建议:保持默认
参见:–ref
no-chroma-me
默认:无
说明:通常运动估计都会同时考虑亮度和色度因素。开启此选项将会忽略色度因素换取一些速度的提升。
建议:保持默认
no-8x8dct
默认:无
说明:自适应的8×8 DCT会在I帧中开启更智能的自适应8×8的时域变换。开启此选项可以禁用这个特性。(译者按:此选项是将H.264的Profile从High降为Main的重要参数)
建议:保持默认
trellis
默认:1
说明:使用网格编码量化以增进编码效率:
0 —— 关闭
1 —— 仅在宏块最终编码时启用
2 —— 所有模式下均启用
选项1提供了速度和效率间较好的均衡,选项2大幅降低速度。
关于网格编码量化的更详尽解释可以参见:http://en.wikipedia.org/wiki/Trellis_quantization。
建议:保持默认
注意:需要开启 –cabac选项生效
no-fast-pskip
默认:无
说明:关闭P帧的早期跳过决策。大量的时耗换回非常小的质量提升。
建议:保持默认
no-dct-decimate
默认:无
说明:DCT抽样会丢弃看上去“多余”的DCT块。会增加编码效率,通常质量损失可以忽略。此选项关闭此特性。
建议:保持默认
nr
默认:无
说明:执行快速去噪。以此值为阈值确定噪音,通过在量化前丢失小细节的方式尝试去除噪音。效果可能不如优秀的外部去造滤镜,但它执行地非常快。
建议:保持默认或者设置为100-1000用以去噪。
deadzone-inter/intra
默认:无
说明:设置帧间/帧内的亮度量化器输出为0的区域大小。输出为0的区域可以设置为0-32,这个值设置的是x264毫不尝试保护直接丢弃的精密细节。十分精细的细节既难以发觉,编码代价又昂贵,直接丢弃它们可以避免在这些低回报的部分浪费比特。此选项和Trellis选项是互不相容的。
建议:保持默认
cqm
默认:Flat(没设置)
说明:设置自定义的量化矩阵取代内建的内建值。内建值有flast或JVT。
建议:保持默认
参见:–cqmfile
cqmfile
默认:无
说明:使用一个JM格式矩阵文件设置自定义的量化矩阵。会覆盖其他的 –cqm*选项们。
建议:保持默认
参见:–cqm
cqm4* / cqm 8*
默认:无
–cqm4: 设置所有4×4块的量化矩阵,以由16个逗号分隔值域为1-255的值组成的列表的形式给出。
–cqm8: 设置所有8×8块的量化矩阵,以由64个逗号分隔值域为1-255的值组成的列表的形式给出。
–cqm4i, –cqm4p, –cqm8i, –cqm8p: 同时设置色度和亮度(i为帧内、p为帧间)矩阵
–cqm4iy, –cqm4ic, –cqm4py, –cqm4pc: 设置色度或亮度矩阵(y为亮度、c为色度)。这样的参数cqm8也有同样的4个。
建议:保持默认
视频可用性信息
这些参数为解码的程序设置一个可用标记。由于经常被解码软件所忽略,在大多数场景中这些参数都没什么意义,
overscan
默认:undef
说明:如何处理过扫描。过扫描在这里用于只显示图像的一部分。(译者按:过扫描技术本用在阴极射线管显示器中为保持画面完整。)
可选:
undef – 不定义
show – 显示全部图像。理论上此值应该被解码器重视。
crop – 视频已经为过扫描显示器做过处理。可以不重视。
建议:如果你的设备支持此选项,建议在编码之前对视频进行裁剪然后设置为show。如果不支持就别管此选项了。
videoformat
默认:undef
说明:表明此视频在 编码/数字化 之前是什么格式的。
可选:
component
pal
ntsc
secam
mac
undef
建议:设为原视频的格式,或者设为undef。
fullrange
默认:off
说明:表明亮度和色度级别是否是全范围的(译者按:0-255)。如果设为off,则不会使用全范围(译者按:16-235)。
进一步的说明可参见http://blog.yikuyiku.com/?p=2015和http://en.wikipedia.org/wiki/YCbCr。
建议:如果视频源是从模拟视频数字化而来的,设为off。否则则设置为on。
colorprim
默认:undef
说明:设置转换到RGB的原色。
可选:
undef
bt709
bt470m
bt470bg
smpte170m
smpte240m
film
进一步的说明可参见http://en.wikipedia.org/wiki/YCrCb和http://en.wikipedia.org/wiki/RGB_color_spaces。
建议:保持默认,除非你知道你的源用的是哪个值。
transfer
默认:undef
说明:设置光电转换器使用的特性。(设置用于修正的gamma曲线。)
可选:
undef
bt709
bt470m
bt470bg
linear
log100
log316
smpte170m
smpte240m
进一步的说明可参见http://en.wikipedia.org/wiki/Gamma_correction。
建议:保持默认,除非你知道你的源用的是哪个值。
colormatrix
默认:undef
说明:设置用于从RGB原色中提取亮度和色度的矩阵系数。
可选:
undef
bt709
fcc
bt470bg
smpte170m
smpte240m
GBR
YCgCo
进一步的说明可参见http://en.wikipedia.org/wiki/YCrCb。
建议:源使用的值,或者保持默认。
chromaloc
默认:0
说明:设置色度取样位置。(H.264标准的附件E中定义)。取值范围为0-5。
进一步的说明可参见http://git.videolan.org/?p=x264.git;a=blob;f=doc/vui.txt
建议:
如果你以MPEG1源为输入做4:2:0采样的转码,而且没作任何色彩空间转换,应该设置为1;
如果你以MPEG2源为输入做4:2:0采样的转码,而且没作任何色彩空间转换,应该设置为0;
如果你以MPEG4源为输入做4:2:0采样的转码,而且没作任何色彩空间转换,应该设置为0;
其他情况保持默认。
nal-hrd
默认:none
说明:设置HRD信息。用于蓝光流、电视广播和其他一些特殊场合。可用选项如下:
none —— 不设置HRD信息
vbr —— 设置HRD信息
cbr —— 设置HRD信息,而且把流限制在bitrate参数定义的码率内。需要bitrate码率控制方式。
建议:none,除非你需要设置HRD。
参见:–vbv-bufsize, –vbv-maxrate和 –aud
pic-struct
默认:无
说明:强制按照图像时序SEI传送pic_struct。使用–pulldown或 –tff或–bff参数时会隐式启用。
建议:保持默认
X264设定
出自NMM Doc
跳转到: 导航, 搜索
目录
[隐藏]
1 x264设定
1.1 说明
1.2 输入
1.3 默认
1.3.1 profile
1.3.2 preset
1.3.3 tune
1.3.4 slow-firstpass
1.4 帧类型选项
1.4.1 keyint
1.4.2 min-keyint
1.4.3 no-scenecut
1.4.4 scenecut
1.4.5 intra-refresh
1.4.6 bframes
1.4.7 b-adapt
1.4.8 b-bias
1.4.9 b-pyramid
1.4.10 open-gop
1.4.11 no-cabac
1.4.12 ref
1.4.13 no-deblock
1.4.14 deblock
1.4.15 slices
1.4.16 slice-max-size
1.4.17 slice-max-mbs
1.4.18 tff
1.4.19 bff
1.4.20 constrained-intra
1.4.21 pulldown
1.4.22 fake-interlaced
1.5 速率控制
1.5.1 qp
1.5.2 bitrate
1.5.3 crf
1.5.4 rc-lookahead
1.5.5 vbv-maxrate
1.5.6 vbv-bufsize
1.5.7 vbv-init
1.5.8 crf-max
1.5.9 qpmin
1.5.10 qpmax
1.5.11 qpstep
1.5.12 ratetol
1.5.13 ipratio
1.5.14 pbratio
1.5.15 chroma-qp-offset
1.5.16 aq-mode
1.5.17 aq-strength
1.5.18 pass
1.5.19 stats
1.5.20 no-mbtree
1.5.21 qcomp
1.5.22 cplxblur
1.5.23 qblur
1.5.24 zones
1.5.25 qpfile
1.6 分析
1.6.1 partitions
1.6.2 direct
1.6.3 no-weightb
1.6.4 weightp
1.6.5 me
1.6.6 merange
1.6.7 mvrange
1.6.8 mvrange-thread
1.6.9 subme
1.6.10 psy-rd
1.6.11 no-psy
1.6.12 no-mixed-refs
1.6.13 no-chroma-me
1.6.14 no-8x8dct
1.6.15 trellis
本页说明所有x264参数之目的和用法。参数的排列相同于在x264 –fullhelp出现的顺序。
参阅:X264统计资料输出、X264统计资料档案和X264编码建议。
x264设定
说明
x264带有一些内置的文件。要阅读此说明,执行x264 –help、x264 –longhelp或x264 –fullhelp。越后面的选项会提供越详细的资讯。
输入
以一个位置引数指定输入的视讯。例如:
x264.exe –output NUL C:\input.avs x264 –output /dev/null ~/input.y4m
当输入是raw YUV格式时,还必须告知x264视讯的分辨率。你可能也要使用–fps来指定帧率:
x264.exe –output NUL –fps 25 –input-res 1280x720 D:\input.yuv x264 –output /dev/null –fps 30000/1001 –input-res 640x480 ~/input.yuv
默认
为了减少使用者花费时间和精力在命令列上而设计的一套系统。这些设定切换了哪些选项可以从x264 –fullhelp的说明里得知。
profile
默认值:无
限制输出资料流的profile。如果指定了profile,它会覆写所有其他的设定。所以如果指定了profile,将会保证得到一个相容的资料流。如果设了此选项,将会无法使用无失真(lossless)编码(–qp 0或–crf 0)。
如果播放设备仅支援某个profile,则应该设此选项。大多数解码器都支援High profile,所以没有设定的必要。
可用的值:baseline, main, high
preset
默认值:medium
变更选项,以权衡压缩效率和编码速度。如果指定了默认,变更的选项将会在套用所有其他的参数前套用。
通常应该将此设为所能忍受的最慢一个选项。
可用的值:ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo
tune
默认值:无
调整选项,以进一步最佳化为视讯的内容。如果指定了tune,变更的选项将会在–preset之后,但所有其他的参数之前套用。
如果视讯的内容符合其中一个可用的调整值,则可以使用此选项,否则不要使用。
可用的值:film, animation, grain, stillimage, psnr, ssim, fastdecode, zerolatency
slow-firstpass
默认值:无
使用–pass 1会在解析命令列的最后套用以下设定:
–ref 1
–no-8x8dct
–partitions i4x4 (如果最初有启用,否则为无)
–me dia
–subme MIN(2, subme)
–trellis 0
可以使用–slow-firstpass来停用此功能。注意,使用–preset placebo也会启用slow-firstpass。
参阅:–pass
帧类型选项
keyint
默认值:250
设定x264输出的资料流之最大IDR帧(亦称为关键帧)间隔。可以指定infinite让x264永远不要插入非场景变更的IDR帧。
IDR帧是资料流的“分隔符号”,所有帧都无法从IDR帧的另一边参照资料。因此,IDR帧也是I帧,所以它们不从任何其他帧参照资料。这意味着它们可以用作视讯的搜寻点(seek points)。
注意,I帧通常明显大于P/B帧(在低动态场景通常为10倍大或更多),所以当它们与极低的VBV设定合并使用时会打乱速率控制。在这些情况下,研究–intra-refresh。
默认值对于大多数视讯没啥问题。在为蓝光、广播、即时资料流或某些其他特殊情况编码时,可能需要更小的GOP长度(通常等于帧率)。
参阅:–min-keyint, –scenecut, –intra-refresh
min-keyint
默认值:自动 (MIN(–keyint / 10, –fps))
设定IDR帧之间的最小长度。
IDR帧的说明可以参阅–keyint。过小的keyint范围会导致“不正确的”IDR帧位置(例如闪屏场景)。此选项限制在每个IDR帧之后,要有多少帧才可以再有另一个IDR帧的最小长度。
min-keyint的最大允许值是–keyint/2+1。
建议:默认值,或者等于帧率
参阅:–keyint, –scenecut
no-scenecut
默认值:无
完全停用弹性I帧决策(adaptive I-frame decision)。
参阅:–scenecut
scenecut
默认值:40
设定I/IDR帧位置的阈值(场景变更侦测)。
x264为每一帧计算一个度量值,来估计与前一帧的不同程度。如果该值低于scenecut,则算侦测到一个“场景变更”。如果此时与最近一个IDR帧的距离低于–min-keyint,则放置一个I帧,否则放置一个IDR帧。越大的scenecut值会增加侦测到场景变更的数目。场景变更是如何比较的详细资讯可以参阅http://forum.doom9.org/showthread.php?t=121116。
将scenecut设为0相当于设定–no-scenecut。
建议:默认值
参阅:–keyint, –min-keyint, –no-scenecut
intra-refresh
默认值:无
停用IDR帧,作为替代x264会为每隔–keyint的 帧的每个宏区块(macroblock)使用内部编码(intra coding)。区块是以一个水平卷动的行刷新,称为刷新波(refresh wave)。这有利于低延迟的资料流,使它有可能比标准的IDR帧达到更加固定的帧大小。它也增强了视讯资料流对封包遗失的恢复能力。此选项会降低压缩效率,因此必要时才使用。
有趣的事:
第一帧仍然是IDR帧。
内部区块(Intra-blocks)仅处于P帧里,刷新波在一或多个B帧后的第一个P帧更广泛。
压缩效率的损失主要来自于在刷新波上左侧(新)的宏区块无法参照右侧(旧)的资料。
bframes
默认值:3
设定x264可以使用的最大并行B帧数。
没有B帧时,一个典型的x264资料流有着像这样的帧类型:IPPPPP…PI。当设了–bframes 2时,最多两个连续的P帧可以被B帧取代,就像:IBPBBPBPPPB…PI。
B帧类似于P帧,除了B帧还能从它之后的帧做动态预测(motion prediction)。就压缩比来说效率会大幅提高。它们的平均品质是由–pbratio所控制。
有趣的事:
x264还区分两种不同种类的B帧。”B”是代表一个被其他帧作为参照帧的B帧(参阅–b-pyramid),而”b”则代表一个不被其他帧作为参照帧的B帧。如果看到一段混合的”B”和”b”,原因通常与上述有关。当差别并不重要时,通常就以”B”代表所有B帧。
x264是如何为每个候选帧选定为P帧或B帧的详细资讯可以参阅http://article.gmane.org/gmane.comp.video.ffmpeg.devel/29064。在此情况下,帧类型看起来会像这样(假设–bframes 3):IBBBPBBBPBPI。
参阅:–b-bias, –b-pyramid, –ref, –pbratio, –partitions, –weightb
b-adapt
默认值:1
设定弹性B帧位置决策算法。此设定控制x264如何决定要放置P帧或B帧。
0:停用,总是挑选B帧。这与旧的no-b-adapt设定相同作用。
1:“快速”算法,较快,越大的–bframes值会稍微提高速度。当使用此模式时,基本上建议搭配–bframes 16使用。
2:“最佳”算法,较慢,越大的–bframes值会大幅降低速度。
注意:对于多重阶段(multi-pass)编码,仅在第一阶段(first pass)才需要此选项,因为帧类型在此时已经决定完了。
b-bias
默认值:0
控制使用B帧而不使用P帧的可能性。大于0的值增加偏向B帧的加权,而小于0的值则相反。范围是从-100到100。100并不保证全是B帧(要全是B帧该使用–b-adapt 0),而-100也不保证全是P帧。
仅在你认为能比x264做出更好的速率控制决策时才使用此选项。
参阅:–bframes, –ipratio
b-pyramid
默认值:normal
允许B帧作为其他帧的参照帧。没有此设定时,帧只能参照I/P帧。虽然I/P帧因其较高的品质作为参照帧更有价值,但B帧也是很有用的。作为参照帧的B帧会得到一个介于P帧和普通B帧之间的量化值。b-pyramid需要至少两个以上的–bframes才会运作。
如果是在为蓝光编码,须使用none或strict。
none:不允许B帧作为参照帧。
strict:每minigop允许一个B帧作为参照帧,这是蓝光标准强制执行的限制。
normal:每minigop允许多个B帧作为参照帧。
参阅:–bframes, –refs, –no-mixed-refs
open-gop
默认值:none
open-gop是一个提高效率的编码技术。有三种模式:
none:停用open-gop。
normal:启用open-gop。
bluray:启用open-gop。一个效率较低的open-gop版本,因为normal模式无法用于蓝光编码。
某些解码器不完全支援open-gop资料流,这就是为什么此选项并未默认为启用。如果想启用open-gop,应该先测试所有可能用来拨放的解码器。
open-gop的说明可以参阅http://forum.doom9.org/showthread.php?p=1300124#post1300124。
no-cabac
默认值:无
停用弹性内容的二进制算数编码(CABAC:Context Adaptive Binary Arithmetic Coder)资料流压缩,切换回效率较低的弹性内容的可变长度编码(CAVLC:Context Adaptive Variable Length Coder)系统。大幅降低压缩效率(通常10~20%)和解码的硬件需求。
ref
默认值:3
控制解码图片缓冲(DPB:Decoded Picture Buffer)的大小。范围是从0到16。总之,此值是每个P帧可以使用先前多少帧作为参照帧的数目(B帧可以使用的数目要少一或两个,取决于它们是否作为参照帧)。可以被参照的最小ref数是1。
还要注意的是,H.264规格限制了每个level的DPB大小。如果遵守Level 4.1规格,720p和1080p视讯的最大ref数分别是9和4。
参阅:–b-pyramid, –no-mixed-refs, –level
no-deblock
默认值:无
完全停用loop滤镜。不建议。
参阅:–deblock
deblock
默认值:0:0
控制loop滤镜(亦称为inloop deblocker),这是H.264标准的一部分。就性价比来说非常有效率。
可以在http://forum.doom9.org/showthread.php?t=109747找到loop滤镜的参数是如何运作的说明(参阅第一个帖子和akupenguin的回复)。
参阅:–no-deblock
slices
默认值:0
设定每帧的切片数,而且强制为矩形切片(会被–slice-max-size或–slice-max-mbs覆写)。
如果是在为蓝光编码,将值设为4。否则,不要使用此选项,除非你知道真的有必要。
参阅:–slice-max-size, –slice-max-mbs
slice-max-size
默认值:0
设定最大的切片大小(单位是字节),包括估计的NAL额外负荷(overhead)。(目前与–interlaced不相容)
参阅:–slices
slice-max-mbs
默认值:0
设定最大的切片大小(单位是宏区块)。(目前与–interlaced不相容)
参阅:–slices
tff
启用交错式编码并指定顶场优先(top field first)。x264的交错式编码使用MBAFF,本身效率比渐进式编码差。出于此原因,仅在打算于交错式显示器上播放此视讯时,才应该编码为交错式(或者视讯在送给x264之前无法进行去交错)。此选项会自动启用–pic-struct。
bff
启用交错式编码并指定底场优先(bottom field first)。详细资讯可以参阅–tff。
constrained-intra
默认值:无
启用限制的内部预测(constrained intra prediction),这是SVC编码的基础层(base layer)所需要的。由于EveryoneTM忽略SVC,你同样可以忽略此选项。
pulldown
默认值:none
使用其中一个默认模式将渐进式、固定帧率的输入资料流标志上软胶卷过带(soft telecine)。软胶卷过带在http://trac.handbrake.fr/wiki/Telecine有更详细的解释。
可用的默认:none, 22, 32, 64, double, triple, euro
指定除了none以外的任一模式会自动启用–pic-struct。
fake-interlaced
默认值:无
将资料流标记为交错式,即使它并未以交错式来编码。用于编码25p和30p为符合蓝光标准的视讯。
速率控制
qp
默认值:无
三种速率控制方法之一。设定x264以固定量化值(Constant Quantizer)模式来编码视讯。这里给的值是指定P帧的量化值。I帧和B帧的量化值则是衍生自–ipratio和–pbratio。CQ模式把某个量化值作为目标,这意味着最终档案大小是未知的(虽然可以透过一些方法来准确地估计)。将值设为0会产生无失真输出。对于相同视觉品质,qp会比–crf产生更大的档案。qp模式也会停用弹性量化,因为按照定义“固定量化值”意味着没有弹性量化。
此选项与–bitrate和–crf互斥。各种速率控制系统的详细资讯可以参阅http://git.videolan.org/?p=x264.git;a=blob_plain;f=doc/ratecontrol.txt;hb=HEAD。
虽然qp不需要lookahead来执行因此速度较快,但通常应该改用–crf。
参阅:–bitrate, –crf, –ipratio, –pbratio
bitrate
默认值:无
三种速率控制方法之二。以目标位元速率(target bitrate)模式来编码视讯。目标位元速率模式意味着最终档案大小是已知的,但最终品质则未知。x264会尝试把给定的位元速率作为整体平均值来编码视讯。此参数的单位是千位元/秒(8位元=1字节)。注意,1千位元(kilobit)是1000位元,而不是1024位元。
此设定通常与–pass在两阶段(two-pass)编码一起使用。
此选项与–qp和–crf互斥。各种速率控制系统的详细资讯可以参阅http://git.videolan.org/?p=x264.git;a=blob_plain;f=doc/ratecontrol.txt;hb=HEAD。
参阅:–qp, –crf, –ratetol, –pass, –stats
crf
默认值:23.0
最后一种速率控制方法:固定速率系数(Constant Ratefactor)。当qp是把某个量化值作为目标,而bitrate是把某个档案大小作为目标时,crf则是把某个“品质”作为目标。构想是让crf n提供的视觉品质与qp n相同,只是档案更小一点。crf值的度量单位是“速率系数(ratefactor)”。
CRF是借由降低“较不重要”的帧之品质来达到此目的。在此情况下,“较不重要”是指在复杂或高动态场景的帧,其品质不是很耗费位元数就是不易察觉,所以会提高它们的量化值。从这些帧里所节省下来的位元数被重新分配到可以更有效利用的帧。
CRF花费的时间会比两阶段编码少,因为两阶段编码中的“第一阶段”被略过了。另一方面,要预测CRF编码的最终位元速率是不可能的。根据情况哪种速率控制模式更好是由你来决定。
此选项与–qp和–bitrate互斥。各种速率控制系统的详细资讯可以参阅http://git.videolan.org/?p=x264.git;a=blob_plain;f=doc/ratecontrol.txt;hb=HEAD。
参阅:–qp, –bitrate
rc-lookahead
默认值:40
设定mb-tree速率控制和vbv-lookahead使用的帧数。最大允许值是250。
对于mb-tree部分,增加帧数带来更好的效果但也会更慢。mb-tree使用的最大缓冲值是MIN(rc-lookahead, –keyint)。
对于vbv-lookahead部分,当使用vbv时,增加帧数带来更好的稳定性和准确度。vbv-lookahead使用的最大值是:
MIN(rc-lookahead, MAX(–keyint, MAX(–vbv-maxrate, –bitrate) / –vbv-bufsize * –fps))
参阅:–no-mbtree, –vbv-bufsize, –vbv-maxrate
vbv-maxrate
默认值:0
设定重新填满VBV缓冲的最大速率。
VBV会降低品质,所以必要时才使用。
参阅:–vbv-bufsize, –vbv-init, VBV编码建议
vbv-bufsize
默认值:0
设定VBV缓冲的大小(单位是千位元)。
VBV会降低品质,所以必要时才使用。
参阅:–vbv-maxsize, –vbv-init, VBV编码建议
vbv-init
默认值:0.9
设定VBV缓冲必须填满多少才会开始播放。
如果值小于1,初始的填满量是:vbv-init * vbv-bufsize。否则该值即是初始的填满量(单位是千位元)。
参阅:–vbv-maxsize, –vbv-bufsize, VBV编码建议
crf-max
默认值:无
一个类似–qpmax的设定,除了指定的是最大速率系数而非最大量化值。当使用–crf且启用VBV时,此选项才会运作。它阻止x264降低速率系数(亦称为“品质”)到低于给定的值,即使这样做会违反VBV的条件约束。此设定主要适用于自订资料流服务器。详细资讯可以参阅http://git.videolan.org/gitweb.cgi/x264.git/?a=commit;h=81eee062a4ce9aae1eceb3befcae855c25e5ec52。
参阅:–crf, –vbv-maxrate, –vbv-bufsize
qpmin
默认值:10
定义x264可以使用的最小量化值。量化值越小,输出就越接近输入。到了一定的值,x264的输出看起来会跟输入一样,即使它并不完全相同。通常没有理由允许x264花费比这更多的位元数在任何特定的宏区块上。
当弹性量化启用时(默认启用),不建议提高qpmin,因为这会降低帧里面平面背景区域的品质。
参阅:–qpmax, –ipratio
qpmax
默认值:51
定义x264可以使用的最大量化值。默认值51是H.264规格可供使用的最大量化值,而且品质极低。此默认值有效地停用了qpmax。如果想要限制x264可以输出的最低品质,可以将此值设小一点(通常30~40),但通常并不建议调整此值。
参阅:–qpmin, –pbratio, –crf-max
qpstep
默认值:4
设定两帧之间量化值的最大变更幅度。
ratetol
默认值:1.0
此参数有两个目的:
在一阶段位元速率编码时,此设定控制x264可以偏离目标平均位元速率的百分比。可以指定inf来完全停用溢出侦测(overflow detection)。可以设定的最小值是0.01。值设得越大,x264可以对接近电影结尾的复杂场景作出越好的反应。此目的的度量单位是百分比(例如,1.0等于允许1%的位元速率偏差)。
很多电影(例如动作片)在电影结尾时是最复杂的。因为一阶段编码并不知道这一点,结尾所需的位元数通常被低估。将ratetol设为inf可以减轻此情况,借由允许编码以更像–crf的模式运行,但档案大小将会暴增。
当VBV启用时(即指定了–vbv-开头的选项),此设定也会影响VBV的强度。值设得越大,允许VBV在冒着可能违反VBV设定的风险下有越大的波动。
ipratio
默认值:1.40
修改I帧量化值相比P帧量化值的目标平均增量。越大的值会提高I帧的品质。
参阅:–pbratio
pbratio
默认值:1.30
修改B帧量化值相比P帧量化值的目标平均减量。越大的值会降低B帧的品质。当mbtree启用时(默认启用),此设定无作用,mbtree会自动计算最佳值。
参阅:–ipratio
chroma-qp-offset
默认值:0
在编码时增加色度平面量化值的偏移。偏移可以为负数。
当使用psy-rd或psy-trellis时,x264自动降低此值来提高亮度的品质,其后降低色度的品质。这些设定的默认值会使chroma-qp-offset再减去2。
注意:x264仅在同一量化值编码亮度平面和色度平面,直到量化值29。在此之后,色度逐步以比亮度低的量被量化,直到亮度在q51和色度在q39为止。此行为是由H.264标准所要求。
aq-mode
默认值:1
弹性量化模式。没有AQ时,x264很容易分配不足的位元数到细节较少的部分。AQ是用来更好地分配视讯里所有宏区块之间的可用位元数。此设定变更AQ会重新分配位元数到哪个范围里:
0:完全不使用AQ。
1:允许AQ重新分配位元数到整个视讯和帧内。
2:自动变化(Auto-variance)AQ,会尝试对每帧调整强度。(实验性的)
参阅:–aq-strength
aq-strength
默认值:1.0
弹性量化强度。设定AQ偏向低细节(平面)的宏区块之强度。不允许为负数。0.0~2.0以外的值不建议。
参阅:–aq-mode
pass
默认值:无
此为两阶段编码的一个重要设定。它控制x264如何处理–stats档案。有三种设定:
1:建立一个新的统计资料档案。在第一阶段使用此选项。
2:读取统计资料档案。在最终阶段使用此选项。
3:读取统计资料档案并更新。
统计资料档案包含每个输入帧的资讯,可以输入到x264以改进输出。构想是执行第一阶段来产生统计资料档案,然后第二阶段将建立一个最佳化的视讯编码。改进的地方主要是从更好的速率控制中获益。
参阅:–stats, –bitrate, –slow-firstpass, X264统计资料档案
stats
默认值:”x264_2pass.log”
设定x264读取和写入统计资料档案的位置。
参阅:–pass, X264统计资料档案
no-mbtree
默认值:无
停用宏区块树(macroblock tree)速率控制。使用宏区块树速率控制会改进整体压缩率,借由追踪跨帧的时间传播(temporal propagation)然后相应地加权。除了已经存在的统计资料档案之外,多重阶段编码还需要一个新的统计资料档案。
建议:默认值
参阅:–rc-lookahead
qcomp
默认值:0.60
量化值曲线压缩系数。0.0是固定位元速率,1.0则是固定量化值。
当mbtree启用时,它会影响mbtree的强度(qcomp越大,mbtree越弱)。
建议:默认值
参阅:–cplxblur, –qblur
cplxblur
默认值:20
以给定的半径范围套用高斯模糊(gaussian blur)于量化值曲线。这意味着分配给每个帧的量化值会被它的邻近帧模糊掉,以此来限制量化值波动。
参阅:–qcomp, –qblur
qblur
默认值:0.5
在曲线压缩之后,以给定的半径范围套用高斯模糊于量化值曲线。不怎么重要的设定。
参阅:–qcomp, –cplxblur
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=<字串>
限制:
一个区段的参照帧数无法超过–ref所指定的大小。
无法开启或关闭scenecut;如果–scenecut最初为开启(>0),则只能改变scenecut的大小。
如果使用–me esa/tesa,merange无法超过最初所指定的大小。
如果–subme最初指定为0,则无法变更subme。
如果–me最初指定为dia、hex或umh,则无法将me设为esa为tesa。
范例:0,1000,b=2/1001,2000,q=20,me=3,b-bias=-1000
建议:默认值
qpfile
手动覆写标准的速率控制。指定一个档案,为指定的帧赋予量化值和帧类型。格式为“帧号 帧类型 量化值”。例如:
0 I 18 < IDR (key) I-frame 1 P 18 < P-frame 2 B 18 < Referenced B-frame 3 i 18 < Non-IDR (non-key) I-frame 4 b 18 < Non-referenced B-frame 5 K 18 < Keyframe*
不需要指定每个帧。
使用-1作为所需的量化值允许x264自行选择最佳的量化值,在只需设定帧类型时很有用。
在指定了大量的帧类型和量化值时仍然让x264间歇地自行选择,会降低x264的效能。
“Keyframe”是一个泛用关键帧/搜寻点,如果–open-gop是none则等同于一个IDR I帧,否则等同于一个加上Recovery Point SEI标帜的Non-IDR I帧。
分析
partitions
默认值:p8x8,b8x8,i8x8,i4x4
H.264视讯在压缩过程中划分为16x16的宏区块。这些区块可以进一步划分为更小的分割,这就是此选项要控制的部分。
此选项可以启用个别分割。分割依不同帧类型启用。
可用的分割:p8x8, p4x4, b8x8, i8x8, i4x4, none, all
I:i8x8、i4x4。
P:p8x8(也会启用p16x8/p8x16)、p4x4(也会启用p8x4/p4x8)。
B:b8x8(也会启用b16x8/b8x16)。
p4x4通常不怎么有用,而且性价比极低。
参阅:–no-8x8dct
direct
默认值:spatial
设定”direct”动态向量(motion vectors)的预测模式。有两种模式可用:spatial和temporal。可以指定none来停用direct动态向量,和指定auto来允许x264在两者之间切换为适合的模式。如果设为auto,x264会在编码结束时输出使用情况的资讯。auto最适合用于两阶段编码,但也可用于一阶段编码。在第一阶段auto模式,x264持续记录每个方法执行到目前为止的好坏,然后从该记录挑选下一个预测模式。注意,仅在第一阶段有指定auto时,才应该在第二阶段指定auto;如果第一阶段不是指定auto,第二阶段将会默认为temporal。none模式会浪费位元数,因此强烈不建议。
建议:auto
no-weightb
默认值:无
H.264允许“加权”B帧的参照,它允许变更每个参照影响预测图片的程度。此选项停用该功能。
建议:默认值
weightp
默认值:2
使x264能够使用明确加权预测(explicit weighted prediction)来改进P帧的压缩。模式越高越慢。
注意:在为Adobe Flash编码时,将值设为0,否则它的解码器会产生不自然痕迹(artifacts)。Flash 10.1修正了此bug。
模式:
0:停用。
1:盲目偏移(固定-1的偏移)。
2:智慧重复帧分析,特别设计为改进淡入/淡出的压缩。
me
默认值:hex
设定全像素(full-pixel)动态估算(motion estimation)的方法。有五个选项:
dia(diamond):最简单的搜寻方法,起始于最佳预测器(predictor),检查上、左、下、右方一个像素的动态向量,挑选其中最好的一个,然后重复此过程,直到它不再找到任何更好的动态向量为止。
hex(hexagon):由类似策略组成,除了它使用周围6点范围为2的搜寻,因此叫做六边形。它比dia更有效率且几乎没有变慢,因此作为一般用途的编码是个不错的选择。
umh(uneven multi-hex):比hex更慢,但搜寻复杂的多六边形图样以避免遗漏难以找到的动态向量。不像hex和dia,merange参数直接控制umh的搜寻半径,允许增加或减少广域搜寻的大小。
esa(exhaustive):一种在merange内整个动态搜寻空间的高度最佳化智慧搜寻。虽然速度较快,但数学上相当于搜寻该区域每个单一动态向量的暴力(bruteforce)方法。不过,它仍然比UMH还要慢,而且没有带来很大的好处,所以对于日常的编码不是特别有用。
tesa(transformed exhaustive):一种尝试接近在每个动态向量执行Hadamard转换法(transform)比较的效果之算法,就像exhaustive,但效果好一点而速度慢一点。
参阅:–merange
merange
默认值:16
merange控制动态搜寻的最大范围(单位是像素)。对于hex和dia,范围限制在4~16。对于umh和esa,它可以增加到超过默认值16来允许范围更广的动态搜寻,对于HD视讯和高动态镜头很有用。注意,对于umh、esa和tesa,增加merange会大幅减慢编码速度。
参阅:–me
mvrange
默认值:-1 (自动)
设定动态向量的最大(垂直)范围(单位是像素)。默认值依level不同:
Level 1/1b:64。
Level 1.1~2.0:128。
Level 2.1~3.0:256。
Level 3.1+:512。
注意:如果想要手动覆写mvrange,在设定时从上述值减去0.25(例如–mvrange 127.75)。
建议:默认值
mvrange-thread
默认值:-1 (自动)
设定执行绪之间的最小动态向量缓冲。不要碰它。
建议:默认值
subme
默认值:7
设定子像素(subpixel)估算复杂度。值越高越好。层级1~5只是控制子像素细分(refinement)强度。层级6为模式决策启用RDO,而层级8为动态向量和内部预测模式启用RDO。RDO层级明显慢于先前的层级。
使用小于2的值不但会启用较快且品质较低的lookahead模式,而且导致较差的–scenecut决策,因此不建议。
可用的值:
0:Fullpel only
1:QPel SAD 1 iteration
2:QPel SATD 2 iterations
3:HPel on MB then QPel
4:Always QPel
5:Multi QPel + bi-directional motion estimation
6:RD on I/P frames
7:RD on all frames
8:RD refinement on I/P frames
9:RD refinement on all frames
10:QP-RD (requires –trellis=2, –aq-mode>0)
建议:默认值,或者更高,除非速度非常重要
psy-rd
默认值:1.0:0.0
第一个数是Psy-RDO的强度(需要subme>=6)。第二个数是Psy-Trellis的强度(需要trellis>=1)。注意,Trellis仍然被视为“实验性的”,而且几乎可以肯定至少卡通不适合使用。
psy-rd的解释可以参阅http://forum.doom9.org/showthread.php?t=138293。
no-psy
默认值:无
停用所有会降低PSNR或SSIM的视觉最佳化。这也会停用一些无法透过x264的命令列引数设定的内部psy最佳化。
建议:默认值
no-mixed-refs
默认值:无
混合参照会以每个8x8分割为基础来选取参照,而不是以每个宏区块为基础。当使用多个参照帧时这会改进品质,虽然要损失一些速度。设定此选项会停用该功能。
建议:默认值
参阅:–ref
no-chroma-me
默认值:无
通常,亮度和色度两个平面都会做动态估算。此选项停用色度动态估算来提高些微速度。
建议:默认值
no-8x8dct
默认值:无
弹性8x8离散余弦转换(Adaptive 8x8 DCT)使x264能够智慧弹性地使用I帧的8x8转换。此选项停用该功能。
建议:默认值
trellis
默认值:1
执行Trellis quantization来提高效率。
0:停用。
1:只在一个宏区块的最终编码上启用。
2:在所有模式决策上启用。
在宏区块时提供了速度和效率之间的良好平衡。在所有决策时则更加降低速度。
建议:默认值
注意:需要–cabac