FFMPEG进阶系列03-ffmpeg转码专题(中)x264参数详解

更多音视频知识请点击专注音视频开发

概述

x264编码参数简介

版本

x264.exe --fullhelp 打印

x264 core:152 r2851 ba24899
Syntax: x264 [options] -o outfile infile

Presets(预设)

用于简化命令行而设计的系统。各预设模板所对应的参数设定,详见帮助:x264.exe --fullhelp.

1. 选项profile <string>

  • 默认: 未设定
  • 该选项限制输出视频流的profile。如命令中指定profile,则会忽视其他对之影响的参数,也就是说,只要指定profile,就能保证输出流的兼容性。一旦使用该选项,就无法进行无损编码 (--qp 0 or --crf 0).
    若播放机只支持某种profile,编码时需相应指定。大多数解码器都支持High profile,所以无需如此设置。
  • 可选值: baseline, main, high, high10, high422, high444.
  • 建议:不设置。除非解码环境只支持main或者baseline profile的解码。
Force the limits of an H.264 profile
Overrides all settings.
  - baseline:
    --no-8x8dct --bframes 0 --no-cabac
    --cqm flat --weightp 0
    No interlaced.
    No lossless.
  - main:
    --no-8x8dct --cqm flat
    No lossless.
  - high:
    No lossless.
  - high10:
    No lossless.
    Support for bit depth 8-10.
  - high422:
    No lossless.
    Support for bit depth 8-10.
    Support for 4:2:0/4:2:2 chroma subsampling.
  - high444:
    Support for bit depth 8-10.
    Support for 4:2:0/4:2:2/4:4:4 chroma subsampling.

preset <string>

  • 默认: medium
  • 改变选项以在压缩率与编码速度间平衡。指定preset后,所产生的改变先于其它参数。该选项越慢越好,应选择所能承受的最慢值。
  • 可选值: ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo.
  • 建议:可接受的最慢的值
Use a preset to select encoding settings [medium]
  Overridden by user settings.
  - ultrafast:
    --no-8x8dct --aq-mode 0 --b-adapt 0
    --bframes 0 --no-cabac --no-deblock
    --no-mbtree --me dia --no-mixed-refs
    --partitions none --rc-lookahead 0 --ref 1
    --scenecut 0 --subme 0 --trellis 0
    --no-weightb --weightp 0
  - superfast:
    --no-mbtree --me dia --no-mixed-refs
    --partitions i8x8,i4x4 --rc-lookahead 0
    --ref 1 --subme 1 --trellis 0 --weightp 1
  - veryfast:
    --no-mixed-refs --rc-lookahead 10
    --ref 1 --subme 2 --trellis 0 --weightp 1
  - faster:
    --no-mixed-refs --rc-lookahead 20
    --ref 2 --subme 4 --weightp 1
  - fast:
    --rc-lookahead 30 --ref 2 --subme 6
    --weightp 1
  - medium:
    Default settings apply.
  - slow:
    --direct auto --rc-lookahead 50 --ref 5
    --subme 8 --trellis 2
  - slower:
    --b-adapt 2 --direct auto --me umh
    --partitions all --rc-lookahead 60
    --ref 8 --subme 9 --trellis 2
  - veryslow:
    --b-adapt 2 --bframes 8 --direct auto
    --me umh --merange 24 --partitions all
    --ref 16 --subme 10 --trellis 2
    --rc-lookahead 60
  - placebo:
    --bframes 16 --b-adapt 2 --direct auto
    --slow-firstpass --no-fast-pskip
    --me tesa --merange 24 --partitions all
    --rc-lookahead 60 --ref 16 --subme 11
    --trellis 2

tune <string>

  • 默认: 未设定
  • tune选项根据输入视频的内容进行优化。指定tuning后所产生的改变晚于 --preset的改变,但早于其他参数。若视频源的内容符合tuning之一,则可以相应选择,否则就保留为未设定。
  • 可选值: film, animation, grain, stillimage, psnr, ssim, fastdecode, zerolatency.
  • 建议:根据输入选择。如果没有合适的就不要指定。
Tune the settings for a particular type of source or situation
Overridden by user settings.
  Multiple tunings are separated by commas.
  Only one psy tuning can be used at a time.
  - film (psy tuning):
    --deblock -1:-1 --psy-rd <unset>:0.15
  - animation (psy tuning):
    --bframes {+2} --deblock 1:1
    --psy-rd 0.4:<unset> --aq-strength 0.6
    --ref {Double if >1 else 1}
  - grain (psy tuning):
    --aq-strength 0.5 --no-dct-decimate
    --deadzone-inter 6 --deadzone-intra 6
    --deblock -2:-2 --ipratio 1.1
    --pbratio 1.1 --psy-rd <unset>:0.25
    --qcomp 0.8
  - stillimage (psy tuning):
    --aq-strength 1.2 --deblock -3:-3
    --psy-rd 2.0:0.7
  - psnr (psy tuning):
    --aq-mode 0 --no-psy
  - ssim (psy tuning):
    --aq-mode 2 --no-psy
  - fastdecode:
    --no-cabac --no-deblock --no-weightb
    --weightp 0
  - zerolatency:
    --bframes 0 --force-cfr --no-mbtree
    --sync-lookahead 0 --sliced-threads
    --rc-lookahead 0

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.
  • 建议:如果设置preset=placebo则自动关闭此特性。如果想显式关闭此特性,使用slow-firstpass。
Don't force these faster settings with --pass 1:
  --no-8x8dct --me dia --partitions none
  --ref 1 --subme {2 if >2 else unchanged}
  --trellis 0 --fast-pskip

Frame-type options(帧类型选项)

keyint

  • 默认: 250
  • 说明:设定x264输出的IDR帧(即关键帧)之间的最大间隔。可以设定为"infinite"(无穷),则仅在场景切换时出现IDR帧。
    IDR帧相当于视频流中的"分界符":任何帧不可参考IDR帧另一侧的数据。 另外,IDR帧本身也是I帧,不参考任何其它帧。这意味着,播放器可从最近的I帧开始解码,而无需从头开始。故而,IDR帧可以用作于视频的定位点(seek point)。
    此项功能是在视频定位能力和编码效率之间做权衡。因为I帧体积远大于P/B帧(低速运动的场景中,可达到10倍多),所以,当在VBV设定很低时(如小于1秒的缓冲大小),极其不利于码率控制。若遇此情况,需研究intra-refresh。
  • 建议:默认值(fps的10倍)适用于绝大多数视频。对于编码蓝光、广播、在线流媒体或特殊情况下,可能需要将GOP长度设得很小(通常约1x fps)。
  • 参见:--min-keyint, --scenecut, --intra-refresh

min-keyint

  • 默认: auto (MIN(--keyint / 10, --fps))
  • 说明:设定IDR帧之间的最小间隔。
    关于IDR帧的解释,参见 --keyint
    keyint范围太小将导致IDR帧出现在"错误"的位置(如闪烁的场景(a strobing scene))。该选项限制每个IDR帧后必须经过多少帧才能出现下一个IDR帧。
    min-keyint 的最大允许值为 --keyint/2+1
  • 推荐值: 默认,或1倍帧率
  • 参见:--keyint, --scenecut

