1. 程式人生 > >x265 命令列引數大全

x265 命令列引數大全

除非一個引數被標記為 CLI ONLY,否則該引數也被x265_param_parse() 支援。CLI使用getopt 函式來解釋命令列引數,長短版本的引數都可以使用,長引數在不引起歧義的情況下可以截斷成短引數。API使用者必須把完整的引數名傳遞給 x265_param_parse()。

Preset和tune 有特殊的含義,API使用者需要在呼叫x265_param_parse()設定其他引數之前使用期望的preset 和tune 值來呼叫x265_param_default_preset()。 CLI 已經隱式地為使用者做了這件事情,因此CLI 的各選項是在使用者的preset 和tune 之後才應用的,與命令列引數的順序無關。

如果命令列中有一個額外的引數(非選項引數或引數屬性值),則CLI 將其視為輸入檔名,這就使得選項 –input 成為可選。如果有兩個額外的引數,那麼第二個引數就被視為輸出流檔名,這使得 –output 是可選的(如果輸入檔名已經隱含了)。這就使得 x265 in.y4m out.hevc 是一個有效的命令列。如果有超過兩個額外的引數,CLI 會認為有錯就會放棄該引數。


引數解釋:



Logging/Statistic Options

--help, -h 顯示幫助資訊
--version, -V:顯示版本資訊
--log-level <integer|string> :日誌級別。Debug級別就會記錄每一幀的QP、metric、bitrate。如果建立了一個csv日誌檔案,那麼每一幀寫入一次日誌而不是每一次編碼。Full級別會將hash和weight寫入日誌。-1就禁止所有的日誌,除非是致命的錯誤,也可以通過字串“none”來指定這個級別。下面是日誌級別號:0 – error; 1 – warning;2 – info(default); 3 – debug; 4 – full.

--no-progress :

取消掉週期性的編碼進度彙報。
      CLI ONLY
--csv <filename>
將編碼結果寫入到一個各種值以逗號分隔的日誌檔案中。如果這個檔案不存在則建立它。如果--csv-log-level為0,則每執行一次就新增一行日誌;如果--csv-log-level大於0,則每一幀寫入一行日誌;當--csv-log-level大於或等於2時,就可得到好幾幀的統計資料。
       CLI ONLY
--csv-log-level <integer> :
CSV日誌級別。 0 – summary(預設)
;1 – frame level;2 – frame level with performance statistics.
       CLI ONLY

--ssim, --no-ssim :
計算和彙報SSIM(結構相似度)值。如果要測量ssim,建議使用 –tune,否則結果不能用於比較。預設是disable
--psnr, --no-psnr :
計算和彙報PSNR(峰值信噪比)值。如果要測量psnr,建議使用 –tune,否則結果不能用於比較。預設是disable


Performance Options

--asm <integer:false:string>, --no-asm :  x265預設地會使用所有檢測到的CPU SIMD架構。你也可以試用 –no-asm 來禁止使用任何 SIMD 架構,或指定一個以逗號分隔的 SIMD 架構使用列表,匹配以下字串: MMX2, SSE, SSE2, SSE3, SSSE3, SSE4, SSE4.1, SSE4.2, AVX, XOP, FMA4, AVX2, FMA3, 一些高的架構就隱含了低架構可用;你也可以直接提供一個CPU能力圖。
        注意:如果指定該引數選項,就覆蓋了x265 的自動檢測,就有可能導致錯誤。如果指定了一個CPU不支援的SIMD 架構值就可能導致編碼奔潰。
        預設:自動檢測 SIMD 架構

--frame-threads, -F <integer> :同時編碼幀的數目。使用一個單獨的幀執行緒在壓縮率上有輕微的提高,因為在運動補償的時候所有的參考幀都可用,但是它有嚴重的效能影響。預設是自動檢測,取決於 CPU 核的數目和 WPP是否啟用。
過多的幀執行緒不會提高效能,反而會增加記憶體的開銷。
        Values:0 – 16 之間的任何數。預設:0,自動檢測.

--pools <string>, --numa-pools <string> :
每 NUMA 個節點有一個逗號分隔的執行緒列表。如果是 “none”,就沒有工作池建立,只有可能有幀的並行化。如果是 NULL 或 “ ”(預設),x265 所有的執行緒都用在每 NUMA 個節點上。

