X264設定
本頁說明所有x264參數之目的和用法。參數的排列相同於在x264 --fullhelp
出現的順序。
x264設定
說明
x264帶有一些內置的文件。要閱讀此說明,執行x264 --help
、x264 --longhelp
或x264 --fullhelp
。越後面的選項將提供更詳細的資訊。
輸入
以一個位置參數指定輸入的視訊。例如:
x264.exe -o NUL C:\input.avs x264 -o /dev/null ~/input.y4m
當輸入的視訊是raw YUV格式時,還必須告訴x264視訊的解析度。你可能也要使用--fps
來指定幀率:
x264.exe -o NUL --fps 25 --input-res 1280x720 D:\input.yuv x264 -o /dev/null --fps 30000/1001 --input-res 640x480 ~/input.yuv
預設值系統
為了減少使用者花費時間和精力在命令列上而設計的一套系統。這些設定切換了哪些選項可以從x264 --fullhelp
的說明中得知。
profile
預設值:無
限制輸出資料流的profile。如果指定了profile,將覆蓋所有其他設定。所以如果指定了profile,將保證得到一個相容的資料流。如果設了此選項,將無法使用無損編碼(--qp
0
或--crf
0
)。
如果播放設備僅支援某個profile,就應該設此選項。大多數解碼器都支援High profile,所以沒有設定的必要。
可用的值:baseline, main, high
preset
預設值:medium
更改選項,以權衡壓縮效率和編碼速度。如果指定了preset,更改的選項將在所有其他參數套用前被套用。
通常應該將此選項設為你所能承受的最慢的值。
可用的值:ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo
tune
預設值:無
調整選項,以進一步優化為視訊的內容。如果指定了tune,更改的選項將在--preset
之後,但所有其他參數之前被套用。
如果視訊內容符合其中一個可用的值,則可以使用此選項,否則就別使用。
可用的值:film, animation, grain, stillimage, psnr, ssim, fastdecode, zerolatency
slow-firstpass
預設值:無
隨著預設值系統在r1177版本的出現,使用--pass
1
會在解析命令列的最後套用以下設定:
可以設--slow-firstpass
來停用此特性。注意,使用--preset
placebo
也會啟用slow-firstpass。
參閱:--pass
幀類型選項
keyint
預設值:250
設定x264輸出的流之最大IDR幀(亦稱為關鍵幀)間隔。可以指定"infinite
"讓x264永遠不要插入非場景變更的IDR幀。
IDR幀是資料流的「分隔符號」,所有幀都不能從IDR幀的另一邊參考資料。因此,IDR幀也是I幀,所以它們不從任何其他幀參考資料。這意味著它們可以用作視訊的搜尋點(seek points)。
注意,I幀通常明顯大於P/B幀(在低動態場景通常為10倍大或更多),所以當它們與極低的VBV設定合併使用時會打亂速率控制。在這些情況下,研究--intra-refresh
。
預設值對於大多數視訊沒啥問題。在為藍光、廣播、即時資料流或某些其他特殊情況編碼時,可能需要更小的GOP長度(通常等於幀率)。
參閱:--min-keyint
, --scenecut
, --intra-refresh
min-keyint
預設值:自動 (MIN(--keyint
/ 10, --fps
))
設定IDR幀之間的最小長度。
IDR幀的說明可以參閱--keyint
。過小的keyint範圍會導致「不正確的」IDR幀位置(例如閃屏場景)。此選項限制在每個IDR幀之後,要有多少幀才可以再有另一個IDR幀的最小長度。
min-keyint的最大允許值為--keyint
/2+1。
建議:預設值,或者等於幀率
no-scenecut
預設值:無
完全停用彈性I幀決策(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
, --refs
, --no-mixed-refs
open-gop
預設值:none
open-gop是一個提高效率的編碼技術。有三種模式:
none
:停用open-gop。normal
:啟用open-gop。bluray
:啟用open-gop。一個效率較低的open-gop版本,因為normal
模式無法用於藍光編碼。
某些解碼器不完全支援open-gop資料流,這就是為什麼此選項並未預設為啟用。如果想啟用open-gop,應該先測試所有可能用來撥放的解碼器。
open-gop的說明可以參閱http://forum.doom9.org/showthread.php?p=1300124#post1300124。
no-cabac
預設值:無
停用彈性內容的二進位算數編碼(CABAC:Context Adaptive Binary Arithmetic Coder)資料流壓縮,切換回效率較低的彈性內容的可變長度編碼(CAVLC:Context Adaptive Variable Length Coder)系統。大幅降低壓縮效率(通常10~20%)和解碼的硬體需求。
ref
預設值:3
控制解碼圖片緩衝(DPB:Decoded Picture Buffer)的大小。範圍是從0到16。總之,此值是每個P幀可以使用它前面多少個幀作為參考幀的數目(B幀可以使用的數目要少一或兩個,取決於它們是否作為參考幀)。可以作為參考幀的最小ref數是1。
還要注意的是,H.264規格限制了每個level的DPB大小。如果遵守Level 4.1規格,720p和1080p視訊的最大ref數分別為9和4。
參閱:--b-pyramid
, --no-mixed-refs
, --level
no-deblock
預設值:無
完全停用loop濾鏡。不建議。
參閱:--deblock
deblock
預設值:0:0
控制loop濾鏡(亦稱為inloop deblocker),這是H.264標準的一部分。就性價比來說非常有效率。
可以在http://forum.doom9.org/showthread.php?t=109747找到loop濾鏡的參數是如何運作的說明(參閱第一個帖子和akupenguin的回覆)。
參閱:--no-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 first)。x264的交錯式編碼使用MBAFF,本身效率比漸進式編碼差。出於此原因,僅在打算於交錯式顯示器上播放此視訊時才應該編碼為交錯式(或者視訊在送給x264之前無法進行去交錯)。此選項會自動啟用--pic-struct
。
bff
啟用交錯式編碼並指定底場優先(bottom field first)。詳細資訊可以參閱--tff
。
constrained-intra
預設值:無
啟用限制的內部預測(constrained intra prediction),這是SVC編碼的基礎層(base layer)所需要的。由於每個人都忽略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為符合藍光標準的視訊。
速率控制
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。
通常應該改用--crf
,儘管qp不需要lookahead來執行因此速度會較快。
參閱:--bitrate
, --crf
, --ipratio
, --pbratio
bitrate
預設值:無
三種速率控制方法之二。以目標位元速率(target 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
vbv-maxrate
預設值:0
設定重新填滿VBV緩衝的最大速率。
VBV會降低品質,所以必要時才使用。
參閱:--vbv-bufsize
, --vbv-init
, VBV Encoding Suggestions
vbv-bufsize
預設值:0
設定VBV緩衝的大小(單位為千位元)。
VBV會降低品質,所以必要時才使用。
參閱:--vbv-maxsize
, --vbv-init
, VBV Encoding Suggestions
vbv-init
預設值:0.9
設定VBV緩衝必須填滿多少才會開始播放。
如果值小於1,初始的填滿量為:vbv-init * vbv-bufsize。否則該值即為初始的填滿量(單位為千位元)。
參閱:--vbv-maxsize
, --vbv-bufsize
, VBV Encoding Suggestions
crf-max
預設值:無
一個類似--qp-max
的設定,只是指定的是最大速率係數而非最大量化值。當使用CRF且啟用VBV時此選項才會運作。它阻止x264降低速率係數(亦稱為「品質」)到低於給定的值,即使這樣做會違反VBV的條件約束。此設定主要適用於自訂資料流伺服器。詳細資訊可以參閱http://git.videolan.org/gitweb.cgi/x264.git/?a=commit;h=81eee062a4ce9aae1eceb3befcae855c25e5ec52。
參閱:--crf
, --vbv-maxrate
, --vbv-bufsize
qpmin
預設值:10
定義x264可以使用的最小量化值。量化值越小,輸出品質越接近輸入視訊。到了一定的值,x264的輸出看起來會跟輸入一樣,即使它並不完全相同。通常沒有理由允許x264花費比這更多的位元數在任何特定的巨集區塊上。
當彈性量化啟用時(預設啟用)不鼓勵提高qpmin,因為這會降低幀裡面平面背景區域的品質。
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設為inf可以減輕此情況,藉由允許編碼以更像
- When VBV is activated (ie, you're specified --vbv-* options), this setting also affects VBV aggressiveness. Setting this higher allows VBV to fluctuate more at the risk of possibly violating the VBV settings. For this purpose, the unit of measure is arbitrary.