no-scenecut

  • 默认: 未开启
  • 说明:完全禁止自动I帧选择算法(adaptive I-frame decision)。
  • 参见:--scenecut

scenecut

  • 默认: 40
  • 说明:设定I/IDR帧放置的阀值。(read: scene change detection).
    x264有一指标,用于衡量每一帧与前一帧的差异程度。若该值小于scenecut,则检测到'场景切换'('scenecut')条件,并放置一个I帧 (前提:该帧与上一个IDR帧的间隔小于min-keyint,否则就放置一个IDR帧)。提高scenecut值将增加检测到的'场景切换'数量。关于 scenecut比较的具体方法,参见 this doom9 thread.
    将scenecut设为0,相当于设定 --no-scenecut
  • 推荐值: 默认
  • 参见:--keyint, --min-keyint, --no-scenecut

intra-refresh

  • 默认: 关
  • 说明:让x264为每keyint数量的帧使用宏块内部编码取代IDR帧。块以水平移动列的方式更新,也叫刷新波。对于低延迟的流,这样可以让帧的尺寸比使用标准的IDR帧更加保持恒定。而且这样可以增强视频流对丢包的容错能力。这个选项会降低压缩率,所以在确实需要的时候才选择它。
    还有一些有意思的事情:
    • 第一帧依然是IDR帧。
    • 内部宏块只在P帧中存在,刷新波在一个或多个B帧后的P帧中广泛存在。
    • 主要的压缩率下降原因是在宏块中新(左边)的波并不能参考旧(右边)的波。
  • 建议:使用默认值

bframes

  • 默认: 3
  • 说明:设置x264采用的最大连续B帧数。
    假如没有B帧,x264数据流会是这样:IPPPPP...PI。若 --bframes 2,则最多2个连续P帧可以被替换为B帧,比如: IBPBBPBPPPB...PI。
    B帧类似于P帧,但它还可以利用后续时间的帧进行运动预测,因此能大大增加压缩率。B帧的平均质量受pbratio控制。
  • 趣闻:
    • 出于对未来帧的需求,编码器的延时性增加了。参见 --sync-lookahead
    • x264 偶尔区分两种不同的B帧。大写'B'代表能被其它帧参考的B帧(参见b-pyramid),而小写'b'表示不能被参考的B帧。如果你见到'B'与'b'混在一起,通常就是上述的区别。当区别不重要时,则用'B'来泛指所有B帧。
    • 欲详细了解x264如何判断某帧该用P帧还是B帧,参见 this ffmpeg-devel mail。默认情况下(假设--bframes 3)帧类型像这样(显示顺序): IBBBPBBBPBPI
    • B帧的另一优势在于高效的快进能力,因为解码器可跳过B帧直接解析P帧,速度由每次1帧提升为(bframs设置值+1)帧。以三个连续B帧的视频为例,解码器能以整个minigop为单位来定位,达到4倍速。
  • 参见:--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设定越高,减速效果越明显。多次编码模式下,此选项只需在1st pass使用,因为帧类型在该pass中决定。
  • 注意:多趟编码时,只有第一趟编码的此选项起效,因为第一趟编码结束时,帧类型就已经被决定了。

b-bias

  • 默认: 0
  • 说明:控制B帧替代P帧的概率。越大(正数)则权重越偏向于B帧。越小(负数)则相反。此数值无量纲。范围从-100到100。100/-100并不保证 所有/没有 P帧被替换掉。(可用 --b-adapt 0 来实现)
  • 注意:除非你认为自己的码率控制策略优于x264,否则别改动此项。
  • 参见:--b-frames, --ipratio

b-pyramid

  • 默认: normal
  • 说明:允许B帧被其它帧参考。若关闭此设定,所有帧只能参考I帧或P帧。虽然I/P帧的质量高,更有参考价值,但B帧也可加以利用。被参考的B帧,其量化值将介于P帧与“一次性”的b帧之间。逻辑上讲,要参考之前的B帧,则必须告知x264至少使用2个B帧。举个例子,一个显示顺序为 P[1]b[1]b[2]B[3]b[4]b[5]P[2] 的小画面组(minigop),其中的B帧还被其它b帧用作参考,而b帧不被任何帧参考,因为称为“一次性”。当b-pyramid开启时,中间的B[3]帧将在P帧之后,b帧之前被编码,因为它是后续两个b帧的参考。P[1]将是b[1]和b[2]的L0(过去)参考,而B[3]和P[2]则是b[1]和b[2]的L1(未来)参考。编码与流的顺序将是P[1]P[2]B[3]b[1]b[2]b[4]b[5]。
    目前x264的b-pyramid仅支持单层的H.264层级,即以B帧为参考的b帧不能进一步被参考。
    对于蓝光的编码,必须用“none”或“strict”。
    • none: 不允许B帧作为参考帧
    • strict: 每个minigop中,只允许一个B帧作为参考帧;受限于蓝光标准
    • normal: 每个minigop中,允许多个B帧作为参考帧。
  • 参见:--bframes, --refs, --no-mixed-refs

open-gop

  • 默认: none
  • 说明:开放画面组(Open-GOP) 技术能提升编码效率。它有以下选项:
    none —— 关闭
    normal —— 开启
    bluray —— 开启。但一些解码器对open-GOP的视频流支持不完全,所以至今依然默认为关闭。若想使用,应先测试保证所有用到的解码器能完整支持,或等待解码器完善该项支持。

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帧能利用的P帧数要少1、2帧,取决于是否开启B帧参考)。可被参考的最小ref是1,只参照自己前面的那帧。
  • 注意:H.264规范中,对各个level都限制了DPB尺寸。如遵守Level 4.1 规范,则对于720p和1080p视频,最大的ref是9和4。关于level和4.1的信息,参见level。
  • 参见:--b-pyramid, --no-mixed-refs, --level

deblock

  • 默认: 0:0
  • 说明:控制循环滤镜(loop filter,即inloop deblocker),是H.264标准的一部分。对于编码时间vs质量提升,效率提升明显。
    关于循环滤镜参数的效果,this doom9 thread 解释的很好。(见一楼主贴,及akupenguin的回复)
    参见:--no-deblock

no-deblock

  • 默认: 未开启
  • 说明:完全禁用循环滤镜,不推荐使用。
  • 参见:--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)为先。x264的交错编码方式采用MBAFF,效率低于逐行编码。因此,仅在需要隔行显示(或无法将视频预先去交错)时,才使用。开启后,同时会开启pic-struct

bff

  • 说明:启用交错(隔行)编码,并指定偶数场(top field)为先。详见--tff

constrained-intra

  • 默认: 未开启
  • 说明:启用受限的帧内预测,在编码SVC标准视频的底层(base layer)子视频时必须开启。由于EveryoneTM 忽略SVC,你也可以忽略这个开关。

pulldown

  • 默认: none
  • 说明:以某个预设模式将输入流(隔行,恒定帧率)标记为软交错(soft telecine)。软交错详解见 HandBrake wiki。可用预设有:<tt>none, 22, 32, 64, double, triple</tt><tt>,</tt> <tt>euro</tt>
    使用除<tt>none</tt>以外任一预设,都会连带开启--pic-struct