--wpp, --no-wpp : 波前編碼。編碼器可能開始編碼一行只要當前行上方至少有個 CTU(編碼樹單元)處於編碼過程中。這會帶來3-5倍的並行化和提高大約1%的壓縮率。如果執行緒池不可用,這個特性會被隱式地關閉掉。預設:開啟

--pmode, --no-pmode :
並行模式或分散式模式。如果開啟,編碼器會將每個CU(merge、inter、intra)的分析工作部署到多個工作執行緒。只有當x265沒有使得CPU核飽和才推薦使用該模式。如果-rect開啟,RD level處於3或4,此時是最有效的。RD level處於5或6時,通常會部署足夠多的工作來保證CPU過頭,假定你的CPU還沒有飽和。
        --pmode 會增加利用率而不會降低壓縮效果。事實上,因為這個模式是在並行模式下測量,這使得一些不切實際的模式過早退出,從而使得你通常會得到稍微好一點的壓縮率當開啟的時候(是以不跳過不太可能的模式為代價)。pmode繞過提前退出會降低編碼速度,尤其是preset為faster的時候。
當不存線上程池的時候,這個特徵被隱式地關閉了。

--pme, --no-pme : 並行運動估計。當開啟的時候,如果對於一個給定的CU有多餘兩個的參考需要運動搜尋,編碼器會將運動估計部署到多個工作執行緒進行工作。只有當x265沒有使得CPU核飽和才推薦使用該模式。--pmode比這個選項更有效,因為它所分發的工作量更高。開啟--pme選項,分發的工作過量超過並行帶來的好處一般不常見。
        當不存線上程池的時候,這個特徵被隱式地關閉了。

--preset, -p <integer|string> : 提供了幾個預設的值,在編碼效率和編碼速度之間做一個折中。該引數需在其他輸入引數應用之前啟用,因此可以覆蓋任何這些值所控制的引數值。預設的引數值如下: 0 – ultrafast; 1 – superfast;2 – veryfast; 3 – faster; 4 - fast;5 - medium(預設);6 – slow; 7 – slower; 8 – veryslow; 9 – placebo.

--tune, -t <string> : 設定特定的視訊源或情景,這個引數設定的應用是在preset之後,但在其他所有引數之前。預設:none
        Values :psnr、ssim、grain、zero-latency、fast-decode


Input/Output File Options

這些選項用於描述輸入視訊序列或,在--dither情況下,編碼前的序列要執行的操作。用於處理檔案(名字、格式、偏移、幀數)的所有選項都只應用在命令列介面中(即CLI)。
         CLI ONLY
--y4m :
無視檔案的字尾名,將輸入流解釋為YUV4MPEG2。這個選項會被隱含如果輸入檔名含有".y4m"字尾。
        CLI ONLY

--input-depth <integer> :
僅YUV有效:輸入檔案或流的畫素位深度。Values:任意位於8到16之間的值。預設:內部畫素深度。

CLI ONLY

--frames <integer> :期望編碼的幀數目。可以不指定,但是如果指定了該值,位元速率控制就會利用該資訊。它也可以用來確定一個編碼是否實際上是靜態影象檔次編碼(單幀)。

--dither :允許高質量縮小到編碼器的位深度。抖動是基於一行畫素的錯誤擴散到該圖片的下一行畫素,只有當輸入的位深度大於8位才有必要應用該選項。預設是關閉的。

CLI ONLY

--input-res <wxh> :僅YUV有效:原影象的尺寸 [w x h]

CLI ONLY

--input-csp <integer|string> :色度下采樣(僅YUV):目前只有支援4:0:0(單色)、4:2:0、4:2:2、4:4:4。你所輸入的色度下采樣格式必須要匹配你想要輸出的色度下采樣格式(libx265 不會執行任何色度下采樣的轉換),也必須得到你所指定的HEVC檔次的支援。

         0. i400(4:0:0 單色)- Main和Main 10檔次不支援

         1. i420(4:2:0 預設)- 所有的HEVC檔次支援

         2. i422(4:2:2 ) - Main、Main 10和Main 12檔次不支援

         3. i444(4:4:4)-  Main、Main 10、Main 12、Main 16支援

         4. nv12

         5. nv16

