X264設定

来自NMM Doc
Holy讨论 | 贡献2013年1月6日 (日) 15:59的版本 →‎merange
跳到导航 跳到搜索

本頁說明所有x264參數之目的和用法。參數的排列相同於在x264 --fullhelp出現的順序。

參閱:X264統計資料輸出X264統計資料檔案X264編碼建議

x264設定

說明

x264帶有一些內置的文件。要閱讀此說明,執行x264 --helpx264 --longhelpx264 --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。

建議:預設值,或者等於幀率

參閱:--keyint, --scenecut

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設定相同作用。
1:“快速”演算法,較快,越大的--bframes值會稍微提高速度。當使用此模式時,基本上建議搭配--bframes 16使用。
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做出更好的位元率控制決策時才使用此選項。

參閱:--bframes, --ipratio

b-pyramid

預設值:normal

允許B幀作為其他幀的參照幀。沒有此設定時,幀只能參照I/P幀。雖然I/P幀因其較高的品質作為參照幀更有價值,但B幀也是很有用的。作為參照幀的B幀會得到一個介於P幀和普通B幀之間的量化值。b-pyramid需要至少兩個以上的--bframes才會運作。

如果是在為藍光編碼,須使用nonestrict

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

參閱:--qp, --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編碼建議

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,因為這會降低幀裡面平滑背景區域的品質。

參閱:--qpmax, --ipratio

关于qpmin的预设值:在x264 r1795版本之前,该选项预设值为10。

qpmax

預設值:69

定義x264可以使用的最大量化值。預設值69是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的模式運行,但檔案大小會暴增。
  • 當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的選項啟用時(psy-rd、psy-trellis),x264會自動將此值再減去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, --qblur

cplxblur

預設值:20.0

以給定的半徑範圍套用高斯模糊(gaussian blur)於量化值曲線。這意味著分配給每個幀的量化值會被它的鄰近幀模糊掉,以限制量化值的波動。

參閱:--qcomp, --qblur

qblur

預設值:0.5

在曲線壓縮之後,以給定的半徑範圍套用高斯模糊於量化值曲線。不怎麼重要的設定。

參閱:--qcomp, --cplxblur

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未啟用則等同於一個IDR I幀,否則等同於一個加上Recovery Point SEI旗標的非IDR I幀。

分析

partitions

預設值:p8x8,b8x8,i8x8,i4x4

H.264視訊在壓縮過程中劃分為16x16的巨集區塊。這些區塊可以進一步劃分為更小的分割,這就是此選項要控制的部分。

此選項可以啟用個別分割。分割依不同幀類型(I、P、B)啟用。

可用的分割: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)的預測模式。有兩種模式可用:spatialtemporal。可以指定none來停用direct動態向量,或指定auto來允許x264在兩者之間切換為適合的模式。如果設為auto,x264會在編碼結束時輸出使用情況的資訊。auto最適合用於兩階段編碼,但也可用於一階段編碼。在第一階段auto模式,x264持續記錄每個方法執行到目前為止的好壞,並從該記錄挑選下一個預測模式。注意,僅在第一階段有指定auto時,才應該在第二階段指定auto;如果第一階段不是指定auto,第二階段將會預設為temporalnone模式會浪費位元數,因此強烈不建議。

建議: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會大幅減慢編碼速度。

極大的merange(>64)不大可能找到任何新的動態向量是有用的,所以在某些情況下它可能非常輕微地降低壓縮率。

參閱:--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 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: 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)為內建的預設之一。內建預設有flatJVT

建議:預設值

參閱:--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_spacehttp://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資訊。這是藍光資料流、電視廣播和幾個其他專業範圍所需要的。

可用的值:

none:不指定HRD資訊。
vbr:指定HRD資訊。
cbr:指定HRD資訊並以--bitrate指定的位元率來封裝位元資料流。需要--bitrate模式的位元率控制。

建議:預設值,除非需要標誌此資訊

參閱:--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, --muxer

input-csp

預設值:無

告訴x264 raw視訊輸入是什麼色彩空間。支援的色彩空間可以從x264 --fullhelp的說明裡得知。

參閱:--input-res, --fps

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

參閱:--input-csp, --fps

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計算,在編碼完成時報告。此計算會降低一些速度。

建議:預設值