|
馬上註冊,結交更多好友,享用更多功能,讓你輕鬆玩轉社區。
您需要 登錄 才可以下載或查看,沒有賬號?註冊
x
本文章最後由 clubaudition 於 2010-11-10 11:40 編輯
原文 http://blog.yikuyiku.com/?p=2029
【 翻譯 】x264參數介紹(一、幀類型和碼率控制)
October 2, 2010 翻譯自:http://mewiki.project357.com/wiki/X264_Settings ,水平有限,勿吝指教。
輸入
用1個絕對路徑定義輸入文件(或者2個,rawYUV文件)。如下例:
x264.exe -o NUL C:\input.avs
x264 -o /dev/null ~/input.y4m
如果輸入文件是rawYUV格式的,還要把解析度一併輸入。如果開啟了Bitrate控制,還需要輸入幀率。
如下:
x264.exe -o NUL –fps 25 D:\input.yuv 1280×720
x264 -o /dev/null –fps 30000/1001 ~/input.yuv 640×480
預設值
預設值是x264在r1177版本增加的一個方便的指令行選項。可以用x264.exe –fullhelp 查詢所有的輔助指令。
profile
預設:無
說明:限制輸出文件的profile。這個參數將覆蓋其它所有值,此選項能保証輸出profile相同的視頻流。如果使用了這個選項,將不能進行無損壓縮(qp 0 or crf 0)。
可選:baseline,main,high
建議:不設定。除非解碼環境只支持main或者baseline profile的解碼。
preset
預設:medium
一些在壓縮效率和運算時間中平衡的預設值。如果指定了一個預設值,它會在其它選項生效前生效。
可選:ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow and placebo.
建議:可接受的最慢的值
tune
預設:無
說明:在上一個選項基礎上進一步優化輸入。如果定義了一個tune值,它將在preset之後,其它選項之前生效。
可選:film, animation, grain, stillimage, psnr, ssim, fastdecode, zerolatency and touhou.
建議:依據輸入選擇。如果沒有合適的就不要指定。
slow-firstpass
預設:無
說明:隨著預設值機制在r1177版本的出現,使用–pass 1會在解析指令行時增加以下設定:
* ref 1
* no-8x8dct
* partitions i4x4 (if originally enabled, else none)
* me dia
* subme MIN( 2, subme )
* trellis 0
如果設定preset=placebo則自動關閉此特性。如果想顯示關閉此特性,使用slow-firstpass。
幀類型
keyint
預設:250
說明:設定x264輸出中最大的IDR幀(亦稱關鍵幀)間距。
IDR幀是視頻流的“分隔符”,所有幀都不可以使用越過關鍵幀的幀作為參考幀。IDR幀是I幀的一種,所以它們也不參照其它幀。這意味著它們可以作為視頻的搜索(seek)點。
通過這個設定可以設定IDR幀的最大間隔幀數(亦稱最大圖像組長度)。較大的值將導致IDR幀減少(會用占用空間更少的P幀和B幀取代),也就同時減弱了參照幀選擇的限制。較小的值導致減少搜索一個隨機幀所需的平均時間。
建議:預設值(fps的10倍)對大多數視頻都很好。如果在為藍光、廣播、直播流或者其它什麼專業流編碼,也許會需要更小的圖像組長度(一般等於fps)。
參見:min-keyint, scenecut, intra-refresh
min-keyint
預設:auto(keyint/10)
說明:參見keyint的說明。過小的keyint範圍會導致產生“錯誤的”IDR幀(比如說,一個閃屏場景,參見上一篇blog)。此選項限制了IDR幀之間的最小距離。
建議:預設,或者與fps相等
參見:keyint, scenecut
no-scenecut
預設:無
說明:完全關閉適應I幀決定。
參見:scenecut
scenecut
預設:40
說明:設定決策使用I幀、IDR幀的閾值(場景變換檢測)。
x264會計算每一幀與前一幀的不同程度並得出一個值。如果這個值低於scenecut,那麼就算檢測到一個“場景變換”。如果此時距離上一幀的距離小於min-keyint則插入一個I幀,反之則插入一個IDR幀。
較高的值會增加偵測到“場景變換”紀律。更詳細的工作原理可見http://forum.doom9.org/showthread.php?t=121116
設定scenecut=0與no-scenecut等效。
建議:使用預設值
參見:keyint, min-keyint, no-scenecut
intra-refresh
預設:off
說明:讓x264為每keyint數量的幀使用宏塊內部編碼取代IDR幀。塊以水平移動列的方式更新,也叫刷新波。對於低延遲的流,這樣可以讓幀的尺寸比使用標準的IDR幀更加保持恆定。
而且這樣可以增強視頻流對丟包的容錯能力。這個選項會降低壓縮率,所以在确實需要的時候才選擇它。
還有一些有意思的事情:1、第一幀依然是IDR幀。2、內部宏塊只在P幀中存在,刷新波在一個或多個B幀後的P幀中廣泛存在。3、主要的壓縮率下降原因是在宏塊中新(左邊)的波並不能參考舊(右邊)的波。
建議:使用預設值
bframes
預設:3
說明:設定x264可使用的B幀的最大連續數量。
沒有B幀時,一個典型的x264流幀類型是這樣的:IPPPPP…PI。如果設定了-bframes 2,那麼兩個連續的P幀就可以用B幀替換,然後就像這樣:IBPBBPBPPPB…PI。
B幀和P幀的區別在於它可以參照它之後的幀,這個特點讓它可以顯著地提升壓縮率。他們的平均品質受 –pbratio選項的控制。
還有一些有意思的事情:
1、x264有2種B幀,一種可以作為參照幀,一種不能;
2、關於x264如何決策B幀或P幀,可以看看這個ffmpeg-devel郵件列表中的這一封http://article.gmane.org/gmane.comp.video.ffmpeg.devel/29064 。
這種情況下幀類型看起來就像這樣IBBBPBBBPBPI(假設設定–bframes 3)。
參見:–no-b-adapt, –b-bias, –b-pyramid, –ref, –pbratio, –partitions, –weightb
b-adapt
預設:1
說明:設定B幀決策算法,這個選項會影響到x264使用P幀或者B幀。
0 —— 關閉。總是使用B幀。和以前的 no-b-adapt選項效果相同;
1 —— ‘快速’算法。快速,–b-frames越大速度越快。推薦配合使用–bframes 16;
2 —— ‘最佳’算法,慢速,–b-frames越大速度越慢;
注意:批次編碼時,只有第一次編碼的此選項有效,因為第一次編碼結束時,幀類型就已經被決定了。
b-bias
預設:0
說明:調節使用B幀的力度。越大的值越偏向B幀,可以在-100和100之間選擇。100或-100不能保証完全或是全是B幀(使用 –b-adapt 0)。
請只在你認為你能做出比x264更好的碼率控制時才使用這個選項。
參見: –b-frames, –ipratio
b-pyramid
預設:normal
說明:允許B幀作為參照幀。如果關閉,那麼只有I幀和P幀才能作為參照幀。可以作為參照幀的B幀的量化參數會介於P幀和普通B幀之間。只在–b-frames設定大於等於2時此選項才生效。如果是在為藍光光碟編碼,請使用none或者strict。
none —— 不允許B幀作為參照幀;
strict —— 一個圖像組內只允許一個B幀參照幀,這是藍光編碼強制要求的標準;
normal —— 任意使用B幀參照幀;
參見:–bframes, –refs, –no-mixed-refs
open-gop
預設:none
說明:Open-GOP是一個提升壓縮效率的編碼技術。它有以下選項:
none —— 關閉
normal —— 開啟
bluray —— 開啟。一個稍低效的open-GOP版本,因為normal模式不能用於藍光編碼
有些解碼器不能完全支持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幀的值要小1-2,取決於那個B幀能不能作為參照)。最小可以選擇值1,只參照自己前面的那幀。
注意H.264標準限制了每個level可以參照的幀的數量。如果選擇level4.1,1080p最大選4,720p最大選9。
參照: –b-pyramid, –no-mixed-refs, –level
no-deblock
預設:無
說明:完全關閉內建去區塊濾鏡。不推薦使用。
參見: –deblock
deblock
預設:0:0
說明:調節H.264標準中的內建去塊濾鏡。這是種參數比很高的選擇。
詳細的參數運作原理可以看這篇文章http://forum.doom9.org/showthread.php?t=109747 (看樓主和akupenguin的回覆)。
See Also: –no-deblock
slices
預設:0
說明:設定每幀的分片數,強制使用矩形分片。(會被–slice-max-size 或 –slice-max-mbs選項覆蓋)
如果是在為藍光光碟編碼,設定為4。如果不是,不要使用這個選項,除非你確定你需要它。
參見:–slice-max-size, –slice-max-mbs
slice-max-size
預設:0
說明:設定每個分塊包括NAL頭的最大大小(bytes)。 (目前與 –interlaced選項不相同)
參見:–slices
slice-max-mbs
預設:0
說明:設定每個分塊包含的最大宏塊數量。 (目前與 –interlaced選項不相同)
參見:–slices
tff
說明:開啟隔行編碼並設定上半場在前。x264的隔行編碼使用MBAFF,因此效率不如逐行掃描。所以,僅在需要在隔行顯示的設備上顯示時才開啟這個選項(或是送給x264之前無法進行反隔行掃描)。這個選項會啟動 –pic-struct開啟。
bff
說明:開啟隔行編碼並設定下半場在前。更多信息同–tff。
constrained-intra
預設:無
說明:開啟SVC編碼的底層要求的強制幀內預測。選擇每個人都無視SVC了,你也可以忽略這個設定。
pulldown
預設:none
說明:為你的輸入串流(逐行掃描的,固定幀率的)使用一組預設的“軟性電視模式”。“軟性電視模式”在HandBrake Wiki裡面有很好的解釋。可選的參數有:none、22、32、64、double、triple、euro。除了none之外的選項都會啟動 –pic-struct開啟。
fake-interlaced
預設:無
說明:把串流標籤為隔行的但不按隔行編碼。用於編碼25p和30p的藍光相同視頻。
碼率控制
qp
預設:無
說明:三種可選的碼率控制方法之一。設定x264使用固定量化參數模式。給定的數量將被作為P幀的量化參數,I幀和B幀的量化參數由–ipratio and –pbratio參數進一步算出。QP模式適用固定的量化參數,這意味著最終的文件大小是不可知的(可以通過一些其他方法預測)。設定為0將產出無損的輸出。相同視覺質量時,QP模式產出的文件比crf模式大。QP模式將關閉自適應量化器,因為它是固定QP的。
這個選項和 –bitrate和–crf是互斥的,三者只能選一個,它們背後的原理可以看這篇文章http://blog.yikuyiku.com/index.php/archives/1901。
一般而言crf都能代替QP模式,不過QP因為完全不需要預測所以它會運行地更快些。
參見:–bitrate, –crf, –ipratio, –pbratio
bitrate
預設:無
說明:三種可選的碼率控制方法之二。設定x264使用固定目標Bitrate模式。固定目標Bitrate意味著最終文件的大小是可知的,但是目標的質量是不可知的。x264會試圖讓最終文件的整體碼率與給定的碼率相等。參數的量綱為kilobits/sec(8bit = 1byte)。
通常這個選項和–pass選項配合進行2趟編碼。
這個選項和 –qp和–crf是互斥的,三者只能選一個,它們背後的原理可以看這篇文章http://blog.yikuyiku.com/index.php/archives/1901。
參見:–qp, –crf, –ratetol, –pass, –stats
crf
預設:23.0
說明:三種可選的碼率控制方法之二。固定ratefactor。QP是固定量化器,bitrate是固定文件大小,crf則是固定“質量”。crf可以提供跟QP一樣的視覺的質量,但是文件更小。crf的單位是ratefactor。
crf是通過降低那些“不那麼重要”的幀的質量做到這一切的。“不那麼重要”意思是過於耗費碼率又難以用肉眼察覺的幀,比如復雜或者超高速運行的場景。省下來的碼率會用在其它更有效的幀裡。
crf編碼比2趟編碼快,因為它相當於省略了第1趟編碼。所以crf的最終碼率也是不可預測的。你應該依據應用場景來選擇碼率控制方式。
這個選項和 –qp和–crf是互斥的,三者只能選一個,它們背後的原理可以看這篇文章http://blog.yikuyiku.com/index.php/archives/1901。
參見:–qp, –bitrate
rc-lookahead
預設:40
說明:為mb-tree ratecontrol(Macroblock Tree Ratecontrol)和vbv-lookahead設定可用的幀的數量。最大可設定為250。
對於mb-tree而言,調大這個值會得到更准确地結果,但也會更慢。mb-tree能使用的最大值是–rc-lookahead和–keyint中較小的那一個。
對於vbv-lookahead而言,調大這個值會得更穩定和精确的碼率控制。vbv-lookahead能使用的最大值是如下公式算出來的:MIN(rc-lookahead, MA–keyint, MA–vbv-maxrate, –bitrate) / –vbv-bufsize * –fps))
參見:–no-mbtree, –vbv-bufsize, –vbv-maxrate
vbv-maxrate
預設:0
說明:設定VBV(Video Buffering Verifier)可用的最大碼率。使用VBV會降低視頻質量,只在真正需要的才設定它。
參見:–vbv-bufsize, –vbv-init,http://mewiki.project357.com/wik ... stions#VBV_Encoding
vbv-bufsize
預設:0
說明:設定VBV(Video Buffering Verifier)可用的最大緩衝區,單位是kilobits。使用VBV會降低視頻質量,只在真正需要的才設定它。
參見:–vbv-maxsize, –vbv-init,http://mewiki.project357.com/wik ... stions#VBV_Encoding
vbv-init
預設:0.9
說明:設定重放之前必須先載入多大的VBV緩衝。
如果值小於1,那麼大小就為 vbv-init * vbv-bufsize。如果大於1,則是以kbits為單位的值。
參見:–vbv-maxsize, –vbv-bufsize,http://mewiki.project357.com/wik ... stions#VBV_Encoding
crf-max
預設:無
說明:類似 –qp-max,但是設定的是最大的ratefactor值而不是量化參數。這個選項僅用於crf和vbv同時啟用的時候。它阻止x264使用小於給定值的ratefactor(也就是“質量”),哪怕會違反vbv。
一般用於流服務器。更多的資訊請看http://git.videolan.org/gitweb.cgi/x264.git/?a=commit;h=81eee062a4ce9aae1eceb3befcae855c25e5ec52。
參見:–crf, –vbv-maxrate, –vbv-bufsize
qpmin
預設:10
說明:設定x264可以使用的最小量化器。量化參數越小,輸出越接近輸入。使用某些值時,x264的輸出可以和輸入看起來完全一樣,雖然其實並不是精确相同的,通常就夠了沒有必要使用更多比特在宏塊上了。
如果開啟了自適應量化器(預設開啟),則不鼓勵提高qpmin的值,那樣可能會降低幀的平坦部分的質量。
參見:–qpmax, –ipratio
qpmax
預設:51
說明:qpmin的反面,設定x264可以使用的最大量化器。預設值51是H.264標準中的最大值,質量非常低。預設值51其實相當於沒有設定qpmax。如果你想控制x264輸出的最低品質,也許你想要把這個值調低一點(調到30-40最低了),但一般而言不推薦調節這個值。參見:–qpmin, –pbratio, –crf-max
qpstep
預設:4
說明:設定2幀間量化器最大的可變值。
ratetol
預設:1.0
說明:這個參數有2個可能的含義:
1、在1趟bitrate編碼時,這個參數控制x264可以偏離給定的平均目標Bitrate的百分比。可以設定為inf完全關閉碼率溢出偵測。最低可以設定為0.01。較高的值可以讓x264更好地處理影片結束部分的復雜場景。對於這個目的而言單位是百分比(1.0意味著允許1%的bitrate偏差)。
很多影片(比如說動作打斗片)在最後的片段裡十分復雜。1趟編碼並不知道哪裡是最復雜的片斷,往往到最後比特都已經用完了。把rateol設定為inf就能解決這個問題,它允許編碼器用類似 –crf的方式工作,當然,文件大小會溢出。
2、當開啟了vbv時(只要使用了任何–vbv-開頭的選項就會開啟),這個選項意味著vbv的強度。更高的值意味著允許更高的在設定的vbv值上下波動。在這個含義時,可以使用任意的度量單位。
ipratio
預設:1.40
說明:設定平均的I幀的量化器相比P幀量化器增值。更高的值意味著更高的I幀質量。
參見:–pbratio
pbratio
預設:1.30
說明:設定平均的B幀的量化器相比P幀量化器減值。更高的值意味著更低的B幀質量。開啟mbtree(預設開啟)選項時不可用,mbtree會自適應地計算B幀量化器。
參見:–ipratio
chroma-qp-offset
預設:0
說明:設定一個用於色度編碼(譯者按:視頻使用YUI編碼,人眼對於亮度更敏感)的量化器的偏移值。可以是負值。在開啟 psy-rd或 psy-trellis時 x264會自動降低色度的量化參數用於補償亮度的量化器,意味著色度質量會被降低。它們預設會在chroma-qp-offset的基礎上減2。
注意:x264在量化器29時會為亮度和色度使用同樣的量化器。往後,色度都會使用比亮度還好的量化器,最後,亮度達到q51時,色度的量化器是q39。這個是H.264標準中要求的做法。
aq-mode
預設:1
說明:自適應量化器模式。不使用自適應量化的話,x264趨向於使用較少的bit在缺乏細節的場景裡。自適應量化可以在整個視頻的宏塊裡更好地分配比特。它有以下選項:
0 —— 完全關閉自適應量化器
1 —— 允許自適應量化器在所有視頻幀內部分配比特。
2 —— 依據前一幀強度決策的自變量化器(實驗性的)。
參見: –aq-strength
aq-strength
預設:1.0
說明:自適應量化強度。設定自適應量化對於缺乏細節(平坦)的宏塊的剝削程度。不允許負值。0.0 – 2.0之外的值不推薦。
參見:–aq-mode
pass
預設:無
說明:這對2趟編碼是一個重要的選項。這個選項控制了x264如何處理 –stats指定的文件。它有三個選項。
1 —— 建立一個新的stats文件,用於第一趟編碼。
2 —— 讀取stats文件,用於最後一趟編碼。
3 —— 讀取stats文件,而且更新它。
stats文件包含了每個輸入幀的信息,x264可以讀取這些信息來改進輸出。大概意思就是先跑一趟編碼生成stats文件,然後第二趟編碼就可以使用這個文件優化編碼結果。視頻質量會得到很大的提升,大部分原因是因為可以更好地進行比特分配。
參見:–stats, –bitrate, –slow-firstpass X264_statsfile
stats
預設:’x264_2pass.log’
說明:設定x264讀取和寫入的stats文件名
no-mbtree
預設:無
說明:關閉基於宏塊樹的比特控制(macroblock tree ratecontrol)。基於宏塊樹的比特控制通過持續監控宏塊在幀間的運動和相對權重來提升視頻質量。它會單獨生成一個很大的stats文件。
建議值:保持預設
參見:–rc-lookahead
qcomp
預設:0.60
說明:量化器曲線壓縮參數。0.0意味著恆定Bitrate,1.0意味著恆定量化器。如果開啟了mbtree,這個選項會影響mbtree的強度(更高的值意味著更弱的mbtree)。
建議:保持預設
參見:–cplxblur, –qblur
cplxblur
預設:20
說明:把給定值作為高斯模糊的半徑應用到量化曲線上。這意味著分配給每個幀的量化器會被它附近的幀的量化器平均掉,這樣會達到限制量化器波動的效果。
參見:–qcomp, –qblur
qblur
預設:0.5
說明:在量化曲線壓縮後,把給定值作為高斯模糊的半徑應用到量化曲線上。這不是一個很重要的選項。
參見:–qcomp, –cplxblur
zones
預設:無
說明:調整視頻的特殊片段。可以用它修改大多數x264選項。
一個單獨的zone使用<start frame>,<end frame>,<options>的形式表達。多個zone用’/'分隔。
選項:
以下2個選項,每個zone只能設定其中一個,此選項必須是zone列出來的第一個選項:
b=<float> 使zone內的bitraye乘上給定的系數。在調整快速和慢速場景時很有用。
q=<int> 使用zone內使用給定的量化器。在優化一個幀序列是很有用。
其他可用選項:
ref=<integer>
b-bias=<integer>
scenecut=<integer>
no-deblock
deblock=<integer>:<integer>
deadzone-intra=<integer>
deadzone-inter=<integer>
direct=<string>
merange=<integer>
nr=<integer>
subme=<integer>
trellis=<integer>
(no-)chroma-me
(no-)dct-decimate
(no-)fast-pskip
(no-)mixed-refs
psy-rd=<float>:<float>
me=<string>
no-8x8dct
b-pyramid=<string>
限制:
一個zone的參照幀數量不能超過–ref定義的值。
如果Scenecut原本是關閉的,無法開啟它。
–me如果原本被設定為–me esa/tesa則不能修改。
Subme如果原本被設定為0則不能修改。
如果–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 20 < P-frame
2 B 22 < Referenced B-frame
3 i 21 < Non-IDR (non-key) I-frame
4 b 18 < Non-referenced B-frame
5 K 16 < Keyframe*
注意:
不用指定每一個幀。
只想設定幀類型時,可以把量化器設定為-1來表明允許x264自行選擇優化的量化器,
如果手工指定大量的幀類型和量化器之間穿插著讓x264自行決策的部分,則會降低x264的表現。
‘Keyframe’ 表示可以seek到的關鍵幀。如果–open-gop設定為none則意味著IDR幀,不然就意味著一個Non-IDR的標記為“發現點SEI”的I幀。
|
|