【AV1 编码器研究一】aomenc.exe命令行参数简析

【AV1 编码器研究一】aomenc.exe命令行参数简析

    • 用编码器打印help信息
    • 命令行参数归类
    • 命令行详细内容
      • 通用命令
      • 全局编码选项
      • 码率控制选项
      • Twopass码率控制选项
      • 关键帧设置选项
      • AV1 特定选项

持续更新中。
2020.04.05更新完目前版本的所有命令。

用编码器打印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>

上述通用命令中有不少我不太懂得的名词,比如WebM,IVF等。后面看是否可以通过测试现象猜测,或者后续看代码的过程中明确其含义。

全局编码选项

            --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视频格式。可选<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学习)