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,將會保證得到一個相容的資料流。如果設了此選項,將會無法使用無失真(lossless)編碼(--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編碼建議
vbv-bufsize
預設值:0
設定VBV緩衝的大小(單位為千位元)。
VBV會降低品質,所以必要時才使用。
參閱:--vbv-maxsize
, --vbv-init
, VBV編碼建議
vbv-init
預設值:0.9
設定VBV緩衝必須填滿多少才會開始播放。
如果值小於1,初始的填滿量為:vbv-init * vbv-bufsize。否則該值即為初始的填滿量(單位為千位元)。
參閱:--vbv-maxsize
, --vbv-bufsize
, VBV編碼建議
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可以減輕此情況,藉由允許編碼以更像
- 當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 across frames and weighting accordingly來改善整體壓縮率。 Using macroblock tree ratecontrol overall improves the compression by keeping track of temporal propagation across frames and weighting accordingly. Requires a new large statsfile in addition to the already existing for multipass encodes.
建議:預設值
參閱:--rc-lookahead