运行如下命令可以将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为单位)
--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特有的选项,但其中一些也和其他编码器(比如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形式保存(码流?)