fake-interlaced

  • 默认: 未开启
  • 说明:将视频流标记为交错(隔行),哪怕并非为交错式编码。可用于编码蓝光兼容的25p和30p视频。

21. frame-packing

  • 默认: 未设定
  • 说明:编码3D视频时,此参数在码流中插入一个标志,告知解码器此3D视频是如何合并的。可选值及其意义参见<tt>x264 --fullhelp</tt>

Ratecontrol(码率控制)

qp

  • 默认: 未设定
  • 说明:三种码率控制方式的第一种。设置x264以恒定量化值(Constant Quantizer) 方式编码视频。该数字指定P帧的量化值。I帧和B帧的量化值相应由--ipratio和--pbratio决定。CQ模式的目标在于一定的量化值,因此最 终文件大小不可知(虽然有方法可以较为准确的估计)。设定为0则输出的视频为无损。对于相同的视觉质量,qp所产生的文件体积要大于--crf。qp模式 会禁用自适应量化(adaptive quantization),因为“恒定量化值”的定义已经说明了,不会自适应改变量化值。
    此选项与--bitrate和--crf相互冲突。关于各种码率控制系统,详见this writeup
    一般最好用--crf。不过qp模式不需要lookahead,所以速度更快。
  • 参见:--bitrate, --crf, --ipratio, --pbratio

bitrate

  • 默认: 未设定
  • 说明:三种码率控制方式的第二种。以目标比特率来编码视频。目标比特率模式意味着最终文件大小可知,但最终质量不可知。x264会尝试令视频的平均码率接近目标码率。所用参数的比特率单位是千比特/秒(kilobits/sec) (8bits = 1byte and so on) 注意:1 kilobit 是1000,不是1024 bits
    此项设定常与--pass一同使用,进行二次编码。
    此选项与--qp和--crf相互冲突。关于各种码率控制系统,详见this writeup
  • 参见:--qp, --crf, --ratetol, --pass, --stats

crf

  • 默认: 23.0
  • 说明:最后一种码率控制方法:恒定质量(恒定码率因子Constant Ratefactor)。 qp目标在于一定的量化值,bitrate目标在于一定的文件体积,crf的目标则在于一定的“质量”。基本上就是让crf n产生的视频的感官质量等同于qp n,但体积更小。crf值的单位叫做“码率因子”。
    为此目的,CRF降低“不是很重要”的帧的质量。在这里,“不太重要”表示复杂或高速运动的场景,这些场景中,质量要么代价更高(更高码率),要么不易被察觉。这些帧的量化值将会增大。从这些帧中省下来的码率被用于更高效的场景。
    CRF编码时间短于2pass bitrate模式,因为省去了2pass模式中的1st pass过程。另外,CRF编码模式的比特率无法估计。由你自己决定哪种码率控制方式更适用你的情况。
    此选项与--qp和--bitrate相互冲突。关于各种码率控制系统,详见this writeup
  • 建议:其中 -crf 很重要,是控制转码后视频的质量,质量越高,文件也就越大。
    此值的范围是 0 到 51:0 表示高清无损;23 是默认值(如果没有指定此参数);51 虽然文件最小,但效果是最差的。
    值越小,质量越高,但文件也越大,建议的值范围是 18 到 28。而值 18 是视觉上看起来无损或接近无损的,当然不代表是数据(技术上)的转码无损。
  • 参见:--qp, --crf, --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, --sync-lookahead

vbv-maxrate

  • 默认: 0
  • 说明:设置重新填满VBV缓冲的最大速率。
    VBV会降低质量,仅用于回放专用的视频编码
  • 参见:--vbv-bufsize, --vbv-init, VBV Encoding Suggestions

vbv-bufsize

  • 默认: 0
  • 说明:设定VBV缓冲的大小,单位是千比特(kilobits)。
    VBV会降低质量,仅用于回放专用的视频编码。
  • 参见:--vbv-maxrate, --vbv-init, VBV Encoding Suggestions

vbv-init

  • 默认: 0.9
  • 说明:设置VBV缓冲达到多满(百分比),才开始回放。
    如果小于1,则初始填充(initial fill)为:<tt>vbv-init * vbv-bufsize</tt>. 若大于1,则作为初始填充的单位kbits.
  • 参见:--vbv-maxrate, --vbv-bufsize, VBV Encoding Suggestions

crf-max

  • 默认: 未设定
  • 说明:与--qpmax类似,不同的是,qpmax设定最大量化值,crf-max设置最大码率因子。该选项仅在使用CRF并开启VBV时有效。该选项保证 x264在降低码率因子(即"质量")时,不会低于某个给定值,哪怕这么做会妨碍VBV限制。此选项最适用于自定义流媒体服务器。详见initial commit message.
  • 参见:--crf, --vbv-maxrate, --vbv-bufsize

qpmin

  • 默认: 0
  • 说明:设定x264所使用的最小量化值。量化值越低,输出视频越接近输入视频。低到一定程度时,输出将看上去跟输入相同,虽然并不是完全相同。通常没有理由允许x264再花费比这更多的码率编码宏块了。
    若开启了自适应量化(adaptive quantization,默认开启),则不建议提高qpmin,因为这样一来会降低画面内平坦背景部分的质量。
  • 参见:--qpmax, --ipratio

qpmax

  • 默认: 51(注:新版x264已提升为69)
  • 说明:与qpmin相反,它设定了x264可用的最大量化值。默认值51是H.264规范中最高的可用值,代表极低质量。该默认值等于是禁用了qpmax。如需限定x264输出视频的最低质量,可以考虑降低该值(一般别低于30-40),但通常不推荐改动。
    参见:--qpmin, --pbratio, --crf-max

qpstep

  • 默认: 4
  • 说明:相邻两帧之间量化值之差的最大值。

ratetol

  • 默认: 1.0
  • 说明:此参数有两个目的:
    1. 在1-pass bitrate模式下,该设置控制x264可以偏离给定目标码率的百分比。可以设置为“inf”(无穷)来完全禁止溢出检测。最低可设置为0.01。设定 地越高,x264越能对片尾复杂场景做出反应。此参数的单位是百分比(1.0 = 1% 比特率偏移).
      大多数电影(比如任意动作电影)都在结尾高潮处最复杂。1pass编码不知道这点,所以那里的所需码率通常都低估了。ratetol设为inf可弥补此点,让编码功能更接近--crf,但文件体积也会超出限定。

    2. 启用VBV(比如指定了--vbv-*选项)时,此选项也影响VBV的厉害程度。提高该值会允许更大的VBV波动,也增加了破坏VBV设定的风险。对于此目的,该值的单位任意。

ipratio

  • 默认: 1.40
  • 说明:修改I帧与P帧平均量化值的比例。值越高,I帧的质量越高。开启mbtree(默认开启)时,此项失效,mbtree自动计算最优量化值。
  • 参见:--pbratio

pbratio

  • 默认: 1.30
  • 说明:修改P帧与B帧平均量化值的比例。值越高,B帧的质量越低。开启mbtree(默认开启)时无效,因为mbtree自动计算最优值。
  • 参见:--ipratio

