X264设定
本页说明所有x264参数之目的和用法。参数的排列相同于在x264 --fullhelp
出现的顺序。
x264设定
说明
x264带有一些内置的文件。要阅读此说明,执行x264 --help
、x264 --longhelp
或x264 --fullhelp
。越后面的选项将提供更详细的资讯。
输入
以一个位置参数指定输入的视讯。例如:
x264.exe -o NUL C:\input.avs x264 -o /dev/null ~/input.y4m
当输入的视讯是raw YUV格式时,还必须告诉x264视讯的解析度。你可能也要使用--fps
来指定帧率:
x264.exe -o NUL --fps 25 --input-res 1280x720 D:\input.yuv x264 -o /dev/null --fps 30000/1001 --input-res 640x480 ~/input.yuv
预设值系统
为了减少使用者花费时间和精力在命令列上而设计的一套系统。这些设定切换了哪些选项可以从x264 --fullhelp
的说明中得知。
profile
预设值:无
限制输出资料流的profile。如果指定了profile,将覆盖所有其他设定。所以如果指定了profile,将保证得到一个相容的资料流。如果设了此选项,将无法使用无损编码(--qp
0
或--crf
0
)。
如果播放设备仅支援某个profile,就应该设此选项。大多数解码器都支援High profile,所以没有设定的必要。
可用的值:baseline, main, high
preset
预设值:medium
更改选项,以权衡压缩效率和编码速度。如果指定了preset,更改的选项将在所有其他参数套用前被套用。
通常应该将此选项设为你所能承受的最慢的值。
可用的值:ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo
tune
预设值:无
调整选项,以进一步优化为视讯的内容。如果指定了tune,更改的选项将在--preset
之后,但所有其他参数之前被套用。
如果视讯内容符合其中一个可用的值,则可以使用此选项,否则就别使用。
可用的值:film, animation, grain, stillimage, psnr, ssim, fastdecode, zerolatency
slow-firstpass
预设值:无
随著预设值系统在r1177版本的出现,使用--pass
1
会在解析命令列的最后套用以下设定:
可以设--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。
建议:预设值,或者等于帧率
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
设定相同作用。
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做出更好的速率控制决策时才使用此选项。
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)所需要的。由于每个人都忽略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。
通常应该改用--crf
,尽管qp不需要lookahead来执行因此速度会较快。
参阅:--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。
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 Encoding Suggestions
vbv-bufsize
预设值:0
设定VBV缓冲的大小(单位为千位元)。
VBV会降低品质,所以必要时才使用。
参阅:--vbv-maxsize
, --vbv-init
, VBV Encoding Suggestions
vbv-init
预设值:0.9
设定VBV缓冲必须填满多少才会开始播放。
如果值小于1,初始的填满量为:vbv-init * vbv-bufsize。否则该值即为初始的填满量(单位为千位元)。
参阅:--vbv-maxsize
, --vbv-bufsize
, VBV Encoding Suggestions
crf-max
预设值:无
一个类似--qp-max
的设定,只是指定的是最大速率系数而非最大量化值。当使用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
预设值: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%的位元速率偏差)。
- 很多电影(例如动作片)在电影结尾时是最复杂的。因为一阶段编码并不知道这一点,结尾所需的位元数通常被低估。
- A ratetol of inf can mitigate this by allowing the encode to function more like a
--crf
encode, but the filesize will blow out.
- When VBV is activated (ie, you're specified --vbv-* options), this setting also affects VBV aggressiveness. Setting this higher allows VBV to fluctuate more at the risk of possibly violating the VBV settings. For this purpose, the unit of measure is arbitrary.