米饭影视资源网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 15133|回复: 19

[教程] x264 设置(翻译及解释)

[复制链接]
发表于 2011-10-21 17:01:37 | 显示全部楼层 |阅读模式
解释x264命令可选项的用途和使用方法。同执行 x264 --fullhelp 显示顺序。本文主要翻译:mewiki.project357.com/wiki/X264_Settings,同时参考doom9 论坛、Silky Bible、以及其它互联网资料加以注解。" b  `  B3 ~8 H. D2 b" q7 I8 L
词汇翻译:
' H! }7 ^3 d, b8 ^macroblock:宏区块。是一种图像压缩的术语。
6 q3 O: y8 @0 a% C0 C& Q* F$ v& T宏区块是运动预测的基本单位,一张完整的图像(frame)通常会被切割成几个宏区块。h.264 的宏区块大小是可变的,常用 16x16 pixels。! e) {2 O: Q7 L% W% h
帮助' w; T# G3 b" b) }
X264 内置帮助文档。运行 x264 时带上 --help、--longhelp 或者 --fullhelp 即可看到帮助信息。三个选项给出的信息一个比一个详细。
5 r) m$ Z3 L& `4 A5 \0 s% J' V3 F输入4 F+ c) J6 L4 n+ \% ]! y6 p
使用单一位置参数指定视频源。如:4 M# _6 C" U- Z1 t2 ^
x264.exe --output NUL C:\input.avs
* x( Y. F+ N; v/ x- ]6 Vx264 --output /dev/null ~/input.y4m
' q5 Z' h+ x" s- N3 M当输入是原始 YUY 数据时,必须告诉 x264 分辨率。同样的还要指定帧率:
4 Y  ~$ u  Y; P. E0 E2 L4 Wx264.exe --output NUL --fps 25 --input-res 1280x720 D:\input.yuv
+ y( F7 ?4 D: }x264 --output /dev/null --fps 30000/1001 --input-res 640x480 ~/input.yuv. c) o. h+ l* M

) i* v& b2 G% s预置 选项8 h, _6 y. a; o9 R0 [
预设的成套选项,方便、好用、少出错。更详细信息参见 x264.exe --fullhelp
5 u8 m0 t# E: D- v% N! PProfile
0 p4 P+ U1 a! k. C( L& h默认值:未设置
/ ^% |8 A$ C4 R! D限定编码输出流的等级。如果你指定了等级,它将取代全部其它选项,所以使用等级选项可以得到良好的兼容性。但使用等级选项,就无法使用无损压缩(--qp 0 or --crf 0)。
. x8 `7 ~. A) N, n1 l如果你的播放器仅能支持特定等级的话,就需要指定等级选项。大多数播放器支持高等级,就不需要指定等级选项了。0 c1 t0 g' T: e" I- i9 i5 @
可选项: baseline, main, high.
* S/ f; `! B  a4 H9 I- r" SPreset, F, \% U7 J$ a
默认值: medium
0 R7 I# C! P( Y3 M: T3 h" \选择预设配置需要综合考虑压缩效果和编码速度。; D5 X0 U! R# A  M0 L4 W3 {
修改 x264 参数顺序:预设配置先于其它选项。
, b, e* ?  |$ S& q. q+ ~最好设置为可以接受的 slowest。3 D2 g9 k3 o* F+ h3 r( }
可选项: ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo.
8 d! n6 r! h% f7 w9 j/ J+ [个人体会:slow, slower, verslow 质量基本相当,slow 略差一点。placebo 反而不如那三个,但速度却慢的多。建议使用 slower。
1 D7 X* u2 a6 V: w: a5 J/ y) ATune
0 V- ]1 v% k3 l& ]+ I4 x/ V+ @默认值: 未设置' Y2 b2 W! S: @" l: P2 U
对输入内容进行优化。
) {- d! B; d2 l; G( I9 K, S& m修改 x264 参数顺序:调优项后于 --preset,但先于其它选项。
9 g  \* m8 e" C$ p. W如果源内容符合下面的条件,可以使用调优,否则就不要用。1 `9 L" r; Z/ q1 u/ ]5 C: H+ |
可选项: film(胶片电影), animation(动画片), grain(颗粒感很重的), stillimage(静态图像), psnr(信噪比。参见:http://baike.baidu.com/view/1624289.htm), ssim(结构相似性。参见:http://baike.baidu.com/view/1559204.htm), fastdecode(快速解码。主要用于一些低性能的播放设备), zerolatency(低时延。主要用于直播等).
/ y! y1 A" t0 q0 s0 ]slow-firstpass
( I- z" J! s( U3 q0 N  j默认值: 未设置
& z3 A: D* V/ Z--pass 1 选项隐含把下列参数追加到 x264 命令行末尾:. O  A& i5 r% W2 D
•        --ref 1
1 o4 o  E- |% b7 |; g& [6 l6 {•        --no-8x8dct
3 P( L' C3 \* x6 C3 R•        --partitions i4x4 (本来有,继续有;本来无,则没有)
* f" ]+ t3 `4 w2 m# W/ o•        --me dia
0 `0 k7 `2 \% r! i4 I2 _•        --subme MIN( 2, subme )4 n1 I; U: k" Q; k
•        --trellis 0  h6 V  L; |/ _  w; _
可以使用 --slow-firstpass 关闭 --pass 1 这项特性。. E3 J, C$ v4 V( e0 @0 r
注意:使用 --preset placebo 隐含应用 slow-firstpass 选项。
4 l5 c/ u, g5 C9 `) K) M& Y; J参阅 --pass 选项。
2 f& I  W7 p* i1 ~0 J7 y) G
* Y/ S, M2 I8 t4 \0 K9 K帧类型 选项
: d" }3 |; j  Q& K& M8 G- e$ O“帧”基础知识:7 n, l- W- S/ b+ d
影片可以看作是由一张张连续的图片组成的,每幅图片就是一帧。压缩的视频由3种不同类型的帧(Intra (I) frames (也叫 key frames),Predictive (P) 和 Bidirectional (B) frames)组成。2 C4 m2 n) f0 W% }1 v
特定类型的帧之间可以参考,意思是一幅帧有时仅需保存自身与被参考帧的不同之处即可。不过参考模式会导致错误延续传播,即 X 帧出错,参考它的 Y帧也会出错,那么参考 Y 帧的 Z 帧也会出错。。。,后果很严重,所以视频里一定要有不能被参考的帧。. o% R1 Y, N& G# Z. Z- X: m
I 帧需要包含完整图像信息,所以压缩的少,体积大。在视频播放中,跳跃式快进(快退)时需要 I 帧,有的视频快进后黑屏,就是在新的播放位置还没有找到 I 帧引起的。
  n! O1 ~3 u) c3 NP 帧保存自身与 I 帧或其它 P 帧之间的差异。P 帧可以被当作参考帧,它需要包含足够多的信息,由于采用运动补偿压缩技术,P 帧比 I 帧保存的内容少。2 Y% k; Z8 \4 `" {- Y) Y6 k* `
B 帧也是保存自身与其它帧之间的差异,它既可以参考它前面的帧也可以参考它后的帧(播放顺序),但是它不能作为参考帧(特殊的"B-frame pyramid" 除外)。H.264 支持"B-frame pyramid",这种特殊的 B 帧可以被另外的连续 B 帧参考,除此之外,B 帧不能被其它帧参考。B 帧的压缩最大,包含的信息最少。! B/ E! Q" G& ^: Q: {
图像质量高、压缩率高的视频就是I、P、B 帧的完美结合。( z# a1 O2 P+ Y1 }
Keyint. }- F# Y+ K3 [% @  B- f
默认值: 250 # m1 V; t2 p$ Q. \9 W
设置 x264 输出流中两个IDR 帧(也叫 keyframes 关键帧。IDR英文原意为“瞬间解码刷新”)之间的最大间隔帧数。也可以定义“无限”从而不再插入非场景转换 IDR 帧。
& ~) M' z) Q. s) X  Y& d4 p. sIDR 帧就像视频流里的‘分隔符’,位于它前后(播放顺序)的帧之间是不能相互参考的。而且 IDR 帧也是 I 帧,因此它也不能参考其它帧。这些特性意味着它们可以作为视频跳跃播放时的新开始点。
# l6 |# \; W2 |0 s% L一般情况下 I 帧比 P 或 B 帧体积大的多(在低运动场景中常常是10倍或更大),当和低 VBV 设置并用时会给码率控制带来极大的麻烦。关于这种情况,参考 --intra-refresh。/ _4 C( l3 G1 F8 @3 y. {) c
默认设置适合大多数视频。但当用于蓝光、广播、生活录像或其它专业录像时,可能需要较小的 GOP (图像组。一个GOP就是一组连续的画面。)长度(常常为fps 的1倍左右)。
- F9 l! ]9 O3 W: M& Y( q7 y参照: --min-keyint, --scenecut, --intra-refresh* ]" t! \7 k# B  d
min-keyint
* P; k4 w5 e5 F  k默认值: auto (取 --keyint/10 和 --fps 两个中的最小值)0 {; b1 V' j  n: P( D( w
设置两个 IDR 帧之间的最小间隔帧数。
* l# o+ j3 Y8 v  z; P, X( ]; O阅读 --keyint 了解 IDR 帧。非常小的关键帧范围会造成错误放置 IDR 帧(例如:频闪场景)。选项限定在每个 IDR 帧之后放置 IDR 帧的最小间隔。$ s  k" d- s1 k. N
min-keyint 最大允许值为 --keyint/2+1+ B! q  g5 r) ]$ C
推荐: Default, 或 1倍的framerate.* \6 j( u, s# [+ b4 c. T) n
参照: --keyint, --scenecut6 L7 s) `2 p( N7 E- N3 r1 n) I
no-scenecut
0 b' R9 B$ b9 X" f7 r! V默认值: 未设置1 u/ d% p. Y/ q  P; d1 z* R, `; p& q3 p
完全关闭自适应 I 帧决策。
* n3 E* |. \6 q2 y) `+ G参照: --scenecut
# x( p+ f, R3 f, Y2 z9 V8 Z* Kscenecut1 w' o* B6 l, `7 W6 T$ {6 m+ d! o
默认值: 40
. i! j% N, N+ N1 v) c设置放置 I 或 IDR 帧的阀值(阅读:场景变换检测)。
4 X+ k% b+ v, O9 G3 H" Wx264 为每个帧计算一个度量来评估它与它前面的帧有多大不同。假如值小于 scenecut 设定值,意味着发生场景切换。如果此帧与前面最后一个 IDR 帧间隔小于 --min-keyint 就放置一个 I 帧,否则就放置一个 IDR 帧。过大的 scenecut 值会导致产生大量的场景切换。欲详细了解场景切换的比较过程,请参考http://forum.doom9.org/showthread.php?t=121116+ j+ ~5 }; Y9 H2 C6 N2 }3 a
scencecut 设置为0时相当于--no-scenecut。7 m, }, |3 ~1 P# v/ v
推荐: Default
5 m# s( ?. k' K8 {/ P参照: --keyint, --min-keyint, --no-scenecut4 b$ J9 y7 f, \0 H( z2 E
intra-refresh. k9 y- ^& i$ \2 P% ]
默认值: Off
" d" d) D5 |6 I# ]禁用 IDR 帧,取而代之的是 x264 对位于 --keyint 位置的帧采用宏区块内编码方式。这样做的好处是可以获得比使用 IDR 帧更恒定的帧大小,对要求低时延的视频流更有利。同时也增加了丢包后的视频流恢复能力。这个选项会降低压缩率,因此仅在确有必要时才使用。: q" n& E# n9 K* A
个人理解:IDR 帧虽然也是 I 帧,即本身是自解码帧,不需要参考其它帧来解码。但是 IDR 帧内部各宏区块之间是互相参考的,如果传输过程中某宏区块丢失,会导致整帧无法解码。
/ d& |9 J  |& x9 O4 dBframes# e& j. m" P* i+ ]: t
默认值: 3
5 E( R# C4 H- y6 n% ^设置 x264 可以使用的最大连续 B 帧数量。* m3 Z4 R/ k9 h+ e) d* d
如果没有 B 帧,典型的 x264 流的帧类型就像:IPPPPP...PI。如果设置 --bframes 2,两个连续的 P 帧将被 B 帧代替,就像:IBPBBPBPPPB...PI。
# p+ U# Y/ i6 ]  m除了 B 帧可以参考后面的帧(播放顺序)外,B 帧和 P 帧差不多。向后参考可以极大提高压缩率。B 帧的平均质量由 --pbratio 控制。
4 ^$ N( Z5 J9 o7 t, w  O有趣的现象:
0 ~" q0 |2 }6 `7 `6 M; h: m•        x264 偶尔需要区分两种不同类型的 B 帧。一个‘B’帧可以参考另一个用于被其它帧参考的 B 帧(见 --b-pyramid,这里的 ‘b’指的是参考了别的B帧的帧,而 B 不是。假如你看到既‘b’又有‘B’,就是这个意思。当不需要区分的时候,用‘B’代表所有的 B 帧。)
* ?7 E* C! B* F! a7 W4 s) I- o•        欲详细了解 x264 压缩时如何把候选帧确定为 P 或 B 帧,请参考http://article.gmane.org/gmane.comp.video.ffmpeg.devel/29064。这种情况下,帧类型看起来就像(播放顺序)(如果 --bframes 3):IBBBPBBBPBPI。% y& x+ C& G& H% K6 \; t5 i
参照: --no-b-adapt, --b-bias, --b-pyramid, --ref, --pbratio, --partitions, --weightb: r5 T  y. a1 ]$ X/ C
b-adapt
" g0 O7 M' X% W默认值: 1 . O' z- a; f0 u1 X$ B9 w3 E
设置放置 B 帧决策算法。控制 x264 如何在 P 或 B 帧之间抉择。0 ?( H' V/ @  d2 J5 c# d) `
0.关闭。总是选择 B 帧。与老的 no-b-adapt 选项相同。
- Z8 ~, C" {/ Q. x6 h1. 快速算法,较快的,当 --b-frames 值较大时速度会略微加快。采用这种模式时,基本都会使用 --bframes 16。
0 {$ j! E) Q1 O  m; i$ R2.最优算法,较慢的,当 --b-frames 值较大时速度会大幅度降低。" v1 O& h" @; S5 a$ {" H% |
注:当采用多遍编码时,仅需在决定帧类型的第一遍编码中使用。0 A; t0 N4 J- w" ]
b-bias) a+ F$ Y: d" v3 X# m$ E
默认值: 0 3 S  Z' X# b9 K6 O+ i* u
控制用 B 帧代替 P 帧的可能性。值大于0增加采用 B 帧的可能性,小于0则相反。这个数没有度量单位。范围从 -100 到 100。值100不保证都是 P 帧,值-100不保证没有 P 帧(真想没有 P 帧可以使用 --b-adapt 0)。0 X8 ^8 ~6 A8 d0 Z" h
仅当你感觉能比 x264 更好的控制码率的时候采用。( c. ~" Z! g: i+ g) K, P! b4 m! g, U
参照: --b-frames, --ipratio
4 Z- m( |/ p; O7 M+ Yb-pyramid
2 c/ {' n/ P  i4 U! X& z5 `- Y; v默认值: normal / X" ^6 N+ e/ A6 Q* j
允许 B 帧作为其它帧的参考帧。不设置,就只能参考 I 或 P 帧。尽管高质量的 I/P 帧作为参考帧更有价值,但 B 帧也可以作为参考帧。作为参考帧的 B 帧将被量化至 P 帧 和普通 B 帧之间(所谓的半量化)。 --bframes 至少为2时B-pyramid 才开始工作。
  w/ K4 t+ _$ Z8 L( q8 u压制蓝光时,使用'none' 或 'strict'。7 p6 f' Q) j/ \) o- y( C! c3 |
•        none: 不允许 B 帧作为参考帧。
. t3 l) B7 B- i- Q% k6 |3 x! D•        strict: 蓝光标准强制性规定:每个 minigop 中只允许一个 B 帧作为参考帧。  z' ]0 v, H2 z0 w2 V% T+ ~& F
•        normal: 每个 minigop 中允许任意数量 B 帧作为参考帧。
+ l$ M7 Q- M3 D* {# q& {. f3 X参照: --bframes, --refs, --no-mixed-refs8 B" M$ N8 @# Q6 S7 Z3 h( \: G) m
open-gop
( h1 d* m2 a- l5 \5 u; O默认值: none
( j$ ?6 P  f3 d. YOpen-GOP 是一种提高压缩率的编码技术。有三种模式:0 p8 Q" W; P; \; j% e% x* U
•        none: 关闭" O2 V- j: O" u8 Y5 j9 q; t
•        normal: 启用
) Y' ~( g" c: K1 ~) R•        bluray: 启用。一个较低效率版本的 Open-GOP,当压制蓝光时 normal 模式不能工作。7 k- \1 Q* g; [1 K. ]' i
一些解码器不完全支持Open-GOP 流,这就是为什么默认是关闭的。你需要测试播放视频流的解码器,或者等到Open-GOP 被普遍支持。4 f: u- o! m  _
Open-GOP 的解释:http://forum.doom9.org/showthread.php?p=1300124
4 f/ b. I: t" B5 |$ }) o4 a; Dno-cabac# O5 f9 N5 A4 S, Z6 F$ @; [+ l6 ~- Q
默认值: 未设置  g  ^  p/ O: }0 O  w8 ~8 V
禁用CABAC (Context Adaptive Binary Arithmetic Coder) 流压缩,转而使用较低效的CAVLC (Context Adaptive Variable Length Coder)。显著降低压缩率(一般为10-20%)和解码能力要求。
$ f  L- N6 @$ T3 rref
; `3 F5 k9 b2 j, m1 l默认值: 3
. ]' S% B9 {' |1 z. j0 R控制 DPB(Decoded Picture Buffer(已经解码图像缓存))大小。范围为0-16。简单的说,就是每个 P帧可以在它前面多少帧中选取参考帧(B 帧要少1个或者2个,取决于它们是或否作为参考帧)。最小值是1。
5 x+ m; h9 V) P* Q8 xH.264规范限定每个 level 的 DPB 大小。如果遵守 Level 4.1 规范,720p 和 1080p 视频最大的 refs 值为9和4。6 o. S7 U" l7 n% h- G6 `  c+ L2 P4 c
参照: --b-pyramid, --no-mixed-refs, --level" e4 }8 e& U6 a, ?+ `2 N
no-deblock
4 b4 f' |) [; [2 b) r' v默认值: 未设置0 ^, Z+ \7 w6 {: m4 A7 l2 }6 m
关闭 loop filter(环内滤波)。不推荐。: [9 C. E. V4 y9 }3 D- T. D
参照: --deblock
# P7 R6 d! K& s1 W; ^# Y4 o+ E8 x( ideblock- n8 \2 `  C  Z# A" @
默认值: 0:0
0 S4 m2 ?) A$ i; L8 I" d控制 loop filter(环内滤波。也叫 inloop deblocker),是 H.264 标准的一部分。就平衡编码时间与图像质量来说它非常有效。' w) h2 a3 L! x8 [
参考 http://forum.doom9.org/showthread.php?t=109747(楼主帖和 akupenguin 的回复)来了解 loop filter 参数如何工作。) M( B5 e1 s# E5 y  s+ ?7 L3 r
注:楼主(*.mp4 guy)的描述有误,仔细看 lovelove 的回复。& g) i- F- S" W! _* j7 Y
参照: --no-deblock
; i) L1 U  w+ `1 d! D, kslices  k1 z- N7 p$ [2 c7 f
默认值: 0
' ~0 p& J6 ?4 G: e7 T设置每帧的分片数量,并且强制矩形分片。
" N1 X2 S. e/ o编码蓝光时设为4,除此之外不要使用这个选项,除非你知道你在干什么。
4 N( W& b2 A) r# t* O9 P* Z- i参照: --slice-max-size, --slice-max-mbs.$ f$ K# ?4 s8 t
slice-max-size
3 x$ P  _1 v, E  v3 g默认值: 0- s, o* P' Q1 d5 g
以字节为单位设置切片最大尺寸,包括预估的网络层开销在内。(目前和 --interlaced 不兼容), `; r1 T" j% F) x5 x; n* ?: F
参照: --slices9 B$ v& i$ K8 Q1 i- X( H2 t! y$ H
slice-max-mbs( T* d0 z" q  c% f/ j* |
默认值: 0
1 O0 v5 G  p  ^- j' Z以宏区块为单位设置切片最大数。(目前和 --interlaced 不兼容)4 v3 \2 u/ ?# W
参照: --slices
, M* S" x5 x2 u7 P9 K, p) otff
) ~7 }! s) X5 n5 @5 z+ C- @8 K6 l开启隔行编码方式,并指定 top field(顶部图场)在先。x264的隔行编码使用 MBAFF,不如逐行编码效率高。因此,只有需要在隔行扫描设备上播放时才开启隔行扫描编码(或者是视频流在送给 x264 之间无法完成反隔行变换)。隐含应用 --pic-struct。. H- b  N' K8 ]8 ^% Y( U) I
bff
. Y* Q1 R' |3 k; F0 g4 j2 a开启隔行编码方式,并指定 bottom field(底部图场)在先。更多信息见 --tff。
# z( A! M6 A0 aconstrained-intra
; P% ^0 W6 V0 E0 [! H% U- f5 T' R% G; p默认值: 未设置
! H; U' d3 Q  ~9 ^$ C% c2 Y8 t; S: P开启强制内部预测,这是 SVC 编码的基本要求。由于 EveryoneTM 放弃了 SVC, 你也可以无视这个选项了。
/ d3 p4 l  x: U; ypulldown
: D* P: ?" L* n$ V& w默认值: none
/ p  ]$ U$ R' N‘软’胶卷过带(逐行,恒定帧率。之所以叫‘软’是因为大部分胶卷过带是硬件实现的)。更多解释见http://trac.handbrake.fr/wiki/Telecine。可选项:none, 22, 32, 64, double, triple, euro.
; P" u. O  ?4 G9 D7 j除 none 外其它选项隐含应用 --pic-struct。
  [9 H# Y- o% }  x. XTelecine(胶卷过带)和 IVTC(inverse telecine。反胶卷过带)实现方法:2 I9 Z6 C" B6 P
电影原本是 24fps 的,如果要在 NTSC 制式的电视上播放,就需要胶卷过带,在此过程中,会把影片经过 3:2 pulldown 转为 30fps。
( v# ^3 B; U0 |! U: b/ R把电影原本的 1 2 3 4 四个帧,拆成 1o 1e 2o 2e 3o 3e 4o 4e,每个帧拆成奇数扫瞄线组成的奇数图场(Odd Field)和偶数扫瞄线组成的偶数图场(Even Field)。重新组合如下(以 Odd Field First 的顺序)
# Q" o" i, ^+ B3 T# O: l. y) [7 e1o 1e - 2o 2e - 2o 3e - 3o 4e - 4o 4e
5 }- c% f- S( T1 p[ A ] - [ B ] - [ C ] - [ D ] - [ E ]5 g  {; M6 c; n6 J+ a
每两个 Field 再重新组合成一个帧,就变成 [A][B][C][D][E] 五个帧。这样由原本的 4 张变成 5 张,4*6 = 24 => 5*6 = 30,就能从 24fps 转为 30fps。
  R" Q2 S" @1 k' m( U, Y0 J理解了胶卷过带,再理解 IVTC 就容易了。IVTC,将 30fps 转回 24fps,这样压缩的画面张数由 30fps 减少为 24fps,少了 20%,等于码率增加 20%,而且画面无交错容易压缩,所以压出来的画质会好很多。  {8 ^1 K. r: l/ ^: G
fake-interlaced( ^$ A) M& L/ ]) F# V6 i2 Z0 w
默认值: 未设置5 F9 h& o- c7 \: y
把视频流标记为隔行方式,即使它不是隔行方式编码。允许编码 25p 和 30p 蓝光兼容视频流。: q6 H+ t, B  e( b0 ?
2 G& Q! ?+ I1 k: _2 B* p4 `. \5 j' O
码率控制
7 L9 d& x. \8 z( a# X1 J1 uqp
( J. U: M, |0 f* H默认值: 未设置; E/ ?/ j: D0 A7 `. C0 w
三种可用的码率控制方法之一。以恒定量化值(Constant Quantizer)方式编码。此选项的参数用于指定 P 帧量化值。I 和 B 帧的量化值由 --ipratio 和 --pbratio 控制。CQ 模式的目标是恒定的量化值,这就意味着最终文件大小不可知(尽管能用一些方法预测)。参数 0 表示无损输出。同等的视觉质量下, qp 比 --crf 产生的文件要大。由于固定量化值的缘故,qp 模式会关闭自适应量化。
2 y" z, w: m7 y" T本选项与 --bitrate 和 --crf 是互相排斥的,就是三选一的意思。欲详细了解码率控制,参见http://git.videolan.org/?p=x264.git;a=blob_plain;f=doc/ratecontrol.txt;hb=HEAD
: _( l8 ?$ P: y) F. x; R可以使用 --crf 代替 qp,不过 qp 模式不需要预分析会更快一些。( h5 f4 |( L, a
参照: --bitrate, --crf, --ipratio, --pbratio8 n# |, X$ }$ @0 ^
bitrate8 ?& M- \8 Q" o" Z( N( d
默认值: 未设置; e7 F) }% M  b+ ^  o
码率控制方法之二。以比特率(bitrate)作为目标的编码方式。最终文件大小可知,但最终图像质量不可知。x264 把给定的比特率作为总平均值来作为目标,也就是说每帧的比特率可能不符合给定的比特率,但是总体平均比特率符合给定的比特率。比特率的单位是 kilobits/sec(8bits = 1字节)。需要注意的是 1 kilobit 是 1000 bits,而不是 1024 位。
% M5 M5 I: x4 [4 L$ @  r这个选项常和 --pass 一起用于2遍编码。
( e. W5 F8 G1 j. ]8 s本选项与 --qp 和 --crf 是互相排斥的,就是三选一的意思。欲详细了解码率控制,参见http://git.videolan.org/?p=x264.git;a=blob_plain;f=doc/ratecontrol.txt;hb=HEAD
, ]: o/ k- D6 E; \1 _: E参照: --qp, --crf, --ratetol, --pass, --stats
6 V4 j: E( d9 V/ Jcrf* F0 w$ O- B8 |+ O" C
默认值: 23.0
- j9 V$ X- O  a9 H) z最后的码率控制方法:恒定比例因子。(Constant Ratefactor。也叫恒定质量)。qp 的目标是确定的量化值,bitrate的目标是确定的文件大小,crf 的目标是确定的‘质量’。这个概念就是 crf n 能给人以 qp n 相同的视觉质量,仅仅体积小一些。crf 的单位是“ratefactor”。) Z  ~- B0 t& H3 Z1 w" _" ?
crf 依靠降低‘不太重要’帧的质量来达到减小体积的目的。在这里,‘不太重要’是指帧包含复杂或高速运动的场景,在这些地方保持与其它地方相同质量的代价很高(即耗费比特)且又缺乏可视性(就是正常播放的时候看不清楚的意思),就增加它们的量化值(量化值越大图像质量越差)。把节省下的比特用到刀刃上。* {( \( x( s$ A) m! L* B- P& h# J, C
crf 比2遍编码方式节省时间,因为它少了一次编码。另外,crf 的最终比特率是不可预测的,即文件大小不可知。使用哪种码率控制方式取决于你。
" {+ m9 `; J( W# `0 J- r5 @0 D; \本选项与 qp 和 --bitrate 是互相排斥的,就是三选一的意思。欲详细了解码率控制,参见http://git.videolan.org/?p=x264.git;a=blob_plain;f=doc/ratecontrol.txt;hb=HEAD
) g( j/ O! g( _1 ^/ x0 o参照: --qp, --bitrate
$ ^: G* g) e) c/ `7 S+ l! _rc-lookahead
$ y- w) G+ A* \2 a5 F$ M默认值: 40
5 W% E5 O" _( O% [. i3 O/ p设置用于 mb-tree 码率控制和 vbv-lookahead 的帧数。最大允许值为250。! o; x7 l1 j1 g2 o7 K& H
对于 mb-tree,增加帧数能得到更好的结果但是会更慢。mb-tree 的最大值是 rc-lookahead 和 keyint 中的最小数值。
" |8 u' T6 u# _$ e8 [对于 vbv-lookahead,增加帧数会更稳定和精确。vbv-lookahead 的最大值是:MIN(rc-lookahead, MAX(--keyint, MAX(--vbv-maxrate, --bitrate) / --vbv-bufsize * --fps))
/ F: x8 ~: t4 l$ y3 e) b参照: --no-mbtree, --vbv-bufsize, --vbv-maxrate
$ e5 _+ I  v- S5 dmb-tree 的解释:http://baike.baidu.com/view/3098244.html
) g8 F% o3 E2 evbv 的解释:http://baike.baidu.com/view/1519233.htm
. R7 g5 B  L7 R% H' y4 k$ A. xvbv-lookahead 是vbv 预检测。
) ~- @5 d! b& t& R& N6 H" fvbv-maxrate
: H0 W' \* u) p6 e( ^% o默认值: 0- g6 F( P) K$ w9 @1 J( V3 G. b. D
设置 vbv 缓存被再充满的最大码率。由于 vbv 缓存充满会造成溢出,为防止溢出发生,视频的最大码率不能超过 vbv-maxrate。- c( R  N6 ]" L& h1 d
vbv 降低图像质量,仅在确实需要时再使用。
" _" i2 c( N: d- t: X参照: --vbv-bufsize, --vbv-init 和 vbv 编码建议:http://mewiki.project357.com/wik ... stions#VBV_Encoding. ?1 g# l4 C1 I" b  Q
vbv-bufsize( _1 s" b, C- @/ [, F
默认值: 0
$ L8 [4 v1 ?6 K; w: ^) _以 kilobits 为单位设置 vbv 缓存大小。
) B0 b4 u! L4 `. K2 I, xvbv 降低图像质量,仅在确实需要时再使用。
/ e. z6 D1 I4 |( Q6 U! m参照: --vbv-maxrate, --vbv-init 和 vbv 编码建议:http://mewiki.project357.com/wik ... stions#VBV_Encoding7 Z2 C# ^& I4 V/ ~
vbv-init$ ~9 C# `; P; T; r" r6 f
默认值: 0.9
/ R1 q7 M( i  w4 b% R设置开始播放前 vbv 缓存必须的充满率。/ u8 y, k9 z, `* [1 N  W" N$ M
假如小于1,初始填充量为 vbv-init * vbv-bufsize。反之则是单位为 kilobits 的初始填充量数值。
8 s% x! X2 @5 E8 E; e8 C参照: --vbv-maxsize, --vbv-bufsize 和 vbv 编码建议:http://mewiki.project357.com/wik ... stions#VBV_Encoding4 v7 l- |# m( a2 _$ Y; o
crf-max2 I! E) \& H2 H  q
默认值: 未设置. C* B& Z2 t/ h5 ]- I
类似 --qpmax,除了把指定最大量化值改为指定最大比例因子。仅当使用 crf 并且 vbv 有效时起作用。让 x264 即使违反 vbv 约束也不能把比例因子(也叫“质量”)降低到给定值之下。常用于定制的流媒体服务器。更多信息参见:http://git.videolan.org/gitweb.cgi/x264.git/?a=commit;h=81eee062a4ce9aae1eceb3befcae855c25e5ec528 s; |8 O1 [! j1 q
参照: --crf, --vbv-maxrate, --vbv-bufsize0 M  t1 a4 |+ q% N3 H2 M" X* \
qpmin9 a4 Y5 `- C* {- S2 @
默认值: 04 [$ N9 L4 p/ }& N" f9 ]4 I. R( e
定义最小量化值。量化值越低,输出越接近输入,到某个量化值,输出看起来就和输入一样,尽管并不是真的相同。通常没有理由让 x264 在特别宏区块上浪费码流。
9 n, Z% H$ D3 O9 u当自适应量化开启时(默认开启),提高 qpmin 是不可取的,因为这样会降低帧中平坦背景区域的画面质量。) U/ _* y( z4 A' a) R* t, B! ^2 W; ~2 I
参照: --qpmax, --ipratio$ N0 ~+ D4 z, L, ]' @
qpmax
: o0 j2 ^( ^9 m) ~- z4 W+ j/ N默认值: 51
9 c5 K2 S9 r$ q0 W+ V+ |" Q和 qpmin 相反,定义最大量化值。51是 h.264 规范中可以采用的最大量化值,质量相当低。默认值相当于禁用 qpmax。假如想控制输出的最低质量,也许你会把它设的低一些(30-40是你能设的最低值),但不建议调整它。
# y, \5 Z4 y+ \! ?参照: --qpmin, --pbratio, --crf-max  p8 u; z2 r) u8 v. B" \
qpstep
3 o; n' X4 n- e, P. v* C默认值: 4
, k$ `" L! P( a  ~. r, u设置两帧之间量化值的最大差值。% Q3 T6 I: l, T* l1 {
ratetol: ?  @' z- O4 t0 x
默认值: 1.09 |) j/ ^# f( t4 Y! t' t$ E1 {
这是一个双用途参数:
' e( g5 W& l, s0 J( T0 ~9 h! Y•        在 1-pass 编码中,告诉 x265 可以与设定比特率相差百分之几。可以设置为‘inf’来彻底关闭码率溢出检测。最低可设为0.01。设的高些有利于 x264 处理影片末尾的复杂场景。单位是%(例如:1.0 就是 1% 的比特率偏差)。) _2 U6 |1 Q( r2 s6 ?* R
许多动作片等,结尾都是火爆场景。但 1-pass 不知道这些,常常会低估影片末尾的码率需求。inf 参数让编码更像 --crf 模式来缓解这个问题,但文件大小会超标。
6 e+ @9 V! n* k: ~6 d/ D, P! E  X1 e•        当 vbv 启用时(例如:使用带 --vbv 前缀的选项),这个设置也影响 vbv 的作用强度。设的值越高,vbv 的波动范围就越大,甚至会有突破 vbv 设置极限的可能。由此,度量单位可以是任意的。/ w' Y- x& `) `+ o
ipratio
  g1 u7 W' k7 `1 h! D默认值: 1.40
* i9 N) J3 Z& `6 ]修改 I 帧量化值比 P 帧量化值的平均增加量。值越大生成的 I 帧质量越高。
' A2 |- y" f1 a) a5 n, W参照: --pbratio7 O$ {0 u, P  h( R  }
pbratio& N4 g2 g4 p7 q7 {/ L9 f
默认值: 1.30& Z+ ?5 z% R, W9 K7 X
修改 B 帧量化值比 P 帧量化值的平均减少量。值越大生成的 B 帧质量越低。不能和 mbtree(默认开启)一起使用,mbtree 会自动计算 B 帧最佳量化值。
8 l7 g2 J: L" e$ u/ W- o& d参照: --ipratio
* l+ H  K9 _- l" }& }chroma-qp-offset! Y5 {& d5 {( f6 a, t
默认值: 0. k& B4 E5 ^" n, N  D# t/ M+ j' D2 w/ {
给色度的量化值增加一个偏移量。可以是负值。1 P3 n5 P2 N3 x) b4 I3 U
当开启 psy-rd 和/或 psy-trellis 时,x264 会自动减小偏移量来提高亮度质量,造成色度质量下降。默认从偏移量中减2。
8 {0 }3 W" B9 e3 v' ]3 @7 t注意:在 q29以下,x264 对亮度和色度以相同量化值进行编码。超过29后,色度量化值的增长率小于亮度,直至亮度达到 q51 和 色度达到 q39。这是 H.264 标准要求的。
: m: w6 z" W2 Vaq-mode0 @& T" {  b  ]& W8 k( p
自适应量化模式) F; D/ J" Q/ s- i# J$ \, U& q
默认值: 1
& _1 L; ^0 |: X/ `/ D7 f9 a不用 AQ,x264 倾向于给缺乏细节的场景分配较少的码流。AQ 用来把可用的码流更好的分配给所有的宏区块。此选项用于改变 AQ 重新分配码流的范围:1 ?* W" ?2 v- b, \! ^) I
•        0:关闭 AQ。
# j& |1 @' R4 e# z1 x# a•        1:在整个视频范围和帧内部分配。
7 L; o9 ~* C/ W( d) p  O% O! s( ?  y8 d•        2:根据帧的比重自动分配(实验性质)。+ I( U+ ]( _" o) T8 M( }, w- z" B
参照: --aq-strength
  l( U! C. `$ }0 m0 e4 S' Paq-strength
) ~+ n5 T9 k9 ^% c- i- `( E9 r2 n自适应量化比重3 `5 j4 {$ r* ~/ M9 U# m" r
默认值: 1.0& Y) G$ [# h( |* L
让 AQ 向低细节(平坦、单调)宏区块倾斜。不允许负值。
# g) g0 L& R5 ]" b- W, W* U: m参照: --aq-mode. j4 u% K/ K( c  t; m4 Q4 `* ?
pass0 A/ R* y$ W) ]: @
默认值: 未设置
, c0 {) I! h" ~& L9 ~# m这是两边编码的重要选项。控制 x264 如何处理 stats 文件。有三种设置:' Z: C: c3 |' c
•        1:生成新 stats 文件。在第一遍编码时使用。
& T* @) a$ t  Y: s•        2:读 stats 文件。在最终编码时使用。. G" I4 i# O- U* q* K; V  x9 a
•        3:读 stats 文件,并更新文件。2 n: y' e' e( f9 T* c$ q2 a7 D4 ?
stats 文件包含每个帧的信息,x264 用于提高输出质量。第一遍编码时生成 stats 文件,第二遍编码时利用它来优化视频。最佳用途是码率控制。
% d8 p1 J& a/ v1 F& {7 d& `参照: --stats, --bitrate, --slow-firstpass X264_statsfile9 E& O- n5 o4 P+ {" S4 R, R& m
stats
2 P% A: m5 R$ {# C) B2 i默认值: 'x264_2pass.log' . W. m/ h4 y* M# E
设置存放 stats 文件的位置及文件名。* K4 t6 s4 k) [6 B0 J6 ^
参照: --pass7 w8 u+ _. p/ m) M$ ?
no-mbtree
- x. y7 R8 i% U' z; L默认值: 未设置
9 `* N) D; ^5 n- _禁用宏区块树(mb-tree)码率控制。使用宏区块树跟踪宏区块在帧中的使用情况和权重可以提高压缩率。需要生成一个很大的状态文件来保存数据。% n) _4 x( o) ?; e& c, r' M2 o
推荐: Default
) }# L  I: b- R, _: J' B( p参照: --rc-lookahead
( V7 Y/ c$ Y$ b/ Rqcomp* p' H# r, I2 ]6 P/ Q  g4 R% P
默认值: 0.607 V# K0 L7 N5 _% _: i. h" v
量化值曲线因子。0.0 趋向于 恒定比特率,1.0 趋向于 恒定量化值。; E! k& g+ ~4 \; u8 T8 K
当和 mb-tree 连用时,影响 mb-tree 权重。(高 qcomp 等价于减弱 mb-tree)$ v8 U7 r0 V5 v8 Q' }
推荐: Default: Z% b! m# {& F/ M9 j# s7 {
参照: --cplxblur, --qblur
  x5 s: A! ]' e1 ncplxblur
! g( d  f2 t3 E  l# X/ ~7 k默认值: 20/ v  [* p) b* e% A5 {0 E9 `
以指定的半径对量化值曲线应用高斯模糊滤镜。就是通过模糊相邻帧的量化值来达到限制量化值波动的目的。
! y9 O  `% Q8 O9 M- W. ?参照: --qcomp, --qblur' e9 ?  Q* Q- J
qblur" E. m/ L) C6 s
默认值: 0.5
7 p2 @) Q% D6 ^: n在量化值曲线压缩后,以指定的半径对量化值曲线应用高斯模糊滤镜。这个设置不重要。
5 F1 Y% ?- i& E7 i2 B4 R参照: --qcomp, --cplxblur
+ y  Y) b* W1 M& Z" nzones9 q5 q3 s, h8 P5 m! G. k. P; z( ~
默认值: 未设置+ ~. o; u% w) t, u/ v5 \  \
可以把视频分段(zone),对每段分别设置压缩选项。你可以修改 zone 中的大部分 x264 选项。
) |* _/ Z$ Q: ~! i( J8 f•        单个 zone 格式为 <start frame>,<end frame>,<options>; h7 X! l. D5 k$ s2 O
•        多个 zone 之间用 '/' 分隔。
2 M# L7 s3 _9 w7 ^( h/ o* xzone 选项: 9 I' J- l" v( A
有两个选项比较特殊。可以仅设置一个,假如你设置一个的话,它必须是这个 zone 中的第一个选项。" `+ u- H% C& H3 V' r0 T
•        b=<float> 乘以原有 bitrate 是 zone 的 bitrate。有益于高速和低速场景优化。- P7 W) T" [2 a2 S" g" N
•        q=<int> 为 zone 提供一个恒定量化值。可以对一部分帧单独优化。
1 |" C/ \9 h* d* a3 Z其它可用选项如下:
& C# u8 ]- X) {2 U- i5 P: `•        ref=<integer> ( W5 l9 z& Z! C5 q3 ]
•        b-bias=<integer> + {8 j2 Z# m1 ^( p( u, ^/ C
•        scenecut=<integer> 8 v# i* j0 H7 F4 w" ^& f
•        no-deblock
9 h  X  _! o& y2 _& [) }1 P/ x+ M/ P, N•        deblock=<integer>:<integer> ! M7 z/ Q, ~) b+ S+ f! s( ]
•        deadzone-intra=<integer>
( x2 s' [: k; v; |, B$ A0 r7 \•        deadzone-inter=<integer>
. |  i- k: C/ r' r+ i8 k, Q! l; A1 h6 b•        direct=<string> & y% M* c8 I# H" d
•        merange=<integer>
9 Z) F2 T) ?' |, g6 M6 W. l% b7 {/ T7 c•        nr=<integer> 3 L5 q" m/ v$ l4 @8 `9 ~+ N
•        subme=<integer>
8 W+ }$ g1 e( A' ]1 i6 F% \: O& ~•        trellis=<integer> + Y/ d/ ^* H* |6 `4 p
•        (no-)chroma-me 0 Z- V( k! T9 J
•        (no-)dct-decimate + V' d5 i7 |. v
•        (no-)fast-pskip
: l' M- W/ F( P+ C; h& Y•        (no-)mixed-refs / y) r4 |  b/ ~9 m' B
•        psy-rd=<float>:<float> $ ]* ^# t3 n6 E
•        me=<string> 9 e& v4 H$ ]# T' m, m
•        no-8x8dct # ^* }" y' m* [6 v; v  w
•        b-pyramid=<string>
, B) K2 l5 {; P+ X. v限制:
& q2 Y. I3 O7 y: ^# A: F  }! ^•        zone 的参考帧数不能超过原有 --ref 定义值。
7 \2 Y* z0 [4 p6 k  i# G- ?2 D•        不能在 zone 中 关闭 或 开启 scenecut;如果已经开启,仅可以修改。
+ v7 y" b- }9 z/ v3 I2 S9 x•        如果 subme 原有值为 0,则不能修改。
  I7 _8 x# x- [; {; a$ P•        如果 --me 原有值为 dia, hex 或 umh,则不能设置为 esa 或 tesa。
) M4 \* P* V& L* ]- x4 C" I, k•        如果 --me 原有值为 esa 或 tesa ,则不能超越。; J& o$ r' `6 R" @
例子: 0,1000,b=2/1001,2000,q=20,me=3,b-bias=-1000
7 v$ n, g; X" [* W( X) L建议: Default
* n3 D9 s3 ]# t9 L! w2 H1 hqpfile: A1 u6 t, y+ r& j* M; p
人为改变标准码率控制。提供一个文件用于指定特定帧的 量化值 和 帧类型。格式为‘帧序号 帧类型 量化值’。例如:
. o9 I9 t* x; o1 F, X# c0 @. U1 z9 @0 I 18 < IDR (key) I-frame
/ X6 ]9 D+ ]6 X1 \# P9 v" e1 P 18 < P-frame" n9 O  O) ^# F2 F3 Y* O" N
2 B 18 < Referenced B-frame/ E2 m4 V  `& U( {1 v9 F, y
3 i 18 < Non-IDR (non-key) I-frame" R; X7 O8 H6 g+ j
4 b 18 < Non-referenced B-frame
3 \& q5 z2 i5 H0 j; u; @5 K 18 < Keyframe*: W3 h% O; C$ \& G% V+ g, l: }
•        不需要指定每一帧。
9 k" v# h( P- y$ f•        把量化值设为 -1等于让 x264 自动判断最佳量化值,当仅需要指定帧率时有用。
) ~" E6 F8 \- H9 d# a•        如果大量指定帧类型和量化值并且还让 x264 自行优化的话,会降低 x264 执行效率。8 U" H& U: j- J7 y4 |
•        假如设置 --open-gop none,则 'Keyframe' 等价于是一个 IDR I帧的普通关键帧,反之,等价于是一个带恢复点标志 SEI的非 IDR I帧。: U$ a% O; T" V  h! R  E

' C, i, k- O% l分析 选项
, M8 S% g  k9 Q' ?  m; P5 Y- N5 `partitions
* S+ c' `, ]9 U- E  e1 Q& r  W0 s默认: 'p8x8,b8x8,i8x8,i4x4' + x9 ^1 Y% q1 x. Y' e
压缩过程中视频被分割成16x16 的宏区块。这些块能被进一步分割的更小,这些就由本选项控制。
$ A! e) b) }4 M5 F( F' {% A2 A; v. N% v! Z使用本选项,你可以单独定义分割类型。分割类型按帧类型(如:I, P, B)分类。可用的分割类型为 p8x8, p4x4, b8x8, i8x8, 和 i4x4。
8 r' P( P3 I! V7 m$ h•        I: i8x8, i4x4
" f) ]) c0 O6 K* r  R  j•        P: p8x8 (亦包含 p16x8/p8x16), p4x4 (亦包含 p8x4/p4x8)
0 ~7 t; @: l6 o•        B: b8x8 (亦包含 b16x8/b8x16)
$ z- _7 ?* V; ~+ Z4 m% T) c你也可以设置为'none' 或 'all'
" |0 |7 o8 W/ b8 zp4x4 通常不太有用,通过使用它来增加图像质量将极大的降低压缩速度。5 h2 g7 S# {/ M& R6 R' ?
参照: --no-8x8dct
+ w" M2 i: E- Ddirect
1 h0 x4 G/ s3 p, c' {# y默认: 'spatial', H& A0 \0 c- u# H) Q8 X: C0 h! b
设置直接运动矢量的预测模式。有两种模式:空域和时域(spatial, temporal)。你也可以选择 none 禁用直接运动矢量,或选择 auto 让 x264 根据情况在两种模式之间切换。如果设为 auto,x264 会在编码结束后输出相关信息。auto 在两遍编码方式下工作的很好,而且在单遍编码下也可以工作。在第一遍编码为 auto 时,x264 保存每种方法的平均执行情况,并从中选出下一种预测模式。注意:如果第一遍编码时用的 auto,第二遍编码时就只能用 auto;否则,第二遍编码将默认为 temporal。使用 none 浪费码流,严重不建议。. o) d1 W7 x0 H  B% N: }
建议: 'auto' # o7 P) H3 x2 Z6 u
no-weightb* G  [4 b. w; E! A' X
默认: 未设置8 k7 o# ^1 A' }, E; t! A$ h
H.264 允许设置 B 帧参考帧的权重,权重可以让你改变各参考帧对预测画面的影响程度。本选项关闭此特性。/ i- b6 o& K8 a
建议: Default
4 [/ s* K% M. g8 N' gweightp
8 X0 T' R7 j  s5 f5 j默认: 2
5 U" \- x# x) u; y7 E$ a! J在 P 帧中开启加权预测用于提高压缩率。同时提高淡入淡出场景质量。值越大越慢。/ V: C' m% F$ Y7 a* L# C- p. s8 F. Q
模式:
) P# z3 ?/ l% l; X) S" k* [1 ~; K& E•        0. 关闭3 {' ]3 K( x6 T9 ^8 |9 h( ]' N
•        1. 简单: 淡入淡出分析,但是不重复引用。* ^. t& _/ O7 D( e
•        2. 智能: 淡入淡出分析,重复引用。* h  R5 ^6 g2 q( g# V/ o
me' p* b1 Q4 W9 m% k+ n: ]0 P2 V
默认: 'hex'
! U, z5 R1 w: E, l; W0 v% D设置全像素运动预测方式。有5种选择:
: o" N7 V0 d2 b; f8 m1 B•        dia (diamond。菱形)  最简单的搜索方式,从最佳预测点开始,在1个点的上、下、左、右四个方向判断此点的运动轨迹,选择最佳值,重复此过程直至找不到较好的轨迹。
4 R- q7 E5 d* r•        hex (hexagon。六角形) 秉承简单策略,除了它是在两行共搜索6个方向,这也是它名称的由来。比 dia 有效且速度基本相当,因此是用于普通编码的好选择。
) l' i0 T; R4 H. w8 c•        umh (uneven multi-hex。非偶多六角形) 比 hex 慢,但是通过搜索复杂的多六角形区域从而避免错过难以找到的运动轨迹。不像 hex 和 dia,参数 merange 直接控制 umh 的搜索半径,允许你增加或减小搜索范围。) _2 B3 H. o0 h: P3 r1 m/ K
•        esa (exhaustive。穷举) 在最佳预测点 merange 范围内的整个运动空间进行高度优化的智能搜索。它在数学上相当于在区域内搜索每个运动向量的穷举法。尽管比较快,还是比 umh 慢,没有太多好处,不适用于天天编码。
6 h" {0 o" Q8 G4 c+ r% W  F0 B) y•        tesa (transformed exhaustive。改进的穷举) 这种算法试图粗略估计对每个运动向量进行 Hadamard 变换的效果;像 esa,更好一点也更慢一点。, @; I* o; f" ?; s; ^8 H
参照: --merange
3 J: [/ i+ I7 Q; Z! R- ?2 @merange
* k0 w" _0 p# h; C默认: 16
, y! E4 _% E9 c8 n+ @merange以像素为单位控制最大运动搜索范围。对于 hex 和 dia,在默认16下,它的范围强制在 4-16。对于 umh 和 esa,能在16在的基础上增加从而搜索更大的范围,对于高清和高速影片很有用。注意:对于 umh, esa 和 tesa,增加 merange 将明显降低编码速度。; ]6 d% A8 a- R3 K/ ^9 \# I
参照: --me9 W0 W) t2 d8 G3 o
mvrange0 a4 o5 Z$ y2 c4 L5 W* t9 X+ p
默认: -1 (auto)
( J+ B: a/ z9 u" t' }: I以像素为单位设置所有运动向量最大(垂直)范围。默认值依赖于 level 等级:
% w" H3 l+ G7 C0 _2 q& j( C•        Level 1/1b: 64 & S  _; R) U1 {" J2 W" z6 D
•        Level 1.1-2.0: 128 4 |0 k" y3 W3 W2 d# c: v2 q
•        Level 2.1-3.0: 256
+ K' `, q+ k2 T/ w2 v8 M- Q•        Level 3.1+: 512
; C& ~& O3 n9 T5 l6 q% Y注意:如果想手工设置 mvrange,当设置时从上面的值中减 0.25(如: --mvrange 127.75)。+ B' w$ R% }6 B. G- u( w
建议: Default5 \) w" k) a6 t: A1 T/ X: y! X0 z
mvrange-thread
% C, @6 i5 f6 v2 `9 B- y& f默认: -1 (auto) # b$ h" S& g$ Z) `  G/ O
设置流(threads)之间的最小运动向量缓冲。不要动它。, i  H9 e* |6 `9 |4 j" l
建议: Default. ^1 \- G$ q! J, t" M
subme
. t* ^' L! _5 R# R: T- E, f( m, v  X默认: 7
; r0 ]! U. U3 T# B  Y! o) g( t设置亚像素估计复杂度。值越大越好。1-5仅仅控制亚像素精细程度。6开启 RDO 用于模式决策,8开启 RDO 用于运动向量和内部预测模式。开启 RDO 的明显慢于未开启的。
) @$ S& P5 B8 e2 t2 w使用小于2的值可以更快,且更低质量的向前预测模式,这就相当于造成降低场景切换阀值,因此不推荐这样做。
0 f& Y, A) J2 z+ ^" \可选参数:
( h2 c! i/ V+ T0 v0 E) y5 ^7 V0. fullpel only# @; I0 l1 n0 j; [) m
1. QPel SAD 1 iteration" u1 u6 I' P9 S/ a$ ~
2. QPel SATD 2 iterations: O; e' }- d& `+ S( u( L" A. ^
3. HPel on MB then QPel$ O( y6 K; S3 c- v% {; u
4. Always QPel
4 j$ E- G8 I1 ~$ N; O' l9 ^1 [- Y! H5. Multi QPel + bi-directional motion estimation* J- R9 B" f8 U1 y- u$ c
6. RD on I/P frames# }# k+ G3 ]% x! _
7. RD on all frames
, c& N* J# \9 L0 n( a; t8. RD refinement on I/P frames
) w" @9 d, s. s6 y1 ?1 ^( Y5 H( A9. RD refinement on all frames
* |1 I: |/ H4 [( C10. QP-RD (需要 --trellis=2, --aq-mode > 0)( J, S8 J* u: S; [
建议: Default, 或更高,除非编码速度很重要。
  T- |3 ]2 T5 m* ]" H; l* h2 j! Ksubq
- O( {: Z* ^8 e3 e. G--subme 的别名。
, Q* o+ v8 i2 D6 _. W7 upsy-rd# g; d+ D2 ^- M0 ~( N3 X# t
默认: 1.0:0.0
. \7 }# ?$ l' m  I. i* M参数中第一个数字是 Psy-RDO 的强度(当 subme>=6 时有效)。第二个数字是Psy-Trellis 的强度(当 trellis>=1 时有效)。注意:Trellis 仍处于实验阶段,至少对卡通片来说是坏事情。
& x4 |+ c2 f5 x3 s4 s! ~/ U5 ~psy-rd 的解释:http://forum.doom9.org/showthread.php?t=1382935 V% q7 a& [2 a6 @9 r) ]* B2 F% a! K
no-psy7 L/ t. ^8 ?) }
默认: 未设置2 k* F1 B' E2 M
关闭所有用于降低 PSNR 或 SSIM的视觉效果优化功能。同时还关闭一些无法通过 x264 命令行设置的内部 psy 优化功能。
3 X' o2 a, `" D$ Y( |7 {9 z- r9 l建议: Default
( D+ p+ N& W2 _, ?) u& eno-mixed-refs
- D4 o4 C5 G* J. Q* F7 a$ y' d默认: 未设置
# t2 s" K7 d* y, d! |( N  [- n混合参考将以 8x8区块选择参考对象,优于按宏区块大小选择参考对象。当使用多个参考帧时可以提高图像质量,会降低编码速度。设置这个选项将关闭它。
- S; X( _; h* }0 l/ Z7 T, C建议: Default
7 J" t* B) V+ t7 k" J参照: --ref
$ Y$ X2 \, Y; q7 s* k, K- ^; k' H7 ano-chroma-me) T+ q9 m; j7 q4 `0 r- Q
默认: 未设置
+ b3 [& M: t; N) z" u! l通常,在亮度和色度两个位面进行运动预测。本选项关闭色度运动预测并能略微提高编码速度。
+ g4 v3 U% Y. c7 l$ }  x建议: Default8 Y5 a7 N! Q' m9 V, C. C
no-8x8dct
& t; m: H+ b, i/ P9 r  O默认: 未设置
1 O# x5 Q% }+ F8x8 DCT 开启智能的自适应的在 I 帧中使用 8x8 离散余弦变换。本选项关闭此特性。" `2 E2 l1 c- u2 g
建议: Default3 q( h' y8 }' @: M1 ~* O
trellis
) \  h& Y/ \' P5 O默认: 1! x4 D7 X& G$ _9 T
通过分格量化(Trellis quantization)来提高效能。1 _+ p+ K$ E3 Z4 A
0. 关闭
2 {# n, D3 F& d! x0 c7 U1. 开启。仅用于最终宏区块编码,速度和效能的良好平衡。
4 Y( O* |) L, x0 v* l5 F2. 开启。用于所有决策,降低编码速度。4 u2 F3 k. ^. q' S; P6 X9 |
分格量化:http://en.wikipedia.org/wiki/Trellis_quantization
; ^% l& B: Y  p0 \建议: Default
$ E8 ^! b7 a% @$ L注意: 需要 --cabac/ `7 \5 E* Y6 |$ Z+ l
no-fast-pskip( E* U  O7 c, {" l( A- q  `* U
默认: 未设置
2 b! y3 _+ x% P7 X# m. t; V8 i关闭P 帧提前跳过检测。以很大的速度损耗为代价换来非常微弱的质量提高。6 Y0 }$ }5 m' a
建议: Default
- [& c; O% Y3 J" W- g, \9 _7 \no-dct-decimate
: k: t- {8 W6 m! [3 _5 z: c( K1 s默认: 未设置0 ~3 D& B! s2 o# v7 F
DCT Decimation 将去除中被认为不重要的 DCT 块。这样做可以提高编码效率, 并有些微的质量损失。设置本选项将关闭此功能。* H3 j: M9 _& t
建议: Default8 W; I; L/ Y! C" M# u5 w
nr( \6 B$ I: _" Q
默认: 未设置7 G' n( v7 {) q  O0 ]; l* Z! U& K
执行快速降噪。在量化前,基于此值评估影片噪点,并试图通过去除微小细节的方法清除噪点。效果不如良好的外部降噪滤镜,但是速度非常快。
; F" E+ S/ [" k1 A# r, [0 B  B建议: Default 或 (100 to 1000)
. W; h3 W( ?2 L! Bdeadzone-inter/intra: W# b/ u% \7 Z4 J1 k) ~! ^
默认: 未设置/ R4 p& ?, |4 d9 z, N
设置inter/intra 模式下亮度量化死区值。取值应在 0 - 32 之间。死区值定义了细节精细程度等级。非常精细的细节解码和编码都很困难,去除这些细节不再保存它们有助于节省码流。Deadzone 与 Trellis 不兼容。/ m- C& C) w1 B9 j; |, v7 {0 G
建议: Default
9 g- a" c( ~. t. Zcqm
4 f0 t: Z* q- {+ J1 R& {9 ~- C默认: Flat
0 `# n' V& N' r% ?1 L+ }+ r把全部自定义量化矩阵设为内建预置。内建预置量化矩阵为 flat 或 JVT。: Q' W; y( j% N$ A# _
建议: Default
7 [3 m& }! T6 I2 Q2 B, c参照: --cqmfile6 c5 N, Q6 W3 r
cqmfile
  f& r* a( }( t$ |& T8 Z默认: 未设置& {; L: R3 M! I8 @6 w3 A
从 JM 兼容文件读取自定义量化矩阵。覆盖任何其它--cqm* 选项。% x/ Q, z$ r% V. ]/ e
建议: Default- r# p$ q% \8 V( T2 Q5 \3 r) x
参照: --cqm
1 U$ e9 w% l( ^; q( acqm4* / cqm8*5 F/ c3 @8 o7 U6 i* q8 k9 v. k7 J
默认: 未设置. U! ?4 X5 Y2 X, V
•        --cqm4: 设置所有4x4量化矩阵。用逗号分隔的16个整数。1 f( {- C' n8 T- u4 `) b6 [
•        --cqm8: 设置所有8x8量化矩阵。用逗号分隔的64个整数。
: i( ^4 j; K6 ~: z) z( Y+ G•        --cqm4i, --cqm4p, --cqm8i, --cqm8p: 设置亮度和色度量化矩阵7 y; e+ n/ }! I1 u7 L# ~
•        --cqm4iy, --cqm4ic, --cqm4py, --cqm4pc: 设置单独的量化矩阵- W0 f2 S9 f% A; ]/ i" J
建议: Default
9 z' w1 x0 s5 y/ c
; I* ~" r; h* n7 H% a) ^, \) cVideo Usability Info4 u7 |# l. G; K5 ~
这些选项在输出流中设置标志位,标志能被解码器读出且可能起作用。值得注意的是这些选项大多数情况下是无意义的,而且通常会被软解码器忽略。# h$ _$ S% n1 @3 ?1 S, r
overscan
; Y$ u3 @% f4 L2 L" V默认: undef
4 M/ }+ Z1 Q% \" {如何处理过扫描。过扫描在这里的意思就是播放设备仅能显示整幅图像的部分。4 t4 T. @3 s3 l/ j/ w( G  N1 C
可选参数:
0 B5 V5 t) R/ A9 K+ c•        undef - 未定义' [+ r$ n4 s5 _! ~; v& W
•        show - 显示全部。理论上讲如果设置了就应该被遵守。 2 c# W' n2 d9 v5 \7 H8 g
•        crop - 在支持过扫描的设备上让图像适应播放器。不一定遵守。
+ h8 Q& |% u( m3 P8 x, o建议: 在编码前裁剪,如果设备支持的话,设置 show,其它情况下忽略它。, c/ H) e. q; j5 q/ c7 f
videoformat
( `) Y# g! B3 T默认: undef / w1 i6 ?& f! k+ k3 V; k6 h  j( c
表明视频在编码/数字化前是什么制式。/ ?4 u, k* N# Z. Z4 c; X* [* U
可选参数:. D' N1 ?. f- l  f
•        component 5 a5 F& p; X& Q6 {) f
•        pal
8 Q4 _) F% N6 D$ B" }9 e, D6 n( z•        ntsc 4 i0 A' r- g, p3 d1 a- P' y8 R
•        secam
; g2 t. @- v: y1 j! ^  w•        mac 6 q7 B/ _" ~4 s4 R& R( C) B) `
•        undef
+ P( L' N* O) U7 o, G' u5 J) Y# B建议: 随便, 或不定义( c, `+ E4 z8 V1 C  y
fullrange1 m9 V' u3 G* Y4 w. i4 l& l
默认: off
3 ^! H3 F' H7 x0 T, ^表明亮度和色度是否使用全范围。如果设为 off,则使用有限范围。
! F! w5 \& k8 ]0 Q* J! V参考:http://en.wikipedia.org/wiki/YCbCr
# }3 |- ~+ l" I( }  V) {建议: 如果你的源是从模拟信号数值化来的,设为 off。其它,设为 on。$ Y. c+ E& D/ X( S. ^3 @5 X; I' E
背景:% V: P' h) m" t. ?
BluRay/DVD/DV 等使用 MPEG 压缩,记录格式为 YCbCr,遵循 ITU-R BT.601 规范,其数据范围(动态范围)为 Y(亮度)16~235,C(色度)以 128 为中心代表无色,范围 16~240。
7 ]. f& `2 O% k$ U& p$ p* ^1 W7 C8 N做处理和显示的时候,YCbCr 要转为 RGB,其范围为 16~235。' e7 T, X" ]( _) X* s$ t& k
但是计算机屏幕上,纯白的点,其 RGB 值为 (255,255,255),纯黑的点,其 RGB 为 (0,0,0)。所以 MPEG 所记录的纯白 (235,235,235) 在计算机屏幕上看起来就不是纯白,纯黑 (16,16,16) 在计算机屏幕上看起来也不会是纯黑。" |/ x( ~3 V: r4 |* \; `+ m5 R
因此 DV 录下来的东西,拿到计算机上看,会觉得颜色变淡,好像照上了一层白纱。同时因为数据范围(动态范围)缩小为 16~235,而不是全范围(Full Scale)0~255,所以会觉得对比不足(最亮和最暗的差距缩小),不如在电视上看漂亮。$ U+ u& C: j. B" {$ K
colorprim
7 ?9 M9 c& M0 Z/ i默认: undef 1 r5 O/ ]) g- F7 g- k2 {( _) K
设置把什么源色彩色系转换为 RGB 色系。  d4 Y  C9 Y# g# A& ?2 l
可选参数: " [6 s6 `: E+ @
•        undef
/ r" q' `& Y8 j, W- B8 G% L; s•        bt709 3 q  i5 m# C6 E5 r4 z1 H0 z
•        bt470m ! S0 T' L' c) |0 E  l- j$ n+ w
•        bt470bg 7 N; `) K% S9 l6 T6 |+ k6 ~1 x' E
•        smpte170m
+ B6 B) _  M# v3 L•        smpte240m
2 B& a4 `  n, F/ M/ B' m2 s•        film
" f; J# p+ x( K4 J' `参考:: U# X! \1 ^5 M7 a# q9 r
http://en.wikipedia.org/wiki/RGB_color_spaces0 M! r6 z1 c0 r7 i& @1 e) M+ K( F
http://en.wikipedia.org/wiki/YCrCb# d1 f+ m  b/ v, e0 A
建议: 默认, 除非知道源使用的是什么。
. S! i1 S$ T4 I1 X; Dtransfer7 o, b! g' i( Q( Z  n
默认: undef ) U6 o& ]8 w* ^) F) m7 L# ]
设置光电传输特性。(就是设置伽马曲线用于校正)
5 A2 r' |, m5 \6 X% r5 r可选参数
! r. g, L# L/ n# |3 C, q2 M" e) U9 h•        undef 7 Z# P" t. R) d
•        bt709
7 w' g% ~0 ~8 E•        bt470m
& d+ S! U7 w. w3 w9 }•        bt470bg 1 `' ?, t# D  ~  r, A& L
•        linear ; q2 |) x" ^- H
•        log100
0 w! A% n- K: n4 v•        log316 : `" w- p% L6 V; y+ Q6 I% }- o
•        smpte170m * b. A. O3 v' l+ N- a
•        smpte240m $ H1 w% Y0 ?- y! j' F) f# ^
伽马校正:http://en.wikipedia.org/wiki/Gamma_correction. T) L: ?& _5 V' @/ q# \
建议: 默认, 除非知道源使用的是什么。
5 v7 l2 ?4 E/ o3 ^% Q$ qcolormatrix) J7 B( ^# h7 X& D7 U# I
默认: undef * B8 S% x# }0 b0 c% }$ T* \( g
设置从 RGB 转换时亮度和色度的矩阵系数。' ^( ]" Y8 _5 _0 t/ y6 C
可选参数:
6 u, w+ H5 d5 A7 o•        undef
4 U/ s2 ]4 D2 v# N8 k8 _0 \•        bt709 4 ]9 v3 S/ `/ z' u; k3 g. `$ _
•        fcc * w0 W* Y/ i0 j; @" U
•        bt470bg
1 ]. `# m3 Q+ F: C# _, {) x•        smpte170m , z0 y& g% O2 B+ t( s
•        smpte240m : w$ `5 I( W' ?4 n, h
•        GBR
* u& A+ a* R8 c' Y% _  h•        YCgCo
8 B4 X) u9 o) z+ P/ S% @, y参考:http://en.wikipedia.org/wiki/YCbCr8 A. H, Z& u1 r, C1 l% t! }, a
建议: 随便,或 默认。% V' z  ~% Y- G% l0 Q/ D
chromaloc1 G0 r  y# n  d0 |1 P3 p
默认: 0& v! G' M  u; M5 l* n
设置色度取样位置。(在 ITU-T 规范附录 E 中定义。参见http://www.itu.int/rec/T-REC-H.264/en
  S- p8 V1 a8 z! s% U值从0到5。
* w# _! a- b( M* O1 i7 `! F参考:http://git.videolan.org/?p=x264.git;a=blob;f=doc/vui.txt
6 h% Z; r/ M" K( z  _建议:
1 E- X# r$ }; Y/ `4 b* r•        如果正确的从 MPEG1(比如 VCD)的 4:2:0 格式二次采样转码,且不做任何色彩空间转换,应该设为1。
: r$ b  R* Z! S' H/ f. d# B•        如果正确的从 MPEG2(比如 DVD)的 4:2:0 格式二次采样转码,且不做任何色彩空间转换,应该设为0。7 x, N4 j4 ^2 S5 x! p  R* @
•        如果正确的从 MPEG4(比如蓝光)的 4:2:0 格式二次采样转码,且不做任何色彩空间转换,应该设为0。6 w3 A% D5 w% @; ^
•        其它,默认。+ n: U" H9 ?. w  b/ ]& h
nal-hrd
# S& H: a3 `- s& C默认: None " G* Q2 ]- v' ]  G/ K8 ^" u; g
标记 HRD 信息。用于蓝光、广播电视和一些其它专业领域。参数有:8 x$ h" X$ S; n- d3 \
•        none 没有 HDR 信息。9 x7 z9 z1 N) E0 W3 _' x! ]
•        vbr 指定 HRD 信息。; C) k$ D% N% Q( q( g4 K' s
•        cbr 指定 HRD 信息且把视频流按 bitrate 规则封装。要求编码时使用 bitrate 码率控制模式。! z: z5 B& r0 g# a+ }- P
建议: none, 除非需要指定此信息
2 Z8 q: o' ]5 y% a参照: --vbv-bufsize, --vbv-maxrate, --aud, {9 K! j6 l6 j$ g8 G8 B
pic-struct
1 n4 W4 h" b3 k& o7 ^6 h默认: Not Set
3 Z  d! D( {7 h$ b+ t# I在 Picture Timing SEI 中强制发送pic_struct。2 N! d( N9 @. `, {6 P6 e6 S
当使用 --pulldown 或 --tff/--bff 时隐含采用此选项。0 I2 v& Q" Z% U# t6 l1 W8 C$ o
建议: Default
# ]+ ?9 q7 Z% K
) w7 o2 }) x' N( hInput/Output
6 S2 ^+ @4 F" S% f0 N4 S& |output) Y- H5 Z/ L: T) L) s* l
默认: 未设置# D+ L# n, v+ I% n
指定输出文件名。由指定的文件名后缀决定视频格式。如果后缀不可识别则采用默认的 raw 格式(通常 .264 后缀用这种格式存储)。. R' |9 W7 q0 B. Q/ w6 C' q
特殊的文件名 NUL (Windows)或者 /dev/null (Unix)表示丢弃输出内容。当使用 pass 1 时特别有用,你唯一关心的输出来自 stats。1 A4 x9 a* b! e; Y# |' t7 z. H4 A
muxer
, _7 x7 d+ D- P* b, y  b  s2 ?, f默认: auto' f: Q; K, U; J
指定用什么格式写文件。4 P0 ^$ a0 A6 h' o- ~9 N* |% b
可用参数::
  E8 P0 y) k% m- P6 g% I% B. g•        auto4 B) L0 P  i% |4 s/ o