chroma-qp-offset

  • 默认: 0
  • 说明:编码时,在色度平面(chroma planes)量化值基础上,增加一个偏移量,可以是负数。
    当使用psy选项(psy-rd或psy-trellis)时,x264会自动降低此值(一般在此值基础上减去2),以补偿psy优化时默认过于偏重亮度(luma)质量而忽视色度(chroma)质量的问题。
  • 注意:x264 仅在量化值小于等于29时,对亮度和色度平面使用相同的量化值。超过之后,色度量化值的增加将会慢于亮度,直至最终达到亮度q51、色度q39。这是H.264标准的要求。

aq-mode

  • 默认: 1
  • 说明:自适应量化模式(Adaptive Quantization Mode)
    若关闭AQ,x264倾向于对低细节度的平滑区域使用过低码率,AQ可以更好把码率分配到各个宏块中. 该选项改变AQ重新安排码率的幅度:
    • 0: 禁止AQ
    • 1: 允许AQ在整个视频中和帧内重新分配码率
    • 2: 自方差AQ(实验阶段),尝试逐帧调整强度
  • 参见:--aq-strength

aq-strength

  • 默认: 1.0
  • 说明:自适应量化强度(Adaptive Quantization Strength)
    设置AQ偏向于低细节度(“平滑”)宏块的强度。不允许为负值。建议选值不超过0.0~2.0范围。
  • 参见:--aq-mode

pass

  • 默认: 未设定
  • 说明:此设置对于2pass编码很重要,控制x264如何处理--stats文件。有三个选项:
    • 1: 生成新的stats文件,用于1st pass
    • 2: 读取stats文件,用于最终pass
    • 3: 读取stats文件,并更新之
      stats文件包含输入视频每一帧的信息,作为x264的输入用于提高输出品质。大致如此:跑一次1st pass生成stats文件,然后2nd pass就能生成优化过的视频。改进的原因主要在于更优的码率控制。
  • 参见:--stats, --bitrate, --slow-firstpass, X264_statsfile

stats

  • 默认: 'x264_2pass.log'
  • 说明:设定x264读写--pass X264_statsfile的目录地址。
  • 参见:--pass

no-mbtree

  • 默认: 未开启
  • 说明:禁用macroblock tree码率控制。使用macroblock tree码率控制会记录时间方向上的各帧变化并相应权衡,因此在总体上改进了压缩。其概念与AQ同出一辙(AQ降低高复杂度区域的质量,将码率用于低复杂度的区域),但却是从时间方向上施行控制,因此与qcomp十分相似,而qcomp本身也影响mb-tree的强度。
    对于多次编码模式,需要在现有stats文件基础上,增加一个大体积stats文件。
  • 推荐值: 默认
  • 参见:--rc-lookahead

qcomp

  • 默认: 0.60
  • 说明:量化曲线(quantizer curve)压缩因子。0.0 => 恒定比特率,1.0 => 恒定量化值。
    qcomp在“高成本”的高运动帧与“低成本”的低运动帧之间权衡分配码率。极端设置qcomp=0.0趋于真正的恒定比特率,通常会造成高运动场景十分难看,而将宝贵的码率用于让低运动场景看着很完美。另一极端设置qcomp=1.0则能达到近似恒定量化参数(QP),并完全关闭x264的aq-mode和时间方向的RDO(mb-tree),于是码率被浪费在高复杂度的场景上,而高复杂度的场景无法用作未来远处的帧的参考,因为帧与帧之间的变化太大。
    与mbtree一起使用时,也会影响mbtree与aq-strength的强度,而这两项倾向于将更多码率用于低复杂度的场景和宏块(macroblock)。(qcomp越大,则aq与mbtree越弱)。qcomp默认值为0.6,不要改动。
  • 推荐值: 默认
  • 参见:--cplxblur, --qblur

cplxblur

默认: 20
根据给定的半径对量化曲线进行高斯模糊(gaussian blur)。分配给各帧的量化值在时间方向上与相邻几帧相模糊,以限制量化值波动。
当mb-tree开启时,cplxblur无效。
参见:--qcomp, --qblur, --no-mbtree

qblur

  • 默认: 0.5
  • 说明:量化曲线压缩后,根据给定的半径对量化曲线进行高斯模糊。该选项不怎么重要。
  • 参见:--qcomp, --cplxblur

zones

  • 默认: 未设定
  • 说明:对视频不同段(zone)进行参数调整。大多数x264选项都可以针对各段进行调整。
    • 单个段包含<起始帧>,<结束帧>,<各选项>
    • 多段之间用“/”来分隔
  • 选项:
    以下两项很特殊,每段zone设定一次,若需设置则必须列在所有参数之前:
    • 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=<字符串>
    • crf=<浮点>
  • 限制
    • 区段内的参考帧数量不可大于原始设置中的--ref
    • Scenecut不可开启或关闭;只有在原始启用(>0)时,才能改变其数值
    • 若使用--me esa/tesa,Merange不能超过原始设定值
    • Subme若在原始设定为0,则不能改变其值
    • 若--me原始设定为dia, hex,或umh,则不能修改为esa或tesa
  • 例子: 0,1000,b=2/1001,2000,q=20,me=3,b-bias=-1000
  • 推荐值: 默认

qpfile

手动忽略标准码率控制。选择一个文件,强制指定某些帧的量化值和帧类型。格式为“帧号 帧类型 量化值”。例子:

0 I 18 < IDR(关键)I帧  
1 P 18 < P帧  
2 B 18 < 被参考的B帧  
3 i 18 < 非IDR(非关键)I帧  
4 b 18 < 不被参考的B帧  
5 K 18 < 关键帧*  
  • 无需指定所有帧
  • 量化值设为-1允许x264自动选择最优量化值。适用于只想指定帧类型的情况
  • 手动指定大量帧的类型和量化值,同时又让x264决定其中间的帧,这么做会降低x264的性能
  • “关键帧”是一种通用的关键帧/搜寻点(seekpoint)类型。若等同于--open-gop是none,则等同于IDR I帧,否则就等同于标记为恢复点(Recovery Point)SEI的非IDR I帧

Analysis(分析)

partitions

  • 默认: 'p8x8,b8x8,i8x8,i4x4'
  • 说明:H.264视频在压缩时被分割为16x16的宏块。这些块可以被分为更小的块,本选项就控制此分割。
    开启此选项,即开启了单个分块(individual partitions)。分块对不同帧类型(如I, P, B)分开设置。可用分块有p8x8, p4x4, b8x8, i8x8, i4x4
    • I: i8x8, i4x4
    • P: p8x8 (同时启用p16x8/p8x16), p4x4 (同时启用p8x4/p4x8)
    • B: b8x8 (同时启用b16x8/b8x16)
      也可设置为“none”或“all”。
      p4x4通常没什么用,且大大增加 编码时间/编码质量之比。
  • 参见:--no-8x8dct

