【AV1编码器研究⼀】命令⾏参数简析
【AV1 编码器研究⼀】命令⾏参数简析
持续更新中。
2020.04.05更新完⽬前版本的所有命令。
⽤编码器打印help信息
运⾏如下命令可以将内置的⼀些帮助信息输出到中。下⽂主要以中的内容进⾏分析。⽬前还是基于其他编码标准的经验分析AV1的⼀些命令参数,可能会有⼀些理解错误,对于不确定的地⽅后续进⾏实验测试,如果有哪位⼤拿发现有错漏也请不吝指出。
< --help &
命令⾏参数归类
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>, --pass=<arg>指定编码的次数,允许1或2次。
--pass=<arg>指定执⾏第1次或第2次编码。
不负年少作文
--fpf=<arg>指定第1次编码输出的统计信息。
--limit=<arg>指定在编码N帧后停⽌,也就是指定编码的帧数。
--skip=<arg>指定跳过序列的前N帧,也就是从第N+1帧开始编码。
--good 使⽤质量下限约束。(注:意思是保障质量不低于某个程度?)
--rt 使⽤实时编码的质量下限约束。(注:相⽐上⼀个命令加多了编码速度的约束?)
-q, --quiet 不输出编码进度信息。
-v, --verbo 显⽰编码器参数。
--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>。
--timeba=<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)
-
-minction-pct=<arg> GOP最⼩码率(⽬标码率的百分⽐)
--maxction-pct=<arg> GOP最⼤码率(⽬标码率的百分⽐)
关键帧设置选项
--enable-fwd-kf=<arg>启⽤前向参考关键帧
--kf-min-dist=<arg>最⼩关键帧间隔
--kf-max-dist=<arg>最⼤关键帧间隔
--disable-kf 禁⽤关键帧设置
AV1 特定选项
这⼀⼩节列的是AV1特有的选项,但其中⼀些也和其他编码器(⽐如HEVC的X265)相似。主要是和编码器相关的⼀些特性,如选择某些块划分结构、环路滤波功能的使能等。有⼀些我⽬前还不太确定功能的选项均标以(??)提⽰,有待后续更新。
--cpu-ud=<arg>运⾏速度设置(0..5 good模式, 6..8 realtime模式)
--cpu-ud=<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-t=<arg 使⽤简化的变化类型集合
--u-intra-dct-only=<arg>仅帧内预测模式使⽤DCT
--u-inter-dct-only=<arg>仅帧间预测模式使⽤DCT
--u-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: 启⽤)
--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: 启⽤)
--noi-nsitivity=<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, e bu3213
--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, smpte20 85, 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 u: 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>包含胶⽚颗粒参数的⽂件的路径
--denoi-noi-level=<arg 噪声量(from 0 = don't denoi, to 50)
--denoi-block-size=<arg>降噪块尺⼨(default = 32)
--max-reference-frames=<ar 每帧允许的最⼤参考帧数(3 to 7 (default))
--reduced-reference-t=<a 使⽤简化的单⼀和复合参考集(0: off (default), 1: on)
--enable-ref-frame-mvs=<ar 启⽤时域mv预测(default is 1)
峰回路转不见君--target-q-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.
--t-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形式保存(码流?)