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,将保证输出的流与该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帧判定。
参阅:--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帧之间的量化值。--bframes
至少须设为2才会让b-pyramid生效。
如果是在为蓝光编码,须使用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