direct

  • 默认: 'spatial'
  • 说明:设置'直接'运动向量的预测模式。两种模式可选:spatialtemporal。也可选择none来关闭直接运动向量,或选auto允许x264在两个参数间切换。若设为auto,x264会在编码结束时输出相应的使用信息。“auto”在2pass编码模式下作用最佳,但也能在单次编码中使用。在1st-pass的auto模式下,x264会不断记录两种方法效果的滑动平均值,并以此为依据决定下一次使用哪个方法。注意,只应在1st pass启用auto时,才在2nd pass启用auto。若非如此,2nd pass会默认采用temporal。
    直接预测指挥x264在猜测B帧某些部分的运动时,使用何种方法。既可借助该帧的其它部分(spatial),也可与下一个P帧作比较(temporal)。最好将此项设为自动,好让x264自己决定哪种方法更好。不要以为设none能加快速度,恰恰相反,既浪费码率又让画面难看,强烈不推荐。如果你要在spatial和temporal之间做选择,spatial通常更优。
  • 推荐值: 'auto'

no-weightb

  • 默认: 未开启
  • 说明:有时,x264会根据前后帧来决定一B帧的运动补偿。当对B帧进行权重,每一帧所拥有的影响力与其对正在编码的帧的距离相关,而非具有相同的影响。所以weight-b有助于压缩淡入淡出。开启此选项将关闭该功能。
  • 推荐值: 默认

weightp

  • 默认: 2
  • 说明:开启显式权重预测,提升P帧压缩率,同时改善淡入淡出场景的质量,模式越高,编码速度越慢。
  • 注:若编码Adobe Flash,需设置为1,否则解码后会产生artifacts。Flash 10.1修复了这个问题。
    模式:
    • 0. 禁用
    • 1. 简单:仅分析淡入淡出,不做参考复制(reference duplication)
    • 2. 智能:淡入淡出+参考复制(reference duplication)

me

  • 默认: 'hex'
  • 说明:全像素(full-pixel)运动估计方法。5种选择:
    • dia(diamond菱形搜索) 是最简单的搜索方式,从最优预测值出发,往上、左、下、右一个像素处检测运动向量,挑选最好值,然后重复该步骤,直至找不到更优的运动向量。
    • hex(hexagon六角形搜索) 的策略类似,但它对周围六个点进行range-2搜索,因此称为六角形搜索。此方法效率大大高于dia,且速度相当,因此通常编码常用此项。
    • umh(uneven multi-hex不对称多六角形搜索)比hex慢很多,但能搜索复杂的多六角形,以避免错过很难找到的运动向量。与hex和dia相似,merange参数直接控制umh的搜索半径,使用者可自行增减搜索的空间尺寸。
    • esa(exhaustive全面搜索) 在最优预测值附近merange范围内的整个空间内,以高度优化的智能方式搜索运动向量。相当于数学上的穷举法,搜索区域内的每一个运动向量,但是更快些。然而,此方法远远慢于UMH,且好处不多,对于普通编码没有太大用处。
    • tesa (transformed exhaustive变换全面搜索)算法尝试对各个运动向量近似哈达玛变换比较法。与exhaustive类似,但效果略好,速度略慢。
  • 参见:--merange

merange

  • 默认: 16
  • 说明:merange控制运动搜索最大范围的像素数。hex和dia的范围在4-16,默认16;umh和esa可以大于默认值16,在更广的空间内进行运动搜索,对于高清视频和高速运动视频较为有用。注:umh, esa, tesa模式下增加会大幅降低编码速度。
    merange开得太高(比如>64)也不太可能找到更多有用的运动向量,有时反而会导致压缩率略微降低:在少见情形下,某些运动向量只因当前有用而被选中,但由于这些向量的delta过大而影响了对之后运动向量的预测,得不偿失。
    尽管这种影响非常小,几乎可以忽略不计,但一般都不应使用这么变态的设置。见此贴
  • 参见:--me

mvrange

  • 默认: -1 (auto)

  • 说明:设置运动向量的最大垂直范围,单位是像素。默认值根据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 (auto)
  • 说明:设置线程之间的最小运动向量缓冲。不要改动。
  • 推荐值: 默认

subme

  • 默认: 7
  • 说明:子像素(subpixel)估测复杂度,越大越好。数值1-5单纯控制子像素细化强度。数值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)
    11. Full RD [1][2]
  • 推荐值: 默认或更高,除非很在乎速度

subq

也叫--subme

no-chroma-me

  • 默认: 未开启
  • 说明:通常,运动预测同时作用于亮度和色度平面,此选项禁用色度运动预测,以换取少量的速度提升。
  • 推荐值: 默认

psy-rd

  • 默认: 1.0:0.0
  • 说明:第一个值是Psy-RDO的强度(需要subme>=6),第二个数是Psy-Trellis的强度(需要trellis>=1)。注:Trellis还在试验阶段,至少不该用于动画。
    psy-rd的解释,详见this

no-psy

  • 默认: 未开启
  • 说明:禁用所有会降低PSNR或SSIM的视觉优化。同时禁用了内部psy优化,此功能无法通过x264命令行控制。
  • 推荐值: 默认

no-mixed-refs

  • 默认: 未开启
  • 说明:Mixed refs基于8x8区块选择参考,而非基于宏块,对于多ref模式能提升质量,但速度减慢。设定此项,会禁用该功能。
  • 推荐值: 默认
  • 参见:--ref

no-8x8dct

  • 默认: 未设定
  • 说明:自适应8x8 DCT启用I帧内的智能自适应8x8 transforms,此选项禁用该功能。
  • 推荐值: 默认

trellis

  • 默认: 1
  • 说明:进行格子(Trellis)量化,以提升效率。
    0. 禁用
    1. 仅用于最终编码的宏块
    2. 用于所有模式决策
    用于宏块能较好地平衡速度和效率,用于所有模式(2)时会进一步降低速度,有时还会令细节模糊。
  • 参见:Trellis Quantization
  • 推荐值: 默认
  • 注:需要--cabac

no-fast-pskip

  • 默认: 未开启
  • 说明:禁用早期P帧跳过检测。低码率情况下,能提升一定的质量,但速度代价很大。高码率情况下,对速度和质量都影响不大。
  • 推荐值: 默认

no-dct-decimate

  • 默认: 未开启
  • 说明:为节省空间,x264会将某些块清零,因为其认为这些块即使清零也不会被观看者察觉到。这样通常能以忽略不计的质量损失换来编码效率的提升。但在极罕见的情况下会出错导致可见的痕迹(artifact)。此情况可以通过令x264不丢弃DCT块而减轻。
    开启此选项,则禁用该功能。
  • 推荐值: 默认

nr

  • 默认: 未设定
  • 说明:进行快速降噪。根据此值估计影片的噪声,并尝试通过丢弃微小细节来去噪,然后再进行量化。效果也许不如外部降噪滤镜,但速度很快。
  • 推荐值: 默认或(如需降噪:100至1000)

deadzone-inter/intra

  • 默认: 未设定
  • 说明:设定inter/intra亮度量化deadzone的大小。Deadzones应介于0~32。deadzone值设定了x264对于何种精细程 度的细节,会选择丢弃而不保留。太精细的细节很难察觉,且编码代价大,丢弃这类细节能防止在低回报画面上浪费码率。Deadzone与Trellis互不相容
  • 推荐值: 默认

