AV1 编码器研究之aomenc.exe命令行参数简析
? ? ? ? ?用編碼器打印help信息
命令行參數歸類
命令行詳細內容
通用命令
全局編碼選項
?碼率控制選項
Twopass碼率控制選項
關鍵幀設置選項
?AV1 特定選項
用編碼器打印help信息
運行如下命令可以將aomenc.exe內置的一些幫助信息輸出到help.txt中。下文主要以help.txt中的內容進行分析。目前還是基于其他編碼標準的經驗分析AV1的一些命令參數,可能會有一些理解錯誤,對于不確定的地方后續進行實驗測試,如果有哪位大拿發現有錯漏也請不吝指出。
aomenc.exe --help >help.txt命令行參數歸類
aomenc將命令行分成通用命令、編碼器全局選項、碼率控制選項、Twopass碼率控制選項、關鍵幀設置選項、AV1 特定選項這六類。
對于一般用戶來說,單純的離線壓縮任務只需指定下文中通用命令、編碼器全局選項中相關的參數即可,如輸入\輸出文件名及格式、對編碼側重壓縮速度還是壓縮質量等相對宏觀上層的命令。
對于稍偏專業的用戶,如有實時壓縮、傳輸的需求可進一步嘗試調整碼率控制選項、Twopass碼率控制選項、關鍵幀設置選項中的一些參數配置,如指定碼率、關鍵幀間隔等影響碼率分布和實時性的參數。
最后一類AV1 特定選項則暴露了很多編碼工具的開關選項,個人理解這些都是更偏向專業用戶或者有算法研究興趣的朋友。
命令行詳細內容
通用命令
命令中有兩種格式,后面帶的意思是需要指定輸入參數如-c,而不帶參數()的命令類似開關或者切換模式,后面不需要帶參數。
--help 打印幫助信息,上文的示例中有用到。-c <arg>, --cfg=<arg> 指定使用的配置文件。有 -c <filename>和--cfg=<filename>兩種形式,下同不再贅述。-D, --debug 指定使用debug模式,這個命令的直接翻譯是“使輸出具有確定性”,不太明白是何意,個人理解成會輸出一些編碼信息,后續測試一下再更新。-o <arg>, --output=<arg> 指定輸出文件名。--codec=<arg> 指定使用的編碼器。(注:難道有多個編碼器?)-p <arg>, --passes=<arg> 指定編碼的次數,允許1或2次。--pass=<arg> 指定執行第1次或第2次編碼。--fpf=<arg> 指定第1次編碼輸出的統計信息。--limit=<arg> 指定在編碼N幀后停止,也就是指定編碼的幀數。--skip=<arg> 指定跳過序列的前N幀,也就是從第N+1幀開始編碼。--good 使用質量下限約束。(注:意思是保障質量不低于某個程度?)--rt 使用實時編碼的質量下限約束。(注:相比上一個命令加多了編碼速度的約束?)-q, --quiet 不輸出編碼進度信息。-v, --verbose 顯示編碼器參數。--psnr 顯示PSNR。--webm 輸出WebM(啟用WebM IO時的默認值)。(注:WebM是啥?)--ivf 輸出IVF。(注:IVF是裸碼流封裝好的格式)--obu 輸出OBU。(注:OBU是AV1的裸碼流)--q-hist=<arg> 顯示量化器的直方圖。(注:似乎是輸出量化狀態用于查看是否符合預期的工具。)--rate-hist=<arg> 輸出碼率直方圖。--disable-warnings 不顯示關于潛在不正確編碼配置的警告信息。-y, --disable-warning-prompt 顯示警告,但不推薦用戶繼續編碼。--test-decode=<arg> 測試編解碼匹配與否。三檔可選<off, fatal, warn>全局編碼選項
--yv12 輸入文件是YV12格式。(注:看似和NV12名字比較相近,不確定是同個含義)--i420 輸入文件是I420格式。 (默認格式,應該是YUV4:2:0)--i422 輸入文件是I422格式。(應該是YUV4:2:2)--i444 輸入文件是I444格式。(應該是YUV4:4:4)-u <arg>, --usage=<arg> 指定profile number。-t <arg>, --threads=<arg> 指定最大線程數。--profile=<arg> 指定碼流的profile。-w <arg>, --width=<arg> 圖像寬。-h <arg>, --height=<arg> 圖像高。--forced_max_frame_width=<arg> 強制的最大圖像寬度。(注:允許的最大圖像寬度?)--forced_max_frame_height=<arg> 強制的最大圖像高度。(注:允許的最大圖像高度?)--stereo-mode=<arg> 指定立體聲3D視頻格式??蛇x<mono, left-right, bottom-top, top-bottom, right-left>。--timebase=<arg> 指定時間戳的精度。輸出中所需的時間戳精度,以小數秒表示。 默認值為1/1000。--fps=<arg> 指定幀率。--global-error-resilient=<arg> 啟用全局錯誤恢復功能。-b <arg>, --bit-depth=<arg> 指定源位深,版本小于等于1的只支持8-bit,版本2支持10\12-bit。(注:個人理解版本2也支持8-bit)--lag-in-frames=<arg> 指定最大延遲幀數。--large-scale-tile=<arg> 大范圍tile編碼(0:不使用,1:使用,僅在IVF輸出時可用)。(注:又一個不太明白的命令,AV1也支持類似HEVC的tile劃分嗎?)--monochrome 單色視頻,只有亮度沒有色度。--full-still-picture-hdr 對靜態圖片使用完整header。(注:單幀圖片可以省略一些header信息嗎?)?碼率控制選項
--drop-frame=<arg> 時域重采樣門限,buffer的百分比。(注:個人理解為是buffer滿溢達到一定門限時進行丟幀操作。)--resize-mode=<arg> 幀大小重調模式--resize-denominator=<arg> 重調幀大小的分母--resize-kf-denominator=<arg> 重調幀大小關鍵幀的分母--superres-mode=<arg> 超分辨率模式--superres-denominator=<arg> 超分辨率模式的分母--superres-kf-denominator=<arg> 超分辨率模式關鍵幀的分母--superres-qthresh=<arg> 超分辨率模式qindex門限--superres-kf-qthresh=<arg> 超分辨率模式關鍵幀qindex門限--end-usage=<arg> 碼率控制模式vbr-可變碼率模式,cbr-恒定碼率模式,cq-恒定qp?q-固定qp?--target-bitrate=<arg> 碼率(kbps)--min-q=<arg> 最小量化參數--max-q=<arg> 最大量化參數--undershoot-pct=<arg> 數據率下沖百分比(???)--overshoot-pct=<arg> 數據率上沖百分比(???)--buf-sz=<arg> 客戶端緩沖區大小(ms為單位)--buf-initial-sz=<arg> 客戶端初始緩沖區大小Client (ms為單位)--buf-optimal-sz=<arg> 客戶端最佳緩沖區大小 (ms為單位)Twopass碼率控制選項
--bias-pct=<arg> 恒定碼率/可變碼率偏移(0=CBR, 100=VBR)--minsection-pct=<arg> GOP最小碼率(目標碼率的百分比)--maxsection-pct=<arg> GOP最大碼率 (目標碼率的百分比)關鍵幀設置選項
--enable-fwd-kf=<arg> 啟用前向參考關鍵幀--kf-min-dist=<arg> 最小關鍵幀間隔--kf-max-dist=<arg> 最大關鍵幀間隔--disable-kf 禁用關鍵幀設置?AV1 特定選項
這一小節列的是AV1特有的選項,但其中一些也和其他編碼器(比如HEVC的X265)相似。主要是和編碼器相關的一些特性,如選擇某些塊劃分結構、環路濾波功能的使能等。有一些我目前還不太確定功能的選項均標以(??)提示,有待后續更新。
--cpu-used=<arg> 運行速度設置(0..5 good模式, 6..8 realtime模式)--auto-alt-ref=<arg> 啟用自動替代參考幀--sharpness=<arg> 環路濾波銳化(0..7)--static-thresh=<arg> 運動檢測門限--row-mt=<arg> 基于行的多線程功能(0: 關, 1: 開 (default))--tile-columns=<arg> 要使用的tile列數, log2值(注:所以AV1也支持類HEVC的tile劃分?)。--tile-rows=<arg> 要使用的tile行數,log2值。--enable-tpl-model=<arg> 基于幀時域相關性的RDO(0: 關閉, 1: 基于后向源). deltaq模式要求啟用該模式。(注:難道是分析幀間塊的相關性用于RD決策?)--enable-keyframe-filterin 啟用在關鍵幀的時域濾波(0: 關閉, 1: 打開 (默認打開))。--arnr-maxframes=<arg> 最大替代參考幀數量(0..15)--arnr-strength=<arg> 替代參考幀濾波強度(0..6)--tune=<arg> 基于下列失真度量指標之一調優:psnr, ssim, vmaf_with_preprocessing, vmaf_without_preprocessing, vmaf。--cq-level=<arg> 恒定或受限質量的等級。--max-intra-rate=<arg> 最大I幀碼率(pct?百分比?)。--max-inter-rate=<arg> 最大P幀碼率(pct?百分比?)。--gf-cbr-boost=<arg> 在CBR模式下允許Golden Frame的碼率上升(pct?百分比?)。--lossless=<arg> 無損壓縮模式(0: 不啟用 (默認), 1: 啟用)--enable-cdef=<arg> 啟用有限方向加強濾波器(0: 不啟用, 1: 啟用 (默認))--enable-restoration=<arg> 啟用環路恢復濾波器(0: 不啟用 (實時模式的默認值), 1: 啟用 (非實時模式的默認值))。--enable-rect-partitions=<arg> 啟用矩形劃分(0: 不啟用, 1: 啟用 (默認))--enable-ab-partitions=<arg> 啟用ab(??)劃分 (0: 不啟用, 1: 啟用 (默認))--enable-1to4-partitions=< 啟用1:4和4:1的劃分 (0: 不啟用, 1: 啟用 (默認))--min-partition-size=<arg> 設置最小分塊尺寸 (4:4x4, 8:8x8, 16:16x16, 32:32x32, 64:64x64, 128:128x128). 在分辨率大于4k或更快編碼速度的設置中,最小分塊尺寸是8。 --max-partition-size=<arg> 設置最大分塊尺寸 (4:4x4, 8:8x8, 16:16x16, 32:32x32, 64:64x64, 128:128x128)。--enable-dual-filter=<arg> 啟用雙重濾波器 (0: 不啟用, 1: 啟用 (默認))--enable-chroma-deltaq=<ar 啟用色度delta quant(0: 不啟用 (默認), 1: 啟用)--enable-intra-edge-filter 啟用幀內邊緣濾波 (0: 不啟用, 1: 啟用 (默認)))--enable-order-hint=<arg> 啟用順序提示(??) (0: 不啟用, 1: 啟用 (默認))--enable-tx64=<arg> 啟用64x64的變換(??)(0: 不啟用, 1: 啟用 (默認))--enable-flip-idtx=<arg> 啟用擴展的一些變換類型 (0: 不啟用, 1: 啟用 (默認)) 包括 FLIPADST_DCT, DCT_FLIPADST, FLIPADST_FLIPADST, ADST_FLIPADST, FLIPADST_ADST, IDTX, V_DCT, H_DCT, V_ADST, H_ADST, V_FLIPADST, H_FLIPADST。(注:似乎AV1也在變換核上做了優化,引入更多的變換核)--enable-dist-wtd-comp=<arg> 啟用基于距離加權的復合 (0: 不啟用, 1: 啟用 (默認))(注:該項及后面的多項復合是指幀間預測的時候??)--enable-masked-comp=<arg> 啟用蒙版(wedge / diff-wtd)復合 (0: 不啟用, 1: 啟用 (默認))--enable-onesided-comp=<arg> 啟用單邊復合 (0: 不啟用, 1: 啟用 (默認))--enable-interintra-comp=<arg> 啟用幀間-幀內復合 (0: 不啟用, 1: 啟用 (默認))--enable-smooth-interintra 啟用平滑的幀間-幀內復合 (0: 不啟用, 1: 啟用 (默認))--enable-diff-wtd-comp=<ar 啟用平基于區別加權的復合 (0: 不啟用, 1: 啟用 (默認))--enable-interinter-wedge= 啟用幀間-幀間楔型復合(0: 不啟用, 1: 啟用 (默認))--enable-interintra-wedge= 啟用幀間-幀內楔型復合(0: 不啟用, 1: 啟用 (默認))--enable-global-motion=<ar 啟用全局運動(0: 不啟用, 1: 啟用 (默認))--enable-warped-motion=<ar 啟用局部翹曲運動(0: 不啟用, 1: 啟用 (默認))--enable-filter-intra=<arg 啟用濾波幀內預測模式(0: 不啟用, 1: 啟用 (默認))--enable-smooth-intra=<arg 啟用平滑幀內預測模式(0: 不啟用, 1: 啟用 (默認))--enable-paeth-intra=<arg> 啟用Paeth 幀內預測模式(0: 不啟用, 1: 啟用 (默認))--enable-cfl-intra=<arg> 啟用色度從亮度生成幀內預測模式(0: 不啟用, 1: 啟用 (默認))--force-video-mode=<arg> 強制視頻模式(0: 不啟用, 1: 啟用 (默認))--enable-obmc=<arg> 啟用OBMC (0: 不啟用, 1: 啟用 (默認))--enable-overlay=<arg> 啟用編碼覆蓋幀(0: 不啟用, 1: 啟用 (默認))--enable-palette=<arg> 啟用調色板預測模式(0: 不啟用, 1: 啟用 (默認))--enable-intrabc=<arg> 啟用幀內塊復制預測模式(0: 不啟用, 1: 啟用 (默認))--enable-angle-delta=<arg> 啟用幀內角度差值(0: 不啟用, 1: 啟用 (默認))--disable-trellis-quant=<a 禁用量化系數的網格優化Disable trellis optimization of (0: 不禁用 1: 禁用 2: rd搜索時禁用 3: yrd搜索時禁用(default))--enable-qm=<arg> 啟用量化矩陣(0: 不啟用(默認), 1: 啟用 )--qm-min=<arg> 最小量化矩陣平整度(0..15), 默認8--qm-max=<arg> 最大量化矩陣平整度(0..15), 默認15--reduced-tx-type-set=<arg 使用簡化的變化類型集合--use-intra-dct-only=<arg> 僅幀內預測模式使用DCT--use-inter-dct-only=<arg> 僅幀間預測模式使用DCT--use-intra-default-tx-onl 幀內模式僅使用默認變換--quant-b-adapt=<arg> 使用自適應quantize_b(??)--coeff-cost-upd-freq=<arg 系數代價的更新頻率:0: Super Block, 1: Super Block Row per Tile, 2: Tile。--mode-cost-upd-freq=<arg> 模式代價的更新頻率:0:Super Block, 1: Super Block Row per Tile, 2: Tile--mv-cost-upd-freq=<arg> 運動矢量代價的更新頻率:0: SB, 1: SB Row per Tile, 2: Tile, 3: Off--frame-parallel=<arg> 啟用幀并行解碼特點(0: 不啟用(默認), 1: 啟用 )--error-resilient=<arg> 啟用錯誤恢復功能(0: 不啟用(默認)--aq-mode=<arg> 自適應量化模式(0: 關閉(默認), 1: 基于方差 2: 基于復雜度, 3: 循環刷新)--deltaq-mode=<arg> Delta qindex 模式(0: 關閉, 1: deltaq客觀模式 (default), 2: deltaq 感知模式). 需要enable-tpl-model作為先決條件。--delta-lf-mode=<arg> 啟用delta-lf-mode(0: 不啟用(默認), 1: 啟用 )--frame-boost=<arg> 啟用幀定期增強 (0: 不啟用(默認), 1: 啟用 )--noise-sensitivity=<arg> 噪聲敏感度(用于模糊原始幀?)--tune-content=<arg> 基于內容類型調整:default(默認), screen(屏幕內容)--cdf-update-mode=<arg> 熵編碼概率分布函數(Cumulative Distribution Function, CDF)更新:(0: 不更新CDF; 1: 在所有幀上進行CDF更新(默認); 2: 有選擇地在某些幀更新CDF。--color-primaries=<arg> 輸入內容的色彩格式:bt709, unspecified, bt601, bt470m, bt470bg, smpte240, film, bt2020, xyz, smpte431, smpte432, ebu3213--transfer-characteristics 輸入內容的傳輸特性(CICP):unspecified, bt709, bt470m, bt470bg, bt601, smpte240, lin, log100, log100sq10, iec61966, bt1361, srgb, bt2020-10bit, bt2020-12bit, smpte2084, hlg, smpte428--matrix-coefficients=<arg 輸入內容的矩陣系數:identity, bt709, unspecified, fcc73, bt470bg, bt601, smpte240, ycgco, bt2020ncl, bt2020cl, smpte2085, chromncl, chromcl, ictcp--chroma-sample-position=< 傳輸4:2:0格式序列時色度采樣位置:unknown, vertical, colocated--min-gf-interval=<arg> 最小gf / arf幀間隔 (默認 0, 使用內建判斷)--max-gf-interval=<arg> 最大gf / arf幀間隔 (默認 0, 使用內建判斷)--gf-min-pyr-height=<arg> GF(Golden Frame??)group 金字塔結構的最小高度(0 (默認) to 5)--gf-max-pyr-height=<arg> GF(Golden Frame??)group 金字塔結構的最大高度(0 to 5 (默認))--sb-size=<arg> Superblock size to use: dynamic, 64, 128--num-tile-groups=<arg> 最大tile group個數, 默認 1--mtu-size=<arg> Tile group的MTU尺寸 , 默認0 (no MTU targeting), overrides maximum number of tile groups--timing-info=<arg> 在碼流中傳輸timing info(當前模型僅支持無隱藏幀、無超分辨率幀的情況):unspecified, constant, model--film-grain-test=<arg> 膠片顆粒測試矢量 (0: none (default), 1: test-1 2: test-2, ... 16: test-16)--film-grain-table=<arg> 包含膠片顆粒參數的文件的路徑--denoise-noise-level=<arg 噪聲量(from 0 = don't denoise, to 50)--denoise-block-size=<arg> 降噪塊尺寸(default = 32)--max-reference-frames=<ar 每幀允許的最大參考幀數(3 to 7 (default))--reduced-reference-set=<a 使用簡化的單一和復合參考集(0: off (default), 1: on)--enable-ref-frame-mvs=<ar 啟用時域mv預測(default is 1)--target-seq-level-idx=<ar 目標序列層級索引。數值以"ABxy"(小于4位時前面補0)的形式呈現。AB: 操作點(Operating point, OP)索引; xy: OP對應的目標層級索引。E.g. "0" means target level index 0 for the 0th OP; "1021" means target level index 21 for the 10th OP.--set-tier-mask=<arg> 設置位掩碼以指定32個可能的OP中的每一個符合哪個層。Bit value 0(defualt): Main Tier; 1: High Tier.--min-cr=<arg> 設置最小壓縮率(取整數值)。 默認值為0。如果非零,則編碼器將嘗試使每個幀的壓縮率高于給定值除以100。-b <arg>, --bit-depth=<arg> Codec的bit depth(8 for version <=1, 10 or 12 for version 2):8, 10, 12--input-bit-depth=<arg> 輸入文件的bit depth。--input-chroma-subsampling-x 色度下采樣x位置值。--input-chroma-subsampling-y 色度下采樣y位置值。--sframe-dist=<arg> S-Frame 間隔(frames)--sframe-mode=<arg> S-Frame 插入模式(1..2)--annexb=<arg> 以Annex-B形式保存(碼流?)?
總結
以上是生活随笔為你收集整理的AV1 编码器研究之aomenc.exe命令行参数简析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多变量分析绘图及分类属性绘图【知识整理】
- 下一篇: 单片机C51 - 串行通信原理及串口编程