--fps <integer|float|numerator/denominator> :僅YUV : 原始幀率

          值的範圍:正整數、浮點數、或 分子/分母

--interlace <false|tff|bff>, --no-interlace :

         0. 逐行影象(預設)

         1. 先頂場

         2. 先底場

         HEVC將交錯的內容作為一場進行編碼。提供正確的場的順序給編碼器。源尺寸必須是場的尺寸,FPS必須是每秒以場為單位。解碼器必須要根據場的定向重新組合以用於顯示。

--seek <integer> :輸入檔案起始需要跳過的幀數,預設為 0.

--frames, -f <integer> :輸入序列中需要編碼的幀數,預設0(所有)

CLI ONLY

--output, -o <filename> :輸出檔名。如果有兩個額外的CLI選項,第一個就隱含為輸入檔名,第二個為輸出檔名,這就使得 --output 選項不是必須的。輸出檔案總是含有一個原始的HEVC位元率,CLI不支援任何容器檔案格式。

CLI ONLY

--output-depth, -D 8|10|12 :輸出HEVC位元流的位深度,也是編碼器內部的位深度。如果所要求的位深度與所連線的libx265位深度不一樣,它就會嘗試去為8位編碼器繫結libx265_main,為10位編碼器繫結libx265_main10,為12位編碼器繫結libx265_main12,使用與連線的libx265版本相同的API。

        如果輸出的位深度沒有指定,但是--profile有指定,則輸出位深度由profile的名字來獲取。


Profile, Level, Tier

--profile, -P <string>強制指定檔次的需求,確保解碼器的輸出流可修飾以支援指定的檔次。如果指定的檔次不被編碼器的編譯選項所支援(高位元位深度的編碼器不能輸出與Main或MainStillPicture相容的位元流),則有可能放棄該編碼器。

        x265支援一下的檔次:

        - 8bits 檔次:

                  * main, main-intra, mainstillpicture (or msp for short)
                  * main444-8, main444-intra, main444-stillpicture

        - 10bits 檔次:

                  * main10, main10-intra
                  * main422-10, main422-10-intra
                  * main444-10, main444-10-intra

        - 12bits 檔次:

                  * main12, main12-intra
                  * main422-12, main422-12-intra
                  * main444-12, main444-12-intra

        CLI ONLY

API 使用者在配置好引數結構之後必須要呼叫 x265_param_apply_profile() ,呼叫之後對引數結構的任何改變都有可能使得編碼器不相容。

如果沒有指定 --output-depth,那麼CLI應用會從profile的名字來獲取輸出位深度。

--level-idc <integer|float>最低的解碼需求級別。預設值0,意味著由編碼器自動檢測。如果指定了值,編碼器就會在指定級別內賦予編碼一些指定規則。如果編碼器不能達到這個級別,就會給出警告並放棄這個編碼器。如果所要求的級別比實際級別高,則傳送實際的需求級別。

        注意,指定解碼界別會強制編碼器開啟 VBV 用於常位元速率因子編碼,可能會導致不確定性。

        值被指定為浮點數或一個整數(級別乘以10),例如:級別 5.1 可以被指定為 “5.1” 或 “51”,級別 5.0 被指定為 “5.0”或“50”。

        附錄 A 級別: 1, 2, 2.1, 3, 3.1, 4, 4.1, 5, 5.1, 5.2, 6, 6.1, 6.2, 8.5

--high-tier, --no-high-tier如果 --level-idc 被指定,--high-tier允許支援那個級別的高等級。編碼器首先會在指定的級別和主等級下編碼,僅當有必要且那個級別的高等級可用的情況下才開啟高等級。如果你所要求的級別不支援高等級,那麼高等級不會被支援。如果 --no-high-tier 被指定,則編碼器只會在主等級下編碼。

        預設:開啟

--ref <1..16>L0 參考序列所允許的最大數目。這個數對運動搜尋的工作量有線性乘子效應,但是通常在壓縮和失真率上有有益的效果。

