X264設定
本頁說明所有x264參數之目的和用法。參數的排列相同於在x264 --fullhelp
出現的順序。
參閱:X264統計資料輸出、X264統計資料檔案和X264編碼建議。
x264設定
說明
x264帶有一些內置的文件。要閱讀此說明,執行x264 --help
、x264 --longhelp
或x264 --fullhelp
。越後面的選項會提供越詳細的資訊。每条选项的具体命令行帮助界面正在开发中。
輸入
以一個位置引數指定輸入的視訊。例如:
x264.exe--output
NUL C:\input.avs x264--output
/dev/null ~/input.y4m
當輸入視訊是原始YUV格式時,還必須告訴x264視訊的解析度。你可能也要使用--fps
來指定幀率:
x264.exe--output
NUL--fps
25--input-res
1280x720 D:\input.yuv x264--output
/dev/null--fps
30000/1001--input-res
640x480 ~/input.yuv
详细的命令行使用方法参见X264使用介绍
預設
為了減少使用者花費時間和精力在命令列上而設計的一套系統。這些設定切換了什麼選項可以從x264 --fullhelp
的說明裡得知。
profile
預設值:無
限制輸出資料流的profile。如果指定了profile,它會覆寫所有其他的設定。所以如果指定了profile,將會保證得到一個相容的資料流。如果設了此選項,將會無法使用無失真(lossless)編碼(--qp
0
或--crf
0
)。
如果播放裝置僅支援某個profile,則應該設此選項。大多數解碼器都支援High profile,所以沒有設定的必要。
可用的值:baseline, main, high, high10, high422, high444
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
預設值:無
使用--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
, --ref
, --no-mixed-refs
open-gop
預設值:無
open-gop是一個提高效率的編碼技術。某些解碼器不完全支援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 filter)。不建議。
參閱:--deblock
deblock
預設值:0:0
控制循環濾鏡(亦稱為持續循環去區塊(inloop deblocker)),這是H.264標準的一部分。就性價比來說非常有效率。
可以在http://forum.doom9.org/showthread.php?t=109747找到loop濾鏡的參數是如何運作的說明(參閱第一個帖子和akupenguin的回覆)。
參閱:--no-deblock
slices
預設值:無
設定每幀的切片數,而且強制為矩形切片(會被--slice-max-size
或--slice-max-mbs
覆寫)。
如果是在為藍光編碼,將值設為4。否則,不要使用此選項,除非你知道真的有必要。
參閱:--slice-max-size
, --slice-max-mbs
slice-max-size
預設值:無
設定最大的切片大小(單位是位元組),包括估計的NAL額外負荷(overhead)。(目前與--interlaced
不相容)
參閱:--slices
slice-max-mbs
預設值:無
設定最大的切片大小(單位是巨集區塊)。(目前與--interlaced
不相容)
參閱:--slices
tff
預設值:無
啟用交錯式編碼並指定頂場優先(top field first)。x264的交錯式編碼使用MBAFF,本身效率比漸進式編碼差。出於此原因,僅在打算於交錯式顯示器上播放視訊時,才應該編碼為交錯式(或者視訊在送給x264之前無法進行去交錯)。此選項會自動啟用--pic-struct
。
bff
預設值:無
啟用交錯式編碼並指定底場優先(bottom field first)。詳細資訊可以參閱--tff
。
constrained-intra
預設值:無
啟用限制的內部預測(constrained intra prediction),這是SVC編碼的基礎層(base layer)所需要的。既然EveryoneTM忽略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為符合藍光標準的視訊。
frame-packing
預設值:無
如果在編碼3D視訊,此參數設定一個位元資料流(bitstream)旗標,用來告訴解碼器此3D視訊是如何封裝的。相關的值和它們的意義可以從x264 --fullhelp
的說明裡得知。
位元率控制
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。
雖然qp不需要lookahead來執行因此速度較快,但通常應該改用--crf
。
參閱:--bitrate
, --crf
, --ipratio
, --pbratio
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
, --sync-lookahead
vbv-maxrate
預設值:0
設定重新填滿VBV緩衝的最大位元率。
VBV會降低品質,所以必要時才使用。
參閱:--vbv-bufsize
, --vbv-init
, VBV編碼建議
vbv-bufsize
預設值:0
設定VBV緩衝的大小(單位是千位元)。
VBV會降低品質,所以必要時才使用。
參閱:--vbv-maxrate
, --vbv-init
, VBV編碼建議
vbv-init
預設值:0.9
設定開始播放視訊之前VBV緩衝必須填滿多少。
如果值小於1,初始的填滿量是:vbv-init * vbv-bufsize。否則該值即是初始的填滿量(單位是千位元)。
參閱:--vbv-maxrate
, --vbv-bufsize
, VBV編碼建議
crf-max
預設值:無
一個類似--qpmax
的設定,除了指定的是最大位元率係數而非最大量化值。當使用--crf
且啟用VBV時,此選項才會運作。它阻止x264降低位元率係數(亦稱為“品質”)到低於給定的值,即使這樣做會違反VBV的條件約束。此設定主要適用於自訂資料流伺服器。詳細資訊可以參閱http://git.videolan.org/gitweb.cgi/x264.git/?a=commit;h=81eee062a4ce9aae1eceb3befcae855c25e5ec52。
參閱:--crf
, --vbv-maxrate
, --vbv-bufsize
qpmin
預設值:0
定義x264可以使用的最小量化值。量化值越小,輸出視訊就越接近輸入視訊。到了一定的值,x264的輸出視訊看起來會跟輸入視訊一樣,即使它並不完全相同。通常沒有理由允許x264花費比這更多的位元數在任何特定的巨集區塊上。
當彈性量化啟用時(預設啟用),不建議提高qpmin,因為這會降低幀裡面平滑背景區域的品質。
关于qpmin的预设值:在x264 r1795版本之前,该选项预设值为10。
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%的位元率偏差)。
- 很多電影(例如動作片)在電影結尾時是最複雜的。因為一階段編碼並不知道這一點,結尾所需的位元數通常被低估。將ratetol設為
inf
可以減輕此情況,藉由允許編碼以更像--crf
的模式運行,但檔案大小會暴增。
- 很多電影(例如動作片)在電影結尾時是最複雜的。因為一階段編碼並不知道這一點,結尾所需的位元數通常被低估。將ratetol設為
- 當VBV啟用時(即指定了--vbv-開頭的選項),此設定也會影響VBV的強度。值設得越大,允許VBV在冒著可能違反VBV設定的風險下有越大的波動。
ipratio
預設值:1.40
修改I幀量化值相比P幀量化值的目標平均增量。越大的值會提高I幀的品質。
參閱:--pbratio
pbratio
預設值:1.30
修改B幀量化值相比P幀量化值的目標平均減量。越大的值會降低B幀的品質。當mbtree啟用時(預設啟用),此設定無作用,mbtree會自動計算最佳值。
參閱:--ipratio
chroma-qp-offset
預設值:0
在編碼時增加色度平面量化值的偏移。偏移可以為負數。
當使用psy-rd或psy-trellis時,x264自動降低此值來提高亮度的品質,其後降低色度的品質。這些設定的預設值會使chroma-qp-offset再減去2。
注意:x264僅在同一量化值編碼亮度平面和色度平面,直到量化值29。在此之後,色度逐步以比亮度低的量被量化,直到亮度在q51和色度在q39為止。此行為是由H.264標準所要求。
aq-mode
預設值:1
彈性量化模式。沒有AQ時,x264很容易分配不足的位元數到細節較少的部分。AQ是用來更好地分配視訊裡所有巨集區塊之間的可用位元數。此設定變更AQ會重新分配位元數到什麼範圍裡:
0
:完全不使用AQ。1
:允許AQ重新分配位元數到整個視訊和幀內。2
:自動變化(Auto-variance)AQ,會嘗試對每幀調整強度。(實驗性的)
參閱:--aq-strength
aq-strength
預設值:1.0
彈性量化強度。設定AQ偏向低細節(平滑)的巨集區塊之強度。不允許為負數。0.0~2.0以外的值不建議。
參閱:--aq-mode
pass
預設值:無
此為兩階段編碼的一個重要設定。它控制x264如何處理--stats
檔案。有三種設定:
1
:建立一個新的統計資料檔案。在第一階段使用此選項。2
:讀取統計資料檔案。在最終階段使用此選項。3
:讀取統計資料檔案並更新。
統計資料檔案包含每個輸入幀的資訊,可以輸入到x264以改善輸出。構想是執行第一階段來產生統計資料檔案,然後第二階段將建立一個最佳化的視訊編碼。改善的地方主要是從更好的位元率控制中獲益。
參閱:--stats
, --bitrate
, --slow-firstpass
, X264統計資料檔案
stats
預設值:"x264_2pass.log"
設定x264讀取和寫入統計資料檔案的位置。
參閱:--pass
, X264統計資料檔案
no-mbtree
預設值:無
停用巨集區塊樹(macroblock tree)位元率控制。使用巨集區塊樹位元率控制會改善整體壓縮率,藉由追蹤跨幀的時間傳播(temporal propagation)並相應地加權。除了已經存在的統計資料檔案之外,多重階段編碼還需要一個新的統計資料檔案。
建議:預設值
參閱:--rc-lookahead
qcomp
預設值:0.60
量化值曲線壓縮係數。0.0是固定位元率,1.0則是固定量化值。
當mbtree啟用時,它會影響mbtree的強度(qcomp越大,mbtree越弱)。
建議:預設值
cplxblur
預設值:20.0
以給定的半徑範圍套用高斯模糊(gaussian blur)於量化值曲線。這意味著分配給每個幀的量化值會被它的鄰近幀模糊掉,以此來限制量化值波動。
qblur
預設值:0.5
在曲線壓縮之後,以給定的半徑範圍套用高斯模糊於量化值曲線。不怎麼重要的設定。
zones
預設值:無
調整視訊的特定片段之設定。可以修改每區段的大多數x264選項。
- 一個單一區段的形式為<起始幀>,<結束幀>,<選項>。
- 多個區段彼此以"/"分隔。
選項:
這兩個是特殊選項。每區段只能設定其中一個,而且如果有設定其中一個,它必須為該區段列出的第一個選項:
- 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;如果
--scenecut
最初為開啟(>0),則只能改變scenecut的大小。 - 如果使用
--me
esa
/tesa
,merange無法超過最初所指定的大小。 - 如果
--subme
最初指定為0,則無法變更subme。 - 如果
--me
最初指定為dia、hex或umh,則無法將me設為esa為tesa。
範例:0,1000,b=2/1001,2000,q=20,me=3,b-bias=-1000
建議:預設值
qpfile
預設值:無
手動覆寫標準的位元率控制。指定一個檔案,為指定的幀賦予量化值和幀類型。格式為“幀號 幀類型 量化值”。例如:
0 I 18 < IDR (key) I-frame 1 P 18 < P-frame 2 B 18 < Referenced B-frame 3 i 18 < Non-IDR (non-key) I-frame 4 b 18 < Non-referenced B-frame 5 K 18 < Keyframe*
- 不需要指定每個幀。
- 使用-1作為所需的量化值允許x264自行選擇最佳的量化值,在只需設定幀類型時很有用。
- 在指定了大量的幀類型和量化值時仍然讓x264間歇地自行選擇,會降低x264的效能。
- "Keyframe"是一個泛用關鍵幀/搜尋點,如果
--open-gop
是none
則等同於一個IDR I幀,否則等同於一個加上Recovery Point SEI旗標的Non-IDR I幀。
分析
partitions
預設值:p8x8,b8x8,i8x8,i4x4
H.264視訊在壓縮過程中劃分為16x16的巨集區塊。這些區塊可以進一步劃分為更小的分割,這就是此選項要控制的部分。
此選項可以啟用個別分割。分割依不同幀類型啟用。
可用的分割:p8x8, p4x4, b8x8, i8x8, i4x4, none, all
- I:i8x8、i4x4。
- P:p8x8(亦會啟用p16x8/p8x16)、p4x4(亦會啟用p8x4/p4x8)。
- B:b8x8(亦會啟用b16x8/b8x16)。
p4x4通常不怎麼有用,而且性價比極低。
參閱:--no-8x8dct
direct
預設值:spatial
設定"direct"動態向量(motion vectors)的預測模式。有兩種模式可用:spatial
和temporal
。可以指定none
來停用direct動態向量,或指定auto
來允許x264在兩者之間切換為適合的模式。如果設為auto
,x264會在編碼結束時輸出使用情況的資訊。auto
最適合用於兩階段編碼,但也可用於一階段編碼。在第一階段auto
模式,x264持續記錄每個方法執行到目前為止的好壞,並從該記錄挑選下一個預測模式。注意,僅在第一階段有指定auto
時,才應該在第二階段指定auto
;如果第一階段不是指定auto
,第二階段將會預設為temporal
。none
模式會浪費位元數,因此強烈不建議。
建議:auto
no-weightb
預設值:無
H.264允許“加權”B幀的參照,它允許變更每個參照影響預測圖片的程度。此選項停用該功能。
建議:預設值
weightp
預設值:2
使x264能夠使用明確加權預測(explicit weighted prediction)來改善P幀的壓縮。亦改善淡入/淡出的品質。模式越高越慢。
注意:在為Adobe Flash編碼時,將值設為1,否則它的解碼器會產生不自然痕跡(artifacts)。Flash 10.1修正了此bug。
模式:
0
:停用。1
:簡易:分析淡入/淡出,但不分析重複參照幀。2
:智慧:分析淡入/淡出和重複參照幀。
me
預設值:hex
設定全像素(full-pixel)動態估算(motion estimation)的方法。有五個選項:
dia
(diamond):最簡單的搜尋方法,起始於最佳預測器(predictor),檢查上、左、下、右方一個像素的動態向量,挑選其中最好的一個,並重複此過程直到它不再找到任何更好的動態向量為止。hex
(hexagon):由類似策略組成,除了它使用周圍6點範圍為2的搜尋,因此叫做六邊形。它比dia
更有效率且幾乎沒有變慢,因此作為一般用途的編碼是個不錯的選擇。umh
(uneven multi-hex):比hex更慢,但搜尋複雜的多六邊形圖樣以避免遺漏難以找到的動態向量。不像hex和dia,merange參數直接控制umh的搜尋半徑,允許增加或減少廣域搜尋的大小。esa
(exhaustive):一種在merange內整個動態搜尋空間的高度最佳化智慧搜尋。雖然速度較快,但數學上相當於搜尋該區域每個單一動態向量的暴力(bruteforce)方法。不過,它仍然比UMH還要慢,而且沒有帶來很大的好處,所以對於日常的編碼不是特別有用。tesa
(transformed exhaustive):一種嘗試接近在每個動態向量執行Hadamard轉換法比較的效果之演算法,就像exhaustive,但效果好一點而速度慢一點。
參閱:--merange
merange
預設值:16
merange控制動態搜尋的最大範圍(單位是像素)。對於hex和dia,範圍限制在4~16。對於umh和esa,它可以增加到超過預設值16來允許範圍更廣的動態搜尋,對於HD視訊和高動態鏡頭很有用。注意,對於umh、esa和tesa,增加merange會大幅減慢編碼速度。
參閱:--me
mvrange
預設值:-1 (自動)
設定動態向量的最大(垂直)範圍(單位是像素)。預設值依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 (自動)
設定執行緒之間的最小動態向量緩衝。不要碰它。
建議:預設值
subme
預設值:7
設定子像素(subpixel)估算複雜度。值越高越好。層級1~5只是控制子像素細分(refinement)強度。層級6為模式決策啟用RDO,而層級8為動態向量和內部預測模式啟用RDO。RDO層級明顯慢於先前的層級。
使用小於2的值不但會啟用較快且品質較低的lookahead模式,而且導致較差的--scenecut
決策,因此不建議。
可用的值:
0
:Fullpel only1
:QPel SAD 1 iteration2
:QPel SATD 2 iterations3
:HPel on MB then QPel4
:Always QPel5
:Multi QPel + bi-directional motion estimation6
:RD on I/P frames7
:RD on all frames8
:RD refinement on I/P frames9
:RD refinement on all frames10
:QP-RD (requires--trellis
=2,--aq-mode
>0)11
:Full RD: disable all early terminations
建議:預設值,或者更高,除非速度非常重要
psy-rd
預設值:1.0:0.0
第一個數是Psy-RDO的強度(需要subme>=6)。第二個數是Psy-Trellis的強度(需要trellis>=1)。注意,Trellis仍然被視為“實驗性的”,而且幾乎可以肯定至少卡通不適合使用。
psy-rd的解釋可以參閱http://forum.doom9.org/showthread.php?t=138293。
no-psy
預設值:無
停用所有會降低PSNR或SSIM的視覺最佳化。這也會停用一些無法透過x264的命令列引數設定的內部psy最佳化。
建議:預設值
no-mixed-refs
預設值:無
混合參照會以每個8x8分割為基礎來選取參照,而不是以每個巨集區塊為基礎。當使用多個參照幀時這會改善品質,雖然要損失一些速度。設定此選項會停用該功能。
建議:預設值
參閱:--ref
no-chroma-me
預設值:無
通常,亮度(luma)和色度(chroma)兩個平面都會做動態估算。此選項停用色度動態估算來提高些微速度。
建議:預設值
no-8x8dct
預設值:無
彈性8x8離散餘弦轉換(Adaptive 8x8 DCT)使x264能夠智慧彈性地使用I幀的8x8轉換。此選項停用該功能。
建議:預設值
trellis
預設值:1
執行Trellis quantization來提高效率。
0
:停用。1
:只在一個巨集區塊的最終編碼上啟用。2
:在所有模式決策上啟用。
在巨集區塊時提供了速度和效率之間的良好平衡。在所有決策時則更加降低速度。
建議:預設值
注意:需要--cabac
no-fast-pskip
預設值:無
停用P幀的早期略過偵測(early skip detection)。非常輕微地提高品質,但要損失很多速度。
建議:預設值
no-dct-decimate
預設值:無
DCT Decimation會捨棄它認為“不必要的”DCT區塊。這會改善編碼效率,而降低的品質通常微不足道。設定此選項會停用該功能。
建議:預設值
nr
預設值:0
執行快速的雜訊削減(noise reduction)。根據此值估算影片的雜訊,並藉由在量化之前捨棄小細節來嘗試移除雜訊。這可能比不上優良的外部雜訊削減濾鏡的品質,但它執行得非常快。
建議:預設值,或者100~1000
deadzone-inter/intra
預設值:21/11
設定inter/intra亮度量化反應區(deadzone)的大小。反應區的範圍應該在0~32。此值設定x264會任意捨棄而不嘗試保留細微細節的層級。非常細微的細節既難以看見又耗費位元數,捨棄這些細節可以不用浪費位元數在視訊的此類低收益畫面上。反應區與--trellis
不相容。
建議:預設值
cqm
預設值:flat
設定所有自訂量化矩陣(custom quantization matrices)為內建的預設之一。內建預設有flat
和JVT
。
建議:預設值
參閱:--cqmfile
cqmfile
預設值:無
從一個指定的JM相容檔案來設定自訂量化矩陣。覆寫所有其他--cqm開頭的選項。
建議:預設值
參閱:--cqm
cqm4* / cqm8*
預設值:無
--cqm4
:設定所有4x4量化矩陣。需要16個以逗號分隔的整數清單。--cqm8
:設定所有8x8量化矩陣。需要64個以逗號分隔的整數清單。--cqm4i
、--cqm4p
、--cqm8i
、--cqm8p
:設定亮度和色度量化矩陣。--cqm4iy
、--cqm4ic
、--cqm4py
、--cqm4pc
:設定個別量化矩陣。
建議:預設值
視訊可用性資訊
這些選項在輸出資料流裡設定一個旗標,旗標可以被解碼器讀取並採取可能的動作。值得一提的是大多數選項在大多數情況下毫無意義,而且通常被解碼器忽略。
overscan
預設值:undef
如何處理溢出掃描(overscan)。溢出掃描的意思是裝置只顯示影像的一部分。
可用的值:
undef
:未定義。show
:指示要顯示整個影像。理論上如果有設定則必須被遵守。crop
:指示此影像適合在有溢出掃描功能的裝置上播放。不一定被遵守。
建議:在編碼之前裁剪(Crop),然後如果裝置支援則使用show
,否則不理會
videoformat
預設值:undef
指示此視訊在編碼/數位化之前是什麼格式。
可用的值:component, pal, ntsc, secam, mac, undef
建議:來源視訊的格式,或者未定義
range
預設值:auto
指示亮度和色度層級的輸出範圍是有限範圍或全範圍。如果設為TV
,則會使用有限範圍。如果設為auto
,則會使用與輸入視訊相同的範圍。
注意:如果range和--input-range
不同,則會進行範圍轉換。
詳細資訊可以參閱http://en.wikipedia.org/wiki/YCbCr。
建議:預設值
參閱:--input-range
colorprim
預設值:undef
設定以什麼色彩原色轉換成RGB。
可用的值:undef, bt709, bt470m, bt470bg, smpte170m, smpte240m, film
詳細資訊可以參閱http://en.wikipedia.org/wiki/RGB_color_space和http://en.wikipedia.org/wiki/YCbCr。
建議:預設值,除非你知道來源使用什麼色彩原色
transfer
預設值:undef
設定要使用的光電子(opto-electronic)傳輸特性(設定用於修正的色差補正(gamma)曲線)。
可用的值:undef, bt709, bt470m, bt470bg, linear, log100, log316, smpte170m, smpte240m
詳細資訊可以參閱http://en.wikipedia.org/wiki/Gamma_correction。
建議:預設值,除非你知道來源使用什麼傳輸特性
colormatrix
預設值:undef
設定用於從RGB原色中取得亮度和色度的矩陣係數。
可用的值:undef, bt709, fcc, bt470bg, smpte170m, smpte240m, GBR, YCgCo
詳細資訊可以參閱http://en.wikipedia.org/wiki/YCbCr。
建議:來源使用的矩陣,或者預設值
chromaloc
預設值:0
設定色度採樣位置(如ITU-T規格的附錄E所定義)
可用的值:0~5
參閱x264的vui.txt。
建議:
- 如果是從正確次採樣4:2:0的MPEG1轉碼,而且沒有做任何色彩空間轉換,則應該將此選項設為1。
- 如果是從正確次採樣4:2:0的MPEG2轉碼,而且沒有做任何色彩空間轉換,則應該將此選項設為0。
- 如果是從正確次採樣4:2:0的MPEG4轉碼,而且沒有做任何色彩空間轉換,則應該將此選項設為0。
- 否則,維持預設值。
nal-hrd
預設值:none
標誌HRD資訊。這是藍光資料流、電視廣播和幾個其他專業範圍所需要的。
可用的值:
建議:預設值,除非需要標誌此資訊
參閱:--vbv-bufsize
, --vbv-maxrate
, --aud
pic-struct
預設值:無
強制在Picture Timing SEI裡傳送pic_struct。
當使用--pulldown
或--tff
/--bff
時會自動啟用。
建議:預設值
crop-rect
預設值:無
指定一個位元資料流層級的裁剪矩形。如果想要解碼器在播放時裁剪,但因為某些原因不想要裁剪視訊再讓x264編碼,則可以使用此選項。指定的值是在播放時應該被裁剪的像素。
輸入/輸出
output
預設值:無
指定輸出檔名。指定的副檔名決定視訊的輸出格式。如果副檔名無法辨識,則預設輸出格式是raw視訊資料流(通常儲存為.264副檔名)。
特殊位置NUL
(Windows)或/dev/null
(Unix)指明輸出應該被丟棄。這在使用--pass
1
時特別有用,因為唯一在乎的輸出是--stats
。
muxer
預設值:auto
指定要輸出什麼格式。
可用的值:auto, raw, mkv, flv, mp4
auto
選項會根據提供的輸出檔名挑選一個多工器(muxer)。
建議:預設值
參閱:--output
demuxer
預設值:auto
設定x264要使用什麼解多工器(demuxer)和解碼器來剖析輸入視訊。
可用的值:auto, raw, y4m, avs, lavf, ffms
如果輸入檔案有raw、y4m或avs副檔名,則x264會使用相關的解多工器來讀取檔案。標準輸入會使用raw解多工器。否則,x264會嘗試以ffms來開啟檔案,然後再嘗試以lavf來開啟檔案,最後開啟失敗。
"lavf"和"ffms"選項需要x264以分別的程式庫編譯。如果使用到兩者之一,x264會從輸入檔案帶入時間碼(timecodes),條件是不能輸出為raw。這有效地使x264感知VFR。其他選項可以指定--fps
為固定幀率,或者指定--tcfile-in
為變動幀率。
建議:預設值
input-csp
預設值:無
告訴x264 raw視訊輸入是什麼色彩空間。支援的色彩空間可以從x264 --fullhelp
的說明裡得知。
output-csp
預設值:i420
告訴x264要輸出什麼色彩空間。
可用的值:i420, i422, i444, rgb
參閱:--input-csp
input-depth
預設值:無
指定raw視訊輸入的位元深度。
input-range
預設值:auto
指定來源的亮度和色度層級範圍。可以設定TV
為有限範圍或PC
為全範圍。
注意:如果--range
和input-range不同,則會進行範圍轉換。
建議:預設值,除非你知道來源是TV或PC層級
參閱:--range
input-res
預設值:無
指定raw視訊輸入的解析度。語法是--input-res 720x576
。
index
預設值:無
一個只在使用ffms --demuxer
時才會生效的選擇性設定。為ffms指定一個檔案來寫入輸入視訊的索引資料,之後的編碼可以參照此檔案來免去重新建立索引的必要。通常不需要特別指定,索引進程與視訊編碼相比並不慢。
建議:預設值,除非想要節省建立索引的幾分鐘時間
參閱:--demuxer
, FFMS2 API文件
sar
預設值:無
指定輸入視訊的採樣長寬比(SAR:Sample Aspect Ratio)。語法是--sar 40:33
。
此設定與幀尺寸結合可以用來編碼anamorphic的輸出視訊,藉由以下公式來決定顯示長寬比(DAR:Display Aspect Ratio):DAR = SAR x width/height
建議:如果有使用調整大小(resize)濾鏡且編碼anamorphic的輸入視訊,則可能需要設定此選項
參閱:http://en.wikipedia.org/wiki/Aspect_ratio_%28image%29#Distinctions
fps
預設值:自動
指定視訊幀率為浮點數(29.97)、比率(30000/1001)或整數(30)。當使用y4m、avs、ffms或lavf解多工器時,x264會使用從輸入資料流標頭(header)偵測到的幀率,否則會使用25。設定此選項會自動啟用--force-cfr
。
如果使用raw YUV輸入且--bitrate
為主的位元率控制,則需要使用此參數或--tcfile-in
來指定正確的幀率。否則x264不會達到目標位元率。
seek
預設值:無
指定要編碼的初始幀,允許編碼從源的任一時間點開始。
建議:預設值
frames
預設值:無
指定要編碼的最大幀數,允許編碼在源的任一時間點結束。
建議:預設值
level
預設值:自動
在輸出位元資料流裡設定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大小來保持與所選level的相容性(除非也手動指定--ref
)。注意:指定level並不會自動設定--vbv-maxrate
或--vbv-bufsize
,不過如果超過level指定的屬性則x264會發出警告。
我該挑選什麼Level?
Level 4.1通常被認為是桌上型消費性硬體可以支援的最高level。藍光只支援level 4.1,而且許多非行動裝置像Xbox 360指定level 4.1為官方支援的最高level。行動裝置像iPhone/Android則完全是另一回事。
建議:預設值,除非針對特定裝置
bluray-compat
預設值:無
啟用藍光支援的相容性處理。
verbose
預設值:無
顯示每個已編碼幀的統計資料。
建議:預設值
no-progress
預設值:無
停用編碼時的進度指示器。
建議:預設值
quiet
預設值:無
啟用安靜模式。
建議:預設值
log-level
預設值:info
指定記錄的最高等級。
可用的值:none, error, warning, info, debug
建議:預設值
psnr
預設值:無
啟用PSNR計算,在編碼完成時報告。此計算會降低一些速度。
建議:預設值
ssim
預設值:無
啟用SSIM計算,在編碼完成時報告。此計算會降低一些速度。
建議:預設值