cqm

  • 默认: Flat (未设定)
  • 说明:将所有自定义量化矩阵设为内置预设值。预设值包括<tt>flat和</tt><tt>JVT</tt>。
  • 推荐值: 默认
  • 参见:--cqmfile

cqmfile

默认: 未设定

  • 说明:根据指定的JM-compatible的文件,设置所有自定义量化矩阵。自动忽略其它--cqm*选项。
  • 推荐值: 默认
  • 参见:--cqm

cqm4* / cqm8*

  • 默认: 未设定
    • --cqm4: 设置所有4x4量化矩阵。接受用逗号分隔的16个整数
    • --cqm8: 设置所有8x8量化矩阵。接受用逗号分隔的64个整数
    • --cqm4i, --cqm4p, --cqm8i, --cqm8p: 设置相同的亮度和色度量化矩阵
    • --cqm4iy, --cqm4ic, --cqm4py, --cqm4pc: 对亮度和色度使用不同的量化矩阵,cqm8选项也可用此开关。
  • 推荐值: 默认

Video Usability Info(视频使用信息)

这些选项在输出流中设定标志,可以被解码工具读取并做相应处理。值得注意的是,大多数选项在大多数情境下都是无意义 的,所以通常都被解码软件所忽略。

overscan

  • 默认: undef
  • 说明:如何处理过扫描。此处过扫描指的是显示设备只显示画面的一部分。
    可选值:
    • undef - 未定义
    • show - 指示显示全画面,理论上设定后会必须遵守。
    • crop - 指示可在回放设备上使用过扫描,未必会被遵守。
  • 推荐: 编码前先切掉那部分,然后如果设备支持,就用show,若不支持,就忽略。

videoformat

  • 默认: undef
  • 说明:指示视频在编码/数字化之前是什么类型。
    可选值:
    • component
    • pal
    • ntsc
    • secam
    • mac
    • undef
  • 推荐: 视频源的类型,或 未定义

range

  • 默认: auto
  • 说明:指示亮度与色度level使用全范围还是有限的level。若设为TV,则使用有限的范围。若设为auto,则使用与输入相同的范围。
  • 注意:若range与input-range的值不同,则编码时将进行范围转换。
    简单解释,参见this
  • 推荐: 默认
  • 参见:--input-range

colorprim

  • 默认: undef
  • 说明:选择在转换为RGB时使用哪种基色。
    可选值:
    • undef
    • bt709
    • bt470m
    • bt470bg
    • smpte170m
    • smpte240m
    • film
      参见: RGBYCrCb
  • 推荐值: 默认,除非你知道源用的是哪种

transfer

  • 默认: undef
  • 说明:设定所使用的光电传输特性。(设置用于修正的gamma曲线)
    可选值:
    • undef
    • bt709
    • bt470m
    • bt470bg
    • linear
    • log100
    • log316
    • smpte170m
    • smpte240m

参见:Gamma Correction
推荐值: 默认,除非你知道源用的是哪种

colormatrix

  • 默认: undef
  • 说明:设置从RGB基色计算得到亮度和色度所用的矩阵系数。
    可选值:
    • undef
    • bt709
    • fcc
    • bt470bg
    • smpte170m
    • smpte240m
    • GBR
    • YCgCo
      参见: YCbCr
  • 推荐值: 源所使用的值,或默认

chromaloc

  • 默认: 0
  • 说明:设置色度采样位置。(定义于ITU-T规范的Annex E).
    范围0 ~5
    参见 x264's 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信息,且将码流(bitstream)包装于bitrate所设置的码率,需要bitrate码率控制模式。
  • 推荐值: none,除非需要

  • 参见:--vbv-bufsize, --vbv-maxrate, --aud

filler

  • 默认: None
  • 说明:允许在不使用nal-hrd的情况下产生高度恒定码率(hard-CBR)的流。

pic-struct

  • 默认: 未开启
  • 说明:强制在Picture Timing SEI传送pic_struct
    使用--pulldown或--tff/--bff时自动开启。
  • 推荐值: 默认

crop-rect

  • 默认: 未设定
  • 说明:在码流层指定一个切除(crop)矩形。若不想x264在编码时做crop,但希望解码器在回放时进行切除,可使用此项。单位为像素。

Input/Output(输入输出)

output

  • 默认: 未设定
  • 说明:指定输出文件名。根据扩展名决定输出视频的格式。若扩展名无法识别,则默认输出raw视频流(通常以.264扩展名保存)
    特殊位置<tt>NUL</tt> (Windows) 或<tt>/dev/null</tt> (Unix) 表明丢弃输出。特别常用于pass 1,因为此时只在乎输出的stats

muxer

  • 默认: auto
  • 说明:指定写文件的格式。
    可选值:
    • auto
    • raw
    • mkv
    • flv
    • mp4

'auto'会自动根据输出文件的文件名来挑选。

  • 参见:--output
  • 推荐值: 默认

demuxer

  • 默认: Automatically detected(自动检测)

  • 说明:设置x264分析输入视频所使用的demuxer和解码器。
    可选值:

    • auto
    • raw
    • y4m
    • avs
    • lavf
    • ffms

    若输入文件扩展名为raw, y4m或avs,x264会使用相应demuxer来读取文件。标准输入使用raw demuxer。其它扩展名,x264会依次尝试使用ffms,lavf来读取,无法读取则失败。
    'lavf'和'ffms'选项要求x264在编译时包含了相应的库。两者之一被使用时,且输出非raw,则x264会提取使用输入文件的时间码。这使x264能有效得知VFR。其它选项可通过--fps来设定恒定帧率,或用--tcfile-in来设定可变帧率。

  • 参见:--input, --muxer

  • 推荐值: 默认

input-csp

  • 默认: i420
  • 说明:告知x264输入raw视频所使用的色彩空间。支持的色彩空间列于x264 --fullhelp
  • 参见:--input-res, --fps

output-csp

  • 默认: i420
  • 说明:告知x264输出视频所使用的色彩空间。支持的色彩空间列于x264 --fullhelp
    可选值:
    • i420
    • i422
    • i444
    • rgb
  • 参见:--input-csp

input-range

  • 默认: auto
  • 说明:指定视频源的色度与亮度level范围。设为TV则使用有限范围,设为PC则使用全范围。
  • 注意:若range与input-range的值不同,则编码时将进行范围转换。
  • 推荐值:默认,除非你知道片源的level是TV还是PC。
  • 参见:--range

input-res

  • 说明:指定raw视频的输入分辨率。用法 --input-res 720x576
  • 参见:--input-csp, --fps

index

  • 默认: 未设定
  • 说明:仅在使用ffms --demuxer时有效的可选项。指定ffms读取输入视频所对应的索引文件,对之后的编码可用,免去重复索引。通常不需要,索引相对于编码过程来说,并不慢。
  • 参见:--demuxer, FFMS2 API 文档
  • 推荐值: 默认,除非你非要节省一分钟的索引时间。