•        raw) W/ C6 j3 d9 `, N! y
•        mkv* ?/ a5 [2 a, u4 q0 p* f& V5 q
•        flv' W7 k" X: F  H5 r; G
•        mp4
9 `! ]4 ^5 q( Q: ^; Z0 L; X9 x‘auto’选项将根据提供的文件名选择封装器。
' w8 y7 ~, u3 l6 j4 L参照: --output0 L- G8 O) A6 Y
建议: Default1 V5 T# w& v# {) ?$ v
demuxer3 c: N! n  @5 m( P5 Z
默认: 自动检测. U" Q' |& w* b) \. D+ U
设置 x264 用于分析输入视频的分离器和解码器。8 L0 g  g8 t+ q; c  O4 d8 L! _7 r
可用参数:
2 f' O# g6 g7 d3 V& j7 b1 J•        auto( b5 t* E' v3 ]# i" x  R0 D+ O2 y
•        raw7 Z0 Y3 u% a4 i# `
•        y4m0 D- V8 |( n1 r3 B( j0 ^* Q/ Y+ b
•        avs: @$ C& B) A# h. K3 M# Z' H& D1 s
•        lavf
: z) j1 I% I" o' X9 ~) H7 ]•        ffms4 M3 H5 u6 Y0 }
如果输入文件有 raw、y4m 或 avs 后缀,x264 使用相关的分离器读取文件。标准输入使用 raw 分离器。否则,x264 将依次尝试使用 ffms, lavf 来打开文件,直至放弃。$ T! s4 e& u* \0 P
‘lavf’和‘ffms’参数需要用各自的库文件编译 x264。如果使用两者之一,而且输出不是 raw 的话,x264 将暂缓处理输入文件中的时间码。这将有效的使 x264 采用 VFR-aware。其它参数使用 --fps 指定的固定码率或 --tcfile-in 指定的可变码率。
- {/ z1 {* j* U7 L参照: --input, --muxer( k% c9 \) y( S, s* T, e
建议: Default
% t0 C! }1 [0 B! S; binput-csp
7 t2 l& S* C5 P) s% F默认: i420 ' z0 F# H! s$ ^4 {* Z
告诉 x264 视频源的色彩空间。支持的色彩空间列表见 x264 --fullhelp。
$ C2 ]! o! W7 \6 Y$ I! E注意:当指定为 RGB 色彩空间时,视频在压缩前会按 bt601 矩阵转换为 YUV。* J6 @0 h9 j# |; u3 P  b" G) W: k
参照: --input-res, --fps
2 p# ?) ~5 }& u6 I* s. einput-res
6 A2 k. g! ?0 Z0 q指定 raw 格式视频源的分辨率。使用格式:--input-res 720x576
1 L# h" a' i+ d7 Z参照: --input-csp, --fps; V" S5 {! a  f+ J( i3 b
index7 I2 M' P5 a  ]0 a# X
默认: 未设置
. i0 j6 @& N+ n/ c6 V一个仅当使用 ffms --demuxer 时起作用的选项。为 ffms 指定一个用于为输入源建立索引数据的文件,以后编码的时候可以省去再次建立索引的时间。通常不需要,因为相对于编码来说索引非常快。
/ ?( U7 ^! V! ~$ Y3 U参照: --demuxer, FFMS2 API 文档:http://ffmpegsource.googlecode.com/svn/trunk/doc/ffms2-api.html
  m( T4 J. o# V# ?建议: Default, 除非你想节约一分钟的索引时间。
, w/ g( Y. i7 B: U; W8 usar4 L! j) i  L( c$ l
默认: 未设置
- @+ g, i: s! G4 d以 宽:高 格式指定编码器使用的视频源的采样纵横比(Sample Aspect Ratio (SAR))。综合使用 SAR 和 帧尺寸可以做出依赖显示纵横比(Display Aspect Ratio (DAR))的可变形(anamorphic)输出,公式为:DAR = SAR x width/height5 r0 V1 e4 a& ~3 b. }% V
建议:假如使用 resize 滤镜和变形视频源的话,应该指定。
: }& z( ^; f% l参考:http://en.wikipedia.org/wiki/Asp ... age%29#Distinctions
- E2 M# u) d& f- Z译者说明:“可变形”是种特殊应用,欲详细了解可以参考“细说DVD的画面比例”这篇文章:http://www.tfcc.cn/dvd/2004-8-25_14-36-56_1259.html
  S, N4 ^% a, \) `$ Yfps
* }5 p! Q7 L' r- f0 E默认: autodetected 7 t. Y( r" h$ H  B# x4 P) W
以浮点数(29.970)、有理数(30000/1001)或整数(2997/100)值指定视频的帧率。x264 在有效的视频源头部(y4m,avs,ffms,lavf)检测帧率并采用,否则使用25。本选项隐含使用 force-cfr。2 R% u7 h" L1 {  Q& w3 p. r8 r8 y
如果正在使用 raw YUV 视频源并且基于 --bitrate 码率控制,需要使用此选项或 --tcfile-in 指定正确的帧率。否则,x264 无法达到设定的码率目标。# J/ W9 e. ]1 }. N
seek
2 t; `$ K( T1 }% y6 T! Y% ]& c& P# S默认: 未设置
( ]& I. D1 k5 p% ?! C3 p设定编码的起始帧,允许从视频源的任意位置开始编码。
8 {* q" y" P* C0 w建议: Default5 g/ n( n- m: O# |& F
frames
+ o5 y% o/ r2 P默认: 未设置
- b* G9 G3 Z( E4 T# @设定编码的最大帧数,允许在视频源结束前的任意位置终止编码。
2 l9 G; ]. _8 x0 b  u1 Q建议: Default
* Y  x7 h0 \& {level
4 G' @9 \; l6 E( Q4 x; Z# q9 P默认: -1 (自动)
  `: N" h; G" h+ g" C& N" R7 Z. T在输出流中设定等级标志(H.264 标准附录A。http://en.wikipedia.org/wiki/H.264#Levels)。允许的等级有:0 b% B) y3 N1 K2 I
1 1.1 1.2 1.3 2 2.1 2.2 3 3.1 3.2 4 4.1 4.2 5 5.1 (等级 1b 不被支持)
! y3 I6 t' }2 ~  `+ a6 e如果没有设定等级,x264 将试图自动判断。自动判断并不完美且在不使用 VBV 的情况下可能低估等级。x264 将自动限制 DPB 尺寸(看 --ref)与你设定的等级相匹配(除非你手工指定 --ref)。注意:--vbv_maxrate 或 --vbv_bufsize 不会根据设定的等级自动设置,但是如果它们的参数超越设定的等级会告警。5 |; K: y7 ?  n( S* a  N! V! R
选择什么等级?
# W2 B! X7 I/ ZLevel 4.1 常常是桌面型硬件能支持的最高等级。蓝光碟仅支持 Level 4.1,许多非手机类设备,像 Xbox 360,指定 Level 4.1 为官方支持的最高等级。手机设备,像 iPhone/Android 则是完全不同的处理方式。
' j, s  o! [7 S详细的等级限制图表,参见:http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC#Levels
( I/ @/ {3 q$ M1 d- s. }建议: Default,除非是为一个特定设备编码。
9 V; i0 x% r% O) U, @verbose
0 g( W& u+ z9 l- E- i0 r3 x* i默认: 未设置
7 h$ n" t" {+ y" F0 j5 ?8 T1 ~显示每个已编码帧的统计信息。
0 z# E( H" `+ u9 }, J# r7 a& f- C4 s建议: Default3 u6 _. \6 p' ]
no-progress) j4 j7 E0 v5 t# z) ?3 l( ~, _3 b
默认: 未设置 $ G2 E8 i. ?5 e; y
编码时关闭进度指示器。8 n$ k# @! E& L0 f9 z7 t4 K+ ^
建议: Default
, s9 x5 U! I2 P- k6 h) b7 ^+ iquiet
$ {' t3 ]* N) ^2 a8 @默认: 未设置
/ Q& X: ?1 U- y& d8 E开启安静模式,屏蔽 x264 发出的状态信息。
$ `; ^. \4 ~- |建议: Default& n2 _6 e/ z5 j" w5 q6 o( L
log-level
) U+ l$ V' r6 ?# m默认: info- u- z9 j7 C) U- g
手工设定 x264cli 和 libx264 的日志等级。, w9 C9 m  {! P7 r4 |; L
可用参数:
. j% M# M( L; Y: n$ \& Q+ }•        none
: @6 d8 ^: M5 U/ ?•        error# l/ I1 \- |2 X. h8 P
•        warning9 `) i+ l9 E! k& D6 h* }, {1 d) q
•        info
, e$ q' s. R+ H# E4 v& X•        debug$ m4 S! u1 c) `! {( U
越往下,日志信息越详细。6 x2 y" B$ \5 f  Y( I. L4 G# j/ p
建议: Default
: D( @& q3 u0 g5 ypsnr; e1 x' K$ x  Y) }* m
默认: 未设置
+ ?4 Y+ ]# W$ Y3 ]* H开启 PSNR 计算,会在编码完成后给出报告,略微降低压缩速度。6 D9 F2 R# h* w7 J1 ?% C
建议: Default$ A( y6 r; n5 D5 e
ssim
4 I( m" j/ V. s' l$ M9 T默认: 未设置
) P! I: ~' C7 K7 J4 t9 a# U开启 SSIM 计算,会在完成后给出报告,略微降低压缩速度。; P0 s( I% W& H) W
建议: Default
; i: b# B/ L# R% }; Qthreads) r$ L" [5 `7 C
默认: auto (基于帧的线程数:1.5 x 逻辑处理器数量,向下舍入取整;基于分片的线程数:1 x 逻辑处理器数量)! D7 S' m$ l2 a2 q
在多核处理器上通过使用开启多线程并行编码以加快速度。质量损失可以忽略不计,除非使用非常多的线程(超过16个)。速度增长和线程的数量近似于线性,直至在视频垂直方向每40px 多于1个线程为止,超过临界点后再增加线程获得的速度增长将大幅下降。4 R# x" y% z1 w& t! _. S
当前在 x264 内部对线程数量限制为128,实际上你也不会设置这么高。9 ^$ T. |+ a% a, t4 E
建议: Default! G9 d& L1 g% X7 x  [
参照: thread-input, sliced-threads" ~, f+ w9 G, P: z
sliced-threads/ R. o1 G0 G3 g! k  @: J* V
默认: off+ y2 d$ z3 T/ \; i
开启基于分片的线程。比默认方式质量低、效率低,但是没有编码延迟。9 P  T9 z& @0 }, F' l
基于分片的最大线程数量公式:MIN( (height+15)/16 / 4, 128 )
* y1 X4 u' R+ @* V/ f0 c$ ?( x& M建议: Default (off),除非你正在做实时流排序或者低延迟非常重要。
/ M, o' i  z. H! |thread-input, v1 N0 t) o+ X& Y/ Y+ Z: S; C
默认: Set if threads > 1. d" R' m& q* M& }
在单独线程中解码输入视频用于编码进程。: h6 ~) S1 c! P6 K
建议: Default+ Z; o% d! r. l9 }
sync-lookahead
0 n! A0 D# B) \默认: auto (bframes+1) 8 H: D$ P3 A  `7 p) p2 s
设置用于线程预测的帧缓存大小。最大值是250。在第二遍及更多遍编码或基于分片线程时自动关闭。: J, Q) e" h: \: G! Z. T+ H
设为0将关闭线程预测,将减小延迟,但是以降低性能为代价。
. n- d" E  V; d) e' s& X建议: Default& Z- _$ L" H. A4 X1 i% _0 t2 X
non-deterministic
0 l+ b% H4 q" Q. `- |默认: 未设置
. C1 o1 j3 o7 s. H" h$ z  t2 r在 --threads>1 时可以稍微提高编码质量,以非确定性输出编码为代价。开启多线程 mv 和 在分片类型决策时使用全部的向前预测缓存。( _7 p7 n# X5 r3 [# I, Y
一般不用。
5 n3 b. \: B1 w, _建议: Default 6 e$ X# a7 G9 z( _9 b# `
参照: threads
, p. Y' C0 E6 nasm
6 |+ B  U6 |* b) T默认: auto ) C6 `6 [& N: D( R0 I/ U
不理会自动 CPU 检测。用于调试或排除故障。, F" R" V  W. Y
建议: Default
7 k" d8 ^" k) \/ Z# {$ p9 J) kno-asm
0 ?; ^. `' m: T8 O' w4 B, u" U默认: 未设置 $ l7 b4 {% i1 v1 a
关闭所有 CPU 优化。用于调试或排除故障。9 g, K3 b9 b+ X) [- a
建议: Default
4 j0 g% G% T9 M  ^* Q. K  Tvisualize
: O5 @! |( E' _$ I% V  d8 F默认: 未设置 / E% N$ [- ^% {* ?5 M
开启已编码视频宏区块可视化。用于逐帧调试或分析。" _/ o: J7 T( p& F8 D4 @
需要编译支持和 X11 窗口系统。3 K# x2 L$ q9 f; f0 S6 Z9 G
建议: Default% ]! ~' z+ G; i$ Z$ l: J( B5 Y
dump-yuv
+ ~( x/ h* j5 I& X% {默认: 未设置 % G$ R6 J5 u8 x  V
把重建的 YUV 帧转储到指定文件。通常用于调试。一般不用。$ S; @! ~; K* x/ S. B
建议: Default' I; |) V: U3 ~$ z
sps-id9 I* I; x8 g- a- Y' ^# B
默认: 未设置 6 n' ^1 n" a& a) I% f* v% e7 u
设置 SPS(sequence parameter set)和 PPS(picture parameter set) id。- F0 O& U6 \9 ~
一般不用。
& }1 u4 C2 @$ P$ ^% j. ~建议: Default
) M* O! u6 i6 Y. i" j6 L+ n; naud
! i  P+ H$ @* R默认: 未设置 / m6 U' I2 u9 k4 D9 R
设置访问单元分隔符。
* Z% ?2 C- p) y8 O7 I4 y% _4 ]建议: Default,仅用于蓝光碟。2 U/ t2 i4 R% L1 V
force-cfr- O9 R( ~7 ^) O* Y
默认: 未设置
" w+ X1 f5 H" l( ~4 b0 C# Y如果使用 ffms2 或 lavf 分离器,且输出文件不是 raw 格式,则从输入文件复制时间码。此选项关闭这个功能,并强制 x264 自己产生。当使用此选项时估计你也会设置 --fps。
$ C& A* U6 w* _% t' T! ?0 n建议: Default , p( @9 O1 ]. j4 t6 p: n' o
tcfile-in. M+ w# n/ {! K. [- I) Q5 T
指定一个说明视频源帧率的时间码文件。可以是 v1 或 v2 格式。
: y& H0 K# a# z1 n0 z7 zmkvmerge 文档中的解释:http://www.bunkus.org/videotools ... rnal_timecode_files
) e3 Y4 K9 F9 L/ V2 H% b参照: tcfile-out, force-cfr, fps5 q; B3 X7 A3 o
tcfile-out
0 z, X& k' [" w输出一个基于输入时间戳的时间码文件(v2 格式)。用于当你正在编码一个 VFR 视频源且想转储时间码的时候。关于文件格式,参见 tcfile-in。% X9 _$ ~: y$ ~
timebase1 R0 M4 V2 C; D$ }
默认: 未设置* z" r& T. h; \2 b$ z+ d
允许自定义时间基准。
! B" L- i9 H; v' I2 L) ?7 |分子是‘秒’,分母是‘ticks’。意思是1个 tick 多少秒。. r; y9 `7 g9 k) S! q" ?
•        如果得数为有理数,将相应的设置分子和分母。
3 R& x4 P4 W6 f' R•        如果得数为整数,并且通过 tcfile-in 设置了时间码文件,将使用得数做分子,并相应的生成分母。3 X* Y; y, x# I- c
•        如果得数为整数,并且没有设置时间码文件,将得数作为分母并从视频源生成每帧‘ticks’数。9 u: d1 N+ }0 j" Z% J
与 --force-cfr 不兼容。
* R% T1 P3 w% F9 d建议: Default
2 x2 H' C! y5 m% A4 p  V/ M& u7 ldts-compress
2 m% S: q) I0 ~9 K' p& r  G默认: 未设置 ( V# F$ I% D2 ~
一个小把戏,仅适用于FLV和MP4容器,可以在有缺陷的解码器下工作,这些解码器认为所有的 DTS 都是正确的。使用此选项风险自担,请看说明:http://git.videolan.org/gitweb.cgi/x264.git/?a=commit;h=80d0bd4b57163389289714e681bdc53ceaaf0f7a0 t$ w$ `$ ~' G3 y; L
注:DTS 指的是解码时间戳(Decode TimeStamp)。每一帧都分配一个 DTS,对应其在流媒体‘编码顺序’中的位置,不同于由显示时间戳(Presentation TimeStamp)指定的‘显示顺序’。由于使用 B 帧等压缩技术的原因,各帧在视频流中的保存顺序与其显示顺序是不同的,这就造成某些帧需要后续帧的数据。
# y5 o" ]: s( c% t$ h: K; T/ F
Filtering# o1 o7 w! C9 F
video-filter
1 m, q( S8 J$ O5 n3 A) q6 Mx264 过滤系统会在视频源被压缩前处理它们。可以顺序使用多个过滤器。
1 E3 }% Z" S. i; x1 q' }7 @过滤器的基本语法:
/ P. @0 o% n6 ^& Z( m--video-filter <filter>
; F. N+ R/ d1 g4 e连续使用多个过滤器时用 / 分隔:
( d( h+ }! o/ m9 W; s--video-filter <filter1>/<filter2>  i& i. v* L/ j( Z. O
你可以按自己喜欢的方式链式使用多个过滤器。9 t3 L) G8 A, K% o
可用的过滤器有:
( z0 n( M3 t4 y+ rcrop
6 a/ u- O2 N" T8 ]) f% C语法: crop:left,top,right,bottom 9 p# }; H6 T* w" ^8 ~+ \
从帧的边缘移去像素。就是常说的剪裁喽。$ J+ A0 f/ c! F8 R* X( A7 t4 L
•        当视频源是yv12、i420、或 nv12 格式时,剪裁的像素必须是2的倍数。) B6 v4 R3 A' X. w& v
•        当视频源是 i422 格式时,在宽度方向剪裁的像素必须是2的倍数。( }4 U' F  w0 T9 f6 M
resize" [- D- P' R; G- R, y% |" C# {) q
语法: resize:[width,height][,sar][,fittobox][,csp][,method]
# V7 A, u: O) Z! z; h2 _调整帧尺寸 和/或 转换帧的色彩空间。需要 x264 编译时带上 libswscale 库。0 }; g! c* O0 b7 \0 N5 P( X
如何调整帧尺寸有几种可能的方式:
  K* [) m& [4 z3 `/ H•        仅 分辨率:按照指定的分辨率调整帧尺寸,同时调整 SAR 从而避免图像拉伸变形。
8 Y  Z2 K/ {! ~' B•        仅 SAR:设定 SAR,同时调整帧尺寸从而避免图像拉伸变形。
2 l9 v. }. v6 `4 R0 }7 @•        分辨率 + SAR:按照指定的分辨率调整帧尺寸并且按指定值设定 SAR,可能产生拉伸变形。4 h+ Q* B6 I; F
•        Fittobox:基于指定约束模式调整帧尺寸,分辨率按1:1的 SAR 自适应。
* h. _) s3 L% l4 e•        width:调整帧尺寸来符合指定宽度约束。3 A  t9 i& C' n
•        height:调整帧尺寸来符合指定高度约束。& H5 M* q& h- w( k
•        both:调整帧尺寸来符合指定矩形约束。
1 U  J) l3 C* f. C7 @( Q•        Fittobox + SAR:除额外指定 SAR 外与 Fittobox 类似,收缩视频使可变形视频符合指定的约束。
& r# L: E/ f5 ~% i% n与调整尺寸无关的参数:
, p* d5 c+ R& k  A7 @+ ^& r* j•        csp:同时将帧转换为指定的色彩空间。可用的色彩空间列表见 x264 --fullhelp* W7 }) Q* C1 Y: ?
•        method (默认 bicubic):当调整帧尺寸时,使用指定的调整方法0 G  ~; @. H4 S* v+ a
fastbilinear, bilinear, bicubic, experimental, point, area, bicublin, gauss, sinc, lanczos, spline # m% u' C* @0 q! B4 W0 ~# K
范例: - I6 q. ^2 n5 Z  O! l: |( \0 D8 x
resize:width=1280,height=720,method=spline
# _$ C' f5 E8 ?0 }select_every
2 v6 l1 X) O' d. m* D/ H语法: select_every:step,offset1[,offset2,...]
; M: r2 J4 c' M/ f5 s9 p! N( t仅选择部分输入帧进行编码,丢弃其它。每隔 step 帧,仅使用 offset 指定的帧。例如:0 I, N+ ^% k4 \2 O; ~
每2帧,丢弃第1帧,采用第2帧:+ ~& V$ Q' E5 G- L# D" J0 W( t
select_every:2,1
6 H% ~0 a; S) g2 {9 ]( t每3帧,采用第0,1帧,丢弃第2帧:3 H. E( H6 A0 q+ A7 q
select_every:3,0,1  `5 j: O0 J& |8 R  K+ G' q8 s
更多例子:http://avisynth.org/mediawiki/Select#SelectEvery
# ^0 D/ T* s1 X1 a* k7 d另请参阅
* S2 p  F) G/ R5 \" e5 T•        http://git.videolan.org/?p=x264.git;a=tree;f=doc;hb=HEAD
- z( ?! A0 N' gx264 源代码树中的文档。几乎是最高级别的技术特性解释。一些文档相当老,但是仍然很精确。! g; B- ^  c6 G5 N  u
•        http://sites.google.com/site/linuxencoding/
# [. w  c- ]- M) r* q7 oLinux 编码 - x264 编码选项指南。非常实用的选项。大多数由 x264 的开发者Dark Shikari 编写。; Y/ A4 r3 P: s) f  `
•        http://mulder.dummwiedeutsch.de/pub/x264# _9 f; {; X. O# c; P5 V) c* x
Lord Mulder 的 x264 Avidemux 指南。值得一看5 W) t/ g. M6 X% h( i
•        http://sites.google.com/site/x264bluray/home
8 }! Q$ J3 n1 @- t, A1 H使用 x264 进行蓝光编码。很多范例,极有用。' v& V0 @# Q: `! ~

点评

我有个参数没弄明白bframe到底是干嘛的能详细讲讲吗  发表于 2012-6-11 21:31
发表于 2011-10-22 22:25:13 | 显示全部楼层
很棒的资料,多谢分享!
发表于 2011-11-20 02:39:22 | 显示全部楼层
学习了,谢谢啊
发表于 2011-11-22 15:29:29 | 显示全部楼层
很详细啊。。。慢慢学习。。。
发表于 2011-12-8 01:03:20 | 显示全部楼层
我刚学 就是弄不清楚 bf,ref,sub,这几个的参数越大 代表的意思是什么 ??

点评

http://www.2gdy.cc/diy/new.html 二哥影视最近更新的100个影片  发表于 2015-3-31 19:19
发表于 2011-12-11 00:03:04 | 显示全部楼层
哇 这也太牛了 我慢慢看 后慢慢研究
发表于 2011-12-13 14:21:01 | 显示全部楼层
非常感谢,学习了很多,明白了很多,也增加了更多的疑问
! \) x& `6 C6 o/ i) v  ]9 `, s- C) a) j+ X
那几个wiki的链接中间都省略了,帮忙更新下吧,而且好像介绍有点老了,现在的x264有些参数和某些默认参数有点不同了……
发表于 2012-2-2 09:54:32 | 显示全部楼层
很有用的资料
发表于 2012-2-26 16:22:32 | 显示全部楼层
牛x资料...希望将来用的时候还能找到
发表于 2012-2-28 06:09:40 | 显示全部楼层
写的很详细,楼主费心了,感谢~
发表于 2012-3-25 07:04:02 | 显示全部楼层
本帖最后由 苍狼白鹿 于 2012-3-25 07:11 编辑 ; E7 B  t  c$ @

  U' d; C2 A9 v0 [宏區塊MB(Macroblock)是一種影像壓縮的術語。/ J+ J0 Q0 i1 e% c9 [  O7 L
