X264设定

来自NMM Doc
Holy讨论 | 贡献2010年11月28日 (日) 12:44的版本 →‎幀類型選項
跳到导航 跳到搜索

本页说明所有x264参数之目的和用法。参数的排列相同于在x264 --fullhelp出现的顺序。

x264设定

说明

x264带有一些内置的文件。要阅读此说明,执行x264 --helpx264 --longhelpx264 --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。

建议:预设值,或者等于帧率

参阅:--keyint, --scenecut

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相同作用。
1:“快速”演算法,较快,越高的--bframes会稍微增加速度。在使用此模式时,基本上建议使用--bframes 16
2:“最佳”演算法,较慢,越高的--bframes会明显降低速度。

注意:对于多趟(multi-pass)编码,仅在第一趟(first pass)才需要此选项,因为帧类型在此时已经判定完了。

b-bias

预设:0

控制B帧被用来代替P帧的可能性。大于0的值增加偏向B帧的加权,而小于0的值则相反。此数是个随意自定的度量值。范围是从-100到100。100并不保证全是B帧(要使用--b-adapt 0),而-100也不保证全是P帧。

仅在你认为你能比x264做出更好的码率控制决策时才使用此选项。

参阅:--bframes, --ipratio

b-pyramid

预设:normal

允许B帧作为其他帧的参考帧。没有此设定时,帧只能参考I/P帧。虽然I/P帧因其较高的品质作为参考帧更有价值,但B帧也是很有用的。作为参考帧的B帧将得到一个介于P帧和普通B帧之间的量化值。--bframes至少须设为2才会让b-pyramid生效。

如果是在为蓝光编码,须使用nonestrict

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模式无法用于蓝光编码。

Some decoders don't fully support open-GOP streams, which is why this hasn't been enabled by default. You should test with all decoders your streams will be played on, or (if that's impossible) wait until support is generally available.

Open-GOP的说明可以参阅http://forum.doom9.org/showthread.php?p=1300124#post1300124