sar

  • 默认: 未设定
  • 说明:指 定编码所使用的输入视频的采样高宽比(Sample Aspect Ratio (SAR)),格式为"宽:高"。
    与帧尺寸一起,通过决定显示高宽比(Display Aspect Ratio (DAR)),可用于编码可变高宽比的输出。公式:DAR = SAR x 宽/高
    详见here
  • 推荐值: 使用resize滤镜和编码可变输入时,需要使用。

fps

  • 默认: autodetected(自动检测)
  • 说明:指定视频帧率,可以是浮点数(29.970),或是分数(30000/1001),或整数(2997/100) 。x264能从输入流的头信息里检测到帧率(仅限于y4m, avs, ffms, lavf),若没有,在使用25。使用此项会自动开启--force-cfr。
    当使用raw YUV输入,且使用--bitrate模式,则必须用此选项或--tcfile-in指定帧率。否则x264不会达到目标码率。

seek

  • 默认: 未设定
  • 说明:指定编码的起始帧,允许从源文件的某一时间点开始编码。
  • 推荐值: 默认

frames

  • 默认: 未设定
  • 说明:指定最大编码帧数,允许编码能在源文件结束前停止。
  • 推荐值: 默认

level

  • 默认: -1 (auto)
  • 说明:设置输出码流的level标志。(定义于H.264标准的Annex A ) 允许的level有:
    1 1b 1.1 1.2 1.3 2 2.1 2.2 3 3.1 3.2 4 4.1 4.2 5 5.1
    若不在命令行中指定--level,x264会尝试自动检测level。检测不完美,且在不使用VBV时可能会低估了level。x264也会自动限制DPB size (见--ref)以兼容所选择的level(除非手动指定了--ref)。注:指定level并不会自动设定--vbv_maxrate或--vbv_bufsize,但当超出level限制时,会发出警告。
    我该选哪个Level?
    Level 4.1通常是桌面消费级硬件所支持的最高level。蓝光碟只支持level 4.1,许多非移动设备如Xbox 360表示level 4.1是官方支持的最高level。诸如iPhone/Android之类的移动设备则完全不同。
    维基百科有张图表 详细列举了各level的限制。
  • 推荐值: 默认,除非定位于特定设备。

bluray-compat

  • 默认: 未开启

  • 说明:修改x264的参数以更好地兼容所有蓝光播放器。只有当视频需要在硬件蓝光播放机上播放时,才需启用本设置。
    此设置对参数做出以下修改:

    • 将--weightp上限设为1(若不大于1,则不更改;若大于1,则降为1)
    • 将--min-keyint设为1
    • 禁用--intra-refresh
    • 其它...

    此设置还开启了一些x264的内部变更,以便生成的视频更利于硬件播放器的播放。例如:

    • 修改GOP/mini-GOP的大小和参考列表
    • 增加slice header的verbose内容
  • 推荐值:若用于蓝光硬件播放机,则开启本设置。

avcintra-compat

  • 默认: 未开启
  • 说明:强制x264以支持High 10 Intra的profile(AVC Intra 50, AVC Intra 100, AVC Intra 200)进行编码。仅在需使用相关设备播放时开启本设置。

stitchable

  • 默认: 未开启
  • 说明:不以视频内容来优化header,以保证能被附加(append)到分段的编码视频尾部。并保证当视频的各段采用完全相同的参数编码时,各段的header完全一致。

verbose

  • 默认: 未开启
  • 说明:显示每一编码帧的统计信息。
  • 推荐值: 默认

no-progress

  • 默认: 未开启
  • 说明:关闭编码过程中的进度显示。
  • 推荐值: 默认

quiet

  • 默认: 未开启
  • 说明:开启安静模式,静默x264的状态消息。
  • 推荐值: 默认

log-level

  • 默认: info
  • 说明:手动指定x264cli和libx264的消息记录层级
    可选值:
    • none
    • error
    • warning
    • info
    • debug
  • 推荐值: 默认

psnr

  • 默认: 未开启
  • 说明:在编码结束时,报告PSNR 值,略微减慢速度。
  • 推荐值: 默认

ssim

  • 默认: 未开启
  • 说明:在编码结束时,报告SSIM 值,略微减慢速度。
  • 推荐值: 默认

threads

  • 默认: auto (基于帧编码的线程:1.5 * 逻辑处理器数,舍弃小数点;基于切片(slice-based)编码的线程:1 * 逻辑处理器数)
  • 说明:开启并行编码,利用多核系统的一个以上的线程来增加速度。多线程造成的质量损失可忽略不计,除非使用非常高的线程数(如大于16)。速度提升略低于线性,直至线程数> 一线程/垂直40像素,再往上速度提升大幅缩减。
    x264目前内部限制最高线程数为128,现实中不会使用到这么高。
  • 推荐值: 默认
  • 参见:thread-input, sliced-threads, opencl

sliced-threads

  • 默认: off
  • 说明:开启基于基于切片(slice-based)的线程,该方法在压缩和效率上皆略输于默认方法,但没有编码延时。
    最大切片线程数:MIN( (高+15)/16 / 4, 128 )
  • 推荐值: 默认(off),除非需要编码实时流媒体,或是低延时很重要时。

thread-input

  • 默认: threads > 1时,设为开启
  • 说明:使用与编码不同的线程来解码输入视频。
  • 推荐值: 默认

sync-lookahead

  • 默认: auto (bframes+1)
  • 说明:设定threaded lookahead所用的缓冲帧数。最大值为250。在2nd或后续pass,或是使用切片线程时,本选项自动关闭。
    设置为0将禁用threaded lookahead,可降低延时,但性能下降。
  • 推荐值: 默认

non-deterministic

  • 默认: 未开启
  • 说明:当--threads > 1时,能略微提升质量,但输出不确定(non-deterministic)。会开启多线程mv,并在当slicetype为threaded时,使用整个lookahead缓冲来做slicetype决定,而非只用可用的最小量。
    通常不用。
  • 推荐值: 默认
  • 参见:threads

opencl

  • 默认: 未开启
  • 说明:当开启时,将look ahead线程大多分派给支持OpenCL的GPU设备。低分辨率intra成本预测,低分辨率运动搜索(包括subpel)和双向成本预测都在GPU上完成。对于不开启多线程lookahead(threaded lookahead)的preset(superfast, ultrafast),则根本不会使用到OpenCL。
  • 小心:开启时,输出质量一般略逊于CPU模式的质量。驱动程序有bug时,编码速度有可能低于纯CPU x264,甚至可能导致系统崩溃。

opencl-clbin

  • 默认: 未开启
  • 说明:在运行前,x264必须编译其针对你的设备的OpenCL内核,为避免在每次运行时都编译一次,x264会将编译完成的内核二进制码缓存于名为x264_lookahead.clbin的文件。
    指定编译完的OpenCL内核缓存的路径以更改此路径。

opencl-device

  • 默认: 未开启
  • 说明:x264将使用第一个支持OpenCL的GPU设备。大多现代的独立GPU或AMD的集成GPU都能用,Intel的集成GPU(IvyBridge及更早产品)不支持所需的特性。
    当你的系统存在多余一个支持OpenCL的设备时,允许通过设备序号来指定运行lookahead的设备。