--allow-non-conformance, --no-allow-non-conformance允許libx265指定profile和無級別的情況下生成位元流。如果不滿足嚴格的級別條件,預設是放棄任何編碼。兩種最有可能的原因就是:--ctu太小,--ref太大,或者位元速率或者解析度超出了指定條件。

        預設:關閉

--uhd-bd 允許支援HD藍光碟格式,如果指定了與編碼選項不相容,則編碼器會嘗試著去修正或設定正確的編碼配置。如果編碼器不能這麼做,則這個選項就會被關閉。高度實驗性。

      預設:關閉


注意:

       --profile, --level-idc 和 --high-tier 僅當你在有限的資源限制下想要構建一個特定的解碼器以及在這些限制下含有位元流的情況下才設計使用。指定一個檔次或水平可能會降低編碼質量引數來滿足這些需求,但是永遠不會提升它們。它可能會開啟VBV約束當處於CRF編碼時。

        也要注意 x265用三個步驟來確定解碼器的檔次和水平。首先,使用所建議的編碼選項來配置 x265_param結構體,然後呼叫 x265_param_apply_profile() 來強制一個特定檔次(main、main10等)。第二,通過 x265_param 的例項來建立一個編碼器,--level-idc 和 --high-tier 引數用來降低碼流或其他特徵以達到給定的目標水平。最後,編碼器再次檢查最終的引數集和檢查最低解碼需求水平,這些資訊會被髮送到位元流的頭部裡。只有當用戶指定了高等級水平,檢測到的解碼水平才會使用高等級水平。

        待發送的檔次由編碼器內部位深度和輸入顏色空間來決定。

        如果 --keyint 為0或1,一個幀內檔次變數被髮送。

        如果 --total-frames 為1,一個靜態影象變數被髮送,但是這個引數並不總是由應用來設定,尤其是當CLI使用標準輸入流或libx265被第三方應用使用。


Mode decision / Analysis

--rd <1..6> 模式決策中RDO水平。這個值越大,模式分析越耗時,使用更多的率失真優化。值越小編碼速度越快,通常值越大位元流越小。預設:3

        注意:下面這個表是為準確起見,但並不一定是每個模式的最終行為。

        

        選項會影響編碼單元四叉樹,有時候也被引用為預測四叉樹。

--ctu, -s <64|32|16>最大CU尺寸(寬和高)。該值越大,x265編碼影象平坦區域的效率就越高,碼流降低的就越厲害。然而這會帶來並行化的損失,更少的CU行並行編碼,同樣更少的幀並行編碼。因為這個原因,preset選擇faster的話,CU的尺寸就設定為32。預設:64


--min-cu-size <64|32|16|8>

--limit-refs <0|1|2|3>

--limit-modes, --no-limit-modes

--rect, --no-rect

--amp, --no-amp

--early-skip, --no-early-skip

--rskip, --no-rskip

--fast-intra, --no-fast-intra

--b-intra, --no-b-intra

--cu-lossless, --no-cu-lossless

--tskip-fast, --no-tskip-fast

--rd-refine, --no-rd-refine

--analysis-mode <string|int>

--analysis-file <filename>

--rdoq-level <0|1|2>, --no-rdoq-level

--tu-intra-depth <1..4>

--tu-inter-depth <1..4>

--nr-intra <integer>, --nr-inter <integer>

--tskip, --no-tskip

--rdpenalty <0..2> :

--max-tu-size <32|16|8|4> :


Temporal / motion search options

--max-merge <1..5> :

--me <integer|string> :

--subme, -m <0..7> :

--merange <integer> :

--temporal-mvp, --no-temporal-mvp :

--weightp, -w, --no-weightp :

--weightb, --no-weightb :


Spatial / intra options

--strong-intra-smoothing, --no-strong-intra-smoothing :

--constrained-intra, --no-constrained-intra :


Psycho-visual options

--psy-rd <float> :

--psy-rdoq <float> :


Slice decision options

--open-gop, --no-open-gop :

--keyint, -I <integer> :

--min-keyint, -i <integer> :

--scenecut <integer>, --no-scenecut :

--intra-refresh :

--rc-lookahead <integer> :

--lookahead-slices <0..16> :

--b-adapt <integer> :

--bframes, -b <0..16> :

--bframe-bias <integer> :

--b-pyramid, --no-b-pyramid :






待續!