宏區塊是運動預測的基本單位,一張完整的圖像(frame)通常會被切割成幾個宏區塊,MPEG2和較早期的codec定義宏區塊都是 8x8 pixels. 現代的一點codec像是 h.263 和 h.264 的宏區塊通常都是 16x16 pixels和相應區域內的Cb 、Cr 色差信號陣列共同組成。8 |+ ^: i3 J( z2 w) @1 W
宏區塊為基準來選擇特定的預測類型,而非整個圖像都使用同樣的類型:, w2 M, P: L; s. l- G" N$ d9 ]
I 圖像(Intra pictures)只可含有節點宏區塊! }! @& F4 M5 @) M' e: v
P 圖像(Predictive pictures)可含有節點宏區塊或預測宏區塊
; i; _4 X& `; _' W2 M3 p; PB 圖像(Bi-predictive pictures)可含有節點、預測和前後預測宏區塊
发表于 2012-3-27 16:12:52 | 显示全部楼层
慢慢揣摩,慢慢品味!
发表于 2012-4-1 22:41:27 | 显示全部楼层
感谢!
: x, @( n5 b* T5 I+ s7 U; zMARK学习~
发表于 2012-7-20 22:26:48 | 显示全部楼层
没看完,眼睛都酸了,下次接着学习啊
发表于 2013-1-29 20:58:48 | 显示全部楼层
太复杂了,看不懂
发表于 2013-11-19 10:09:24 | 显示全部楼层
一直很纠结H264和X264的区别,这下懂了,楼主写的很详细。
发表于 2014-1-2 16:46:57 | 显示全部楼层
非常感谢,学习了很多,明白了很多,也增加了更多的疑问, y6 J3 b" S9 j: h. d& g
发表于 2015-3-14 08:05:51 | 显示全部楼层
楼主强大!多谢楼主耐心指导!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

本站仅做广众交流之平台、所有内容均为网友发布,如网友所发内容侵犯您的权益,请邮件告知,收到邮件并确认后24小时内删除,投诉专用邮箱:iminisd.com@gmail.com

Archiver|手机版|小黑屋|mFANs  

GMT+8, 2019-5-26 15:25 , Processed in 0.070560 second(s), 12 queries , Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表