asm

  • 默认: auto
  • 说明:忽略自动CPU检测。适用于debug和纠错。
  • 推荐值: 默认

no-asm

  • 默认: 未开启
  • 说明:禁用所有CPU优化。适用于debug和纠错。
  • 推荐值: 默认

visualize

  • 默认: 未开启
  • 说明:对编码后的视频启用宏块类型视觉化(Macroblock Type visualizations)。适用于一帧帧的debug和分析。
    需要compile time支持,及X11 windowing system。
    已弃用,并在最新build中去除。
  • 推荐值: 默认

dump-yuv

  • 默认: 未设定
  • 说明:将重构的YUV帧放入指定文件内。主要用于debug,通常不用
  • 推荐值: 默认

sps-id

  • 默认: 未设定
  • 说明:设定SPS (序列参数组sequence parameter set)和PPS (图像参数组picture parameter set)ID数。通常不用。
  • 推荐值: 默认

aud

  • 默认: 未开启
  • 说明:使用接入单元(access unit)分割。
  • 推荐值: 默认,若编码蓝光,则需设定此选项。

force-cfr

  • 默认: 未开启
  • 说明:使用ffms2或lavf demuxers时,时间码复制于输入文件(假设输出不是raw)。此选项禁止该方式,转而强制x264自己生成时间码。使用此选项时,最好同时设定--fps。
  • 推荐值: 默认

tcfile-in

tcfile-out

  • 说明:根据输入的时间戳,输出一个时间码文件(v2格式)。用于VFR输入视频且想丢弃时间码时。文件的格式,参见tcfile-in

timebase

  • 默认: 未设定

  • 说明:允许设定自定义时基(timebase)。
    分子是秒数(seconds),分母是嘀嗒数(tick)。意思是一个滴答耗时多少秒。

    • 若是分数,则会相应设置分子和分母。
    • 若是整数,且输入时间码文件由tcfile-in设定,则会使用该值作为分子,然后相应生成分母。
    • 若是整数,且未设置时间码文件,则会使用该值作为分母,并由输入视频生成"每帧嘀嗒数"。

    与--force-cfr模式不兼容。

  • 推荐值: 默认

dts-compress

  • 默认: 未开启
  • 说明:小功能,仅用于FLV和MP4容器,以绕过某些有问题(认为DTS都是正的)的解码器。对于此改变,谨慎使用.
  • :DTS指的是解码时间戳(Decode TimeStamp)。每一帧都分配了一个DTS,对应其在流媒体“编码顺序”中的位置,不同于由显示时间戳(Presentation TimeStamp)指定的“显示顺序”。各帧在视频流中保存的顺序与显示的顺序不同(由于诸如B帧压缩之类的压缩技术),造成某些帧需要后续显示的帧的数据。

Filtering(滤镜)

video-filter

x264滤镜系统用于在编码前处理输入视频。可以一定次序使用多个滤镜。
滤镜基本语法如下:

--video-filter <filter>  

多个滤镜依此用/分隔:

 --video-filter <filter1>/<filter2>  

可以“连接”随意多个滤镜。
可用滤镜包括:

crop

  • 句法:crop:left,top,right,bottom
    切除画面边缘的像素。
    • 对于yv12i, i420i, nv12i格式的输入视频,在高度上切除像素个数必须为4的整数倍。
    • 对于yv12p, i420p, nv12p格式的输入视频,或以上未列出的其它隔行视频作为输入视频,在高度上切除像素个数必须为2的整数倍。
    • 对于i420, i422, yv12, yv16, nv12, nv16格式的输入视频,在宽度上切除像素个数必须为2的整数倍。

resize

  • 句法:resize:[width,height][,sar][,fittobox][,csp][,method]
    Resizes帧,或转换色彩空间。需要x264编译时包含libswscale
    有以下几种resize模式:

    • 仅分辨率(Resolution only): 将画面resize到指定分辨率,并改变SAR以避免拉伸
    • 仅SAR(SAR only): 设置SAR,并将画面resize到新的分辨率,以避免拉伸
    • 分辨率+SAR(Resolution + SAR): resize画面至指定分辨率,并指定SAR值,允许存在拉伸
    • 适应(Fittobox): 根据指定的画面大小resize画面,自适应分辨率,以保证SAR为1:1
    • 宽度(width): resize画面以符合指定的宽度
    • 高度(height): resize画面以符合指定的高度
    • 宽高(both): resize画面以符合指定的画面大小限制
    • 适应+SAR(Fittobox + SAR): 与普通Fittobox模式类似,但按指定的SAR生成画面,将视频缩小使可变视频符合指定的大小限制。

    与resize模式无关的选项有:

    • csp: 同时将画面转换至指定的色彩空间,可用色彩空间列于x264 --fullhelp
    • method (默认为bicubic): resize画面,并指定resize方法

    fastbilinear, bilinear, bicubic, experimental, point, area, bicublin, gauss, sinc, lanczos, spline
    例子:

resize:width=1280,height=720,method=spline 

select_every

  • 句法:select_every:step,offset1[,offset2,...]
    仅"选择"一部分输入帧进行编码,丢弃其它帧。每隔step个帧,仅使用指定offset位置的帧。比如:每隔两帧采用一帧
select_every:2,1  

每隔三帧,丢弃第三帧

select_every:3,0,1  

参考链接

[1] x264源文件树下的所有文档. 最高级别的功能解释文档。有些文档很老了,但依然准确。
[2] Linux下编码 - x264编码参数指南. 应用性很强的x264参数。大多数由x264开发者Dark Shikari所写。
[3] Lord Mulder的Avidemux下x264指南. 这家伙所写. 如果你不介意太罗嗦,以及很多斜体字,还是值得一看的。
[4] Blu-Ray的x264编码. 很强大的例子。
[5] ffmpeg转换参数和压缩输出大小的比率

更多资料,更多分享

音视频技术交流群1 已满
音视频技术交流群2 已满
音视频技术交流群3 群号782508536

最新文章请关注以下专栏:
简书专栏:https://www.jianshu.com/nb/29979868
知乎专栏:https://zhuanlan.zhihu.com/multimedia

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • FFmpeg X264编码参数 目录 码率控制 1 X264的preset和tune 2 编码延时建议...
    古则阅读 28,626评论 1 15
  • 更多音视频知识请点击:专注音视频开发 概述 关键的参数 该篇主要是探讨转码相关的技术点,比如: 视频尺寸:指的就是...
    C_GO流媒体后台开发阅读 2,725评论 0 3
  • 相关 x264编码示例 源码分析 h264编码原理复杂,参数众多。为了方便使用无论x264还是其他编码的实现框架,...
    Don_阅读 2,106评论 0 1
  • 日子有些慢下来了。 可心并没有为此停一停。 夏风偶尔吹过,夜依然凛凛。 一些一夜长起的被栽培的花, 伴着嚣张的日光...
    歆芮阅读 241评论 0 0
  • hmm 看到了以前很喜歡的喜愛的小男孩,寫著充滿了躁動和生氣的文章,想起了以前一直講夢想的自己。是不是,我們都能夠...
    用戶名很忙阅读 129评论 0 1