AV1编码器使用指南
本文发布于 410 天前,其中的部分信息可能已经失效或过时。

上一篇文章介绍了AV1编码的技术细节并测试了两个主流编码器,这一篇文章将根据我使用AV1编码视频的经验给出一些建议。如果你没有看过上一篇文章的话,可以点击下面的链接查看。

2022.2.18更新:
由于 SVT-AV1 0.9.0 版本变化较大且修改了部分参数设定,重新编写了部分内容,请在阅读前确认您的编码器版本大于等于 0.9.0
2022.10.22更新:
修正了部分参数的说明,本文章目前适用于 SVT-AV1 版本大于等于 0.9.0, AOM-AV1 版本大于等于 3.0.0
请注意:AV1编码器正处于快速迭代的阶段,这篇文章的内容在发布时是最新但可能很快会过时,阅读时请注意检查内容是否仍有时效性。

在上一篇文章的测试中,可以发现SVT-AV1已经略微超过了AOM-AV1,并且SVT-AV1的参数设置也较AOM-AV1更简单,所以目前我推荐使用SVT-AV1进行编码

AOM 在 AV1AN 的加持下现在与 SVT-AV1 编码速度打平,不过某些版本的 SVT-AV1 在运行时会出现 CPU 利用率异常的问题,如果使用 SVT-AV1 时遇到问题,请换为 AOM-AV1。

  • SVT-AV1指南

官方开源地址:https://gitlab.com/AOMediaCodec/SVT-AV1

如果你不会自行编译软件,这里有适用于 Windows 的已编译好的版本:

https://jeremylee.sh/bins/svt-av1.7z

内存配置需求说明:根据官方指南和自行测试得来。

SVT-AV1的内存占用和使用的核心数相关,使用的CPU核心数越多,内存占用越大
对于8核心16线程CPU:
4K分辨率:lookahead 和 gopsize 设置为 180 时,需要至少8GB可用内存, 当设置为 300 时,需要至少12GB
1080P: lookahead 和 gopsize 设置为 180 时,需要至少3GB可用内存, 当设置为 300 时,需要至少6GB
720P: lookahead 和 gopsize 设置为 180 时,需要至少1.5GB可用内存, 当设置为 300 时,需要至少2.5GB

SVT-AV1 现在限制 lookahead 最大为 120 ,故内存需求更新为如下(内存需求视编码参数不同有所区别,此处仅给出参考值):
4K:最小为 6GB ,推荐为 8GB
1080P:最小为 2GB,推荐为 4GB
720P:最小为 1GB,推荐为 2.5GB
注意:使用内存低于推荐值编码器可能仍可以启动,但编码速度会受到影响。
  • 编码基础参数说明:

SVT-AV1只支持YUV或Y4M格式的输入,当使用YUV格式输入时,需要手动指定以下参数,使用Y4M输入时无需指定。

–width : 视频的宽度(单位为像素),可使用 -w 作为简写
–height : 视频的高度(单位为像素),可使用 -h 作为简写
–fps : 视频的帧率,常见的有 24000/1001 或 60000/1001 ,不正确的输入会导致编码异常
–color-format : 视频的颜色格式,可选值为 0,1,2,3 ,分别对应 YUV400 / YUV420 / YUV422 / YUV444
–input-depth : 视频的色深,可选值为 8或10
若您不知道以上参数应如何填写,请使用Y4M作为输入源,接下来的示例也都将默认为Y4M输入

另外可供指定的参数还有:

–lp: 使用的CPU线程数,默认全部使用,一般无需调整
–asm: 使用的CPU指令集,默认自动检测,一般不做调整
–frames: 在指定帧数后停止编码,可用 -n 作简写
–progress: 输出进度的格式,可选值为 0(关闭) 1(默认) 2(传统)
  • 质量-速度 取舍参数说明

这一部分介绍的是控制质量和速度取舍的参数,也就是 --preset 了,这个参数是所有参数中最重要的一个,也是对编码结果影响最大的一个,我将重点介绍如何设定它。

Preset 可以认为是测试人员为你测试并设定好的一系列参数配置的集合,可供你直接使用而无需手动一个个指定,也就是说你调整这个设定其实是间接的调整了几乎所有的其余设定,所以在设置时一定要谨慎。

Preset 可以在 0~12 的范围内指定,但我个人推荐的范围在 3~6 ,下面我来说明每个 Preset 适用的场景

–preset 0 :最慢的一个编码预设,但奇怪的是质量不是最好的,还有可能导致崩溃,官方说只是内部测试的时候用的,如果不是为了好玩建议不要使用。
–preset 1 :可以正常使用的最慢的编码,压缩率高但实在是太慢了,不是测试的话不要使用
–preset 2 :与上面一个在大部分情况下差别不大
–preset 3 :可作为日常需要追求压缩率时使用的编码,虽然有点慢但还算可以接受,压缩率较上面两个略低
–preset 4 :如果你不想一个个试的话可以无脑用这个速度较 P3 有较大提升但压缩率也有较明显的下降
–preset 5 :输出文件的体积更大,画质略低或相同,速度更快,如果CPU性能较弱或者觉得 P4 还是慢可以用 目前不推荐用 P5 ,如果觉得 P4 慢的话可以直接上 P6
–preset 6 :适用于需要快速完成编码时使用的预设,压缩率较 P4 有较大滑坡但速度快了很多(通常能较 P4 快一倍以上),但需要注意这个预设是占用内存最大的一个
–preset 7 :与 P6 在画质上差别不大但文件体积更大,编码快了一些
–preset 8 :如果你不是极端看重编码速度不要用这个预设,虽然很快很快但是编码质量甚至可能打不过HEVC,目前此预设压缩率比 HEVC slower预设高10%左右,速度较之更快
–preset 9-12:1.0.0 版本后新增的预设,仍在开发和优化中,编码速度更加快,压缩率与 HEVC 持平,推测可能是为实时直播编码开发的

不同的编码环境和视频类型需要不同的 Preset 设定,上面只是一个粗略的概要,具体还需要你自己尝试。

  • 码率控制参数说明

顾名思义,这一部分参数负责控制编码器如何为画面分配码率,不同的设定也将导致不同的编码结果。接下来我将逐一介绍主要的几个参数。

–rc
这是决定编码方式的参数,可选值为 0~2 ,分别对应:
–rc 0 :推荐使用的设定。按照指定的画面质量分配码率,对码率没有限制,只要求画面质量的浮点量化值达标,适用于日常大部分的编码场景,此模式类似于H265中的CRF模式
–rc 1 :VBR模式,不限制瞬时码率但要求平均码率在设定值的 90%-110%之间,适用于对大小有明确要求的情况。如果使用这个设定请务必启用 2Pass 编码,方式是加上 –passes 2 参数。
–rc 2 :CVBR模式,类似于上面这个但对于瞬时码率做出了限制,一般用不到,除非你的视频要用于网络播放。
其他可设定参数:
–tbr :在使用 –rc 1 模式时需要指定,单位为 Kbps
–qp:在使用 –rc 0 模式时需要指定的参数,可用 -q 作为简写,范围是 0~63 ,值越小画质越高,默认为50 。推荐4K视频从 28 开始尝试,1080P视频从 25 开始尝试。
–bias-pct:决定更偏向CBR还是VBR,100为完全的VBR,0为完全的CBR,设置 –rc 1 时默认100,–rc 2 时默认50
–overshoot-pct:VBR模式下最高允许平均码率超过设定值多少,默认10,无需百分号
–undershoot-pct:VBR模式下最高允许平均码率低于设定值多少,默认10,无需百分号
–aq-mode:自适应量化,用于改善某些情况下对画面质量的评估准确度,值为 0~2 ,0为关闭,1 为根据方差计算,2 为根据画面复杂度计算,推荐选择 2
  • 关键帧参数说明

这一块参数决定了编码器如何放置关键帧。关键帧是视频中一系列用于标记的帧的总称,通常放置了一个关键帧后编码器便会清除之前缓存在内存中的前向参考帧和相关数据,因此将关键帧的间隔设置的太小可能会使编码器无法使用帧间压缩导致压缩率下降,编码速度降低;而设置的太大则会导致编/解码时占用的内存过多影响性能。

–keyint
这个参数决定了编码器最多编码多少帧就要放置一个关键帧,注意这只是最大的关键帧间隔,实际编码时可以小于它但不能大于它,通常我们将它设置为视频帧率的 3倍 或更高,一般是 5倍,但不要设置为大于 10倍 的值 ,否则内存占用可能会爆炸。例如一个 60 Fps 的视频会设置在 180 ~ 600 之间,通常是 300 。但请注意如果你的编码模式是VBR(–rc 1)或者CVBR(–rc 2) 时,这个值最大只能是 255
–irefresh-type
这个参数决定了编码器是否可以越过关键帧向前参考,可选值为2或1,2为关闭 1为开启。如果因为某些原因你必须把 –keyint 设置成低于上面推荐的值,请将这个选项设定为1,否则请设为2
–lookahead
决定了编码器最大可以向前参考的帧数,如果你将 –irefresh-type 设置为了1,即开启的话,请将此值设置为 3~5倍视频帧率,否则请将其与 –keyint 的值保持一致
自 SVT-AV1 0.9.0 版本之后,–lookahead 的最大值不能超过 120
  • 基础编码示范

在了解了以上基础的编码参数和如何设定他们后,我们就可以进行基础的编码了,其实日常使用时这样基本就足够了,当然如果你需要进一步细调编码器参数可以参看下方的 高级参数设置 指南。

在这里我给出几个常用的编码命令供大家参考:

下方所有内容均默认视频帧率为 24 Fps,使用Y4M格式以 stdin 串流输入。
#追求极致压缩率

SvtAV1EncApp.exe -rc 0 -q 30 --preset 3 --aq-mode 2 --keyint 240 --irefresh-type 2 --lookahead 120 -b output.ivf -i stdin

#追求编码速度

SvtAV1EncApp.exe -rc 0 -q 30 --preset 6 --aq-mode 1 --keyint 120 --irefresh-type 1 --lookahead 72 -b output.ivf -i stdin

#日常使用

SvtAV1EncApp.exe -rc 0 -q 30 --preset 4 --aq-mode 2 --keyint 120 --irefresh-type 2 --lookahead 96 -b output.ivf -i stdin
  • HDR视频参数设置

如果你的视频使用的是 HDR 色彩方式的话,需要手动设定颜色格式才能正确地输出,下面我来说明一下相关的参数。

关于下方的参数,完整的列表和相关说明请参阅官方文档的 6.4.2 部分

https://aomediacodec.github.io/av1-spec/av1-spec.pdf

–enable-hdr: 启用HDR,请根据原视频调整,1为开启,0为关闭
–color-primaries:设定颜色格式,一般的 HDR 视频都是 BT2020 ,选择 9 即可。
–transfer-characteristics:设定颜色转换参数,一般的 HDR 视频是 TC_SMPTE_2084 ,选 16
–matrix-coefficients:选择画面亮度传输格式,一般的 HDR 视频是 BT_2020_NC,选 9
  • 高级参数设置指南
注意:如果你在阅读了下方的说明之后仍然不知道这个参数是干什么的,请不要随意调节,否则可能会导致编码失败,性能下降,输出异常,画面撕裂等不良后果!
性能相关参数
–tile-rows:在横向上将画面分割处理时划分的块数。可选值为 0~6 。值越高,划分的块数越多,一定程度上可能会提高性能,但是也同时会导致内存占用更大,压缩率变低的不良效果。
–tile-columns:与上面类似,但是是在纵向上划分的块数,可选值 0~4 。
请注意:以上两个参数只在使用默认 Preset 时CPU占用低于75%才考虑手动设定,且不建议设置超过 4(tiles)/ 2(columns)的值,过大的值只会降低压缩率而对提高性能无益
画面分析与运动预测相关
–scd:画面切换检测。这个功能仍在开发中,可能不完善。用于检测视频场景的变幻并辅助决定何时插入关键帧或清理缓存的参考信息,开启有助于实现更好的参考帧选择,但可能略微降低性能。默认值为 0(关闭),设置为 1 开启此功能。
–scm:画面内容检测。这个功能用于检测视频当前画面的内容并对量化器和编码器进行自动的调整,如果你编码的内容是游戏录屏或动画时可以开启这个功能,当然日常编码时开启我目前也没有观察到坏处。可选值为 0(关闭)/1(一直开启)/2(根据画面内容决定),如果需要使用推荐用 2
–enable-tpl-la:启用基于时间插值的前向参考帧选择,可选值为 0(关闭)/ 1(开启)。开启此选项有助于更快的筛选更准确的前向参考帧,从而改善画质,但根据 Issue 的反馈,在某些情况下会导致选择失误降低画质。不过一般都可以开启,目前为止我还没有发现因为开启这个选项而导致画质降低的事情。

–rdoq-level:rdoq是指在画面被交给量化器计算其复杂度前先在画面内插入一定量的细微噪声,从而避免分配到过低的量化值影响画质,这个选项通常在指定码率的编码(VBR和CVBR)中才会用到。当你发现输出视频的画面大部分都出现了画质较期望值偏低的情况时可以考虑开启,其他情况保持默认即可。可选值为 0(关闭)/ 1(开启)
注意:自 SVT 0.9.0 后,该参数已被彻底弃用。

–pred-me:这个参数决定了编码器会在多大的范围内以多少精度来进行运动估测,可选值为 0~5 。值越大,估测的范围越大,精度越高,越可能找到正确的选项,但也同时会带来更高的算力消耗,降低编码速度。一般无需设定,但如果你使用了较低的 Preset 值又想一定程度上保证压缩率的话可以考虑手动指定
–hme:启用阶梯式运动估测,这个估测会依照计算的复杂程度由易到难依次尝试不同的算法,在找到合适的选项后即会停止,否则会尝试下一个算法直到全部失败,相较于上面的那个传统运动估测,这个方式可以在画面较平稳的视频中取得不错的性能提升,但在镜头运动较激烈的视频中反而可能会反过来拖慢编码,因此需要根据不同的视频来决定是否开启。可选值为 0(关闭)/ 1(开启),若开启了HME,则需要指定下面三个参数:
–hme-l0:是否启用阶梯式估测的第一级。 0(关闭)/ 1(开启)
–hme-l1:是否开启阶梯式估测的第二级。 0(关闭)/ 1(开启)
–hme-l2:是否开启阶梯式估测的第三级。 0(关闭)/ 1(开启)

–mrp-level:这个参数决定了编码器会筛选出多少个候选参考帧进行进一步精确预测,更多的候选参考帧意味着更高的命中正确选择的机会,但是太高的值不会带来明显的提升并且会大幅降低编码速度,因此如果你想手动调整该值需要谨慎。

–search-w:设置运动估测搜索的宽度,需要注意,如果你指定了范围,那么即使已经找到了合适的解,编码器依旧会强制搜索完指定的一整片区域并忽略掉 early-skip 等功能。单位为像素,可选值为 0~256.。一般无需设定,如果需要调整请十分谨慎。该值设置的太低会影响压缩率,太高会严重减慢编码速度
–search-h:一般与上方的参数结合使用,这个参数用于限制运动搜索范围的高。
–umv:这个参数允许运动搜索在本CU块(编码中最基础的单位)外进行运动估测搜索,默认为 1(开启)。如果你设定了两个–tile 参数中的任意一个,请不要更改这个选项。其他情况下一般也不做修改,不过关闭这个功能可以降低内存占用但可能影响压缩率。
后处理降噪器和滤镜设置
–enable-smooth:启用降噪器,一般保持开启即可,当然在编码诸如动漫一类的素材时也可以考虑关闭它来避免画质损失。
–film-grain:实验性功能,在画面中插入一些类似于胶片颗粒一样的可见噪点来使画面更加真实并一定程度上提高观看体验,不过错误的设置也可能导致画面质量严重下降或者画面失真等问题。可选值:0~50 。0为完全关闭,50为最大滤镜效果。

–tf-level:允许编码器使用替代帧滤镜,此参数作用不详但在特定画面环境下开启有奇效。-1为编码器自动决定, 0为关闭,1为开启,2 和 3 则通过跳过一些不太可能的选项来提高渲染速度。开启后需要指定下面两个参数:
–altref-strength:滤镜的效果强度,默认为 5 ,可选值 0~6,一般画面设为 4 ,编码动漫时可以设为更低的值。
–altref-nframes:滤镜基于的参考帧数量,默认为7,可选值 1~10 ,一般画面保持不变即可,编码动漫时可以设为更低的值。

以上是一些常用的高级参数介绍,还剩一些没有介绍的一般也用不到或者我找不到相关的文档所以无法做解释,如果需要查看完整的高级参数列表,可以使用下面这个命令,然后在输出中找到 “AV1 Specifics” 其下方内容就是完整的高级参数列表了:

SvtAV1EncApp.exe --help
  • 使用了高级编码设定参数的编码命令示例:
再次警告,如果你不理解上面这些高级参数是用来干什么的,请不要随意调节!
#追求极致压缩率

SvtAV1EncApp.exe -rc 0 -q 30 --preset 3 --aq-mode 2 --keyint 240 --irefresh-type 2 --lookahead 120 --scm 2 --enable-tpl-la 1 --pred-me 5 --hme 1 --hme-l0 1 --hme-l1 1 --hme-l2 1 -b output.ivf -i stdin


#追求编码速度

SvtAV1EncApp.exe -rc 0 -q 30 --preset 6 --aq-mode 1 --keyint 72 --irefresh-type 1 --lookahead 72 --scm 1 --hme 0 --tile-columns 4 --tile-rows 2 -b output.ivf -i stdin


#日常使用

SvtAV1EncApp.exe -rc 0 -q 30 --preset 4 --aq-mode 2 --keyint 120 --irefresh-type 2 --lookahead 120 --scm 2 --enable-tpl-la 1 --hme 1 -b output.ivf -i stdin
  • AOM-AV1使用指南
从 3.0.0 版本开始,AOM-AV1 的所有非简写参数后都必须带上等于号(简写参数【如 -q 等】可以不带),本文撰写时并没有这个要求,使用时请根据自己的编码器版本做调整
例:
原先的写法:–cpu-used 4
3.0.0版本后的写法:–cpu-used=4

官方开源地址:https://aomedia.googlesource.com/aom/

如果你不会编译软件,这里有编译好的版本(适用于 Windows):

https://jeremylee.sh/bins/aom.7z

内存配置需求,根据官方说明和自行测试得来。

AOM-AV1的内存占用和使用的核心数基本不相关,其取决于 Tiles 设置和 CPU-used 参数。
4K分辨率:–cpu-used 设置为4,Tile 为 2/1 时,需要至少3GB可用内存, 当 Tile 设置为 4/2 时,需要至少5GB
1080P: –cpu-used 设置为4,Tile 为 2/1 时,需要至少1GB可用内存, 当 Tile 设置为 4/2 时,需要至少2GB
720P: –cpu-used 设置为4,Tile 为 2/1 时,需要至少768MB可用内存,当 Tile 设置为 4/2 时,需要至少1.5GB
注意:使用内存低于推荐值编码器可能仍可以启动,但编码速度会受到影响。
  • 编码基础参数说明
AOM-AV1支持YUV和Y4M格式的输入,若你使用YUV方式输入,则需要手动指定以下参数。
–width : 视频的宽度(单位为像素),可使用 -w 作为简写
–height : 视频的高度(单位为像素),可使用 -h 作为简写
–fps : 视频的帧率,常见的有 24000/1001 或 60000/1001 ,不正确的输入会导致编码异常
–i420 / –i422 / –i444 /–yv12:视频的颜色格式,默认为 –i420
–bit-depth : 视频的色深,可选值为 8或10
–webm / –ivf / –obu:选择输出文件的格式,默认为 –ivf
  • 质量-速度取舍参数说明

与SVT不同,AOM有多个参数参与控制质量-速度取舍

–cpu-used
此项与SVT-AV1的preset参数一样,用于控制编码速度。可选值为 0~12 ,推荐值为 3~6
不同的值的说明可以参考SVT-AV1的指南
–good / –rt
两个参数必须选择一个,通常使用 –good ,这将会告诉编码器优先考虑质量,其次才是速度,但如果你对于编码速度有严格要求,可以使用 –rt ,这将使编码器进入 实时编码(Real Time)模式,优先考虑速度。
Tiles相关设置
不同于SVT本身就是默认使用Tiles分割画面进行编码的设定,AOM并没有为Tile分割做出优化(SVT使用内存让不同Tile之间能够互相交换CU数据,弥补了使用Tiles导致的压缩率下降),这导致Tile设定会更多的降低压缩率,所以在AOM中使用Tiles时要更加谨慎
AOM中的Tiles参数有以下两个:
–tile-rows:在横向上分割画面的个数,实际分割的数量N和指定的值A之间的关系是 log2(N)=A ,即 N=A2 ,可选值为 0~6,不推荐使用超过4的值,一般使用 2 即可
–tile-columns:在纵向上分割画面的个数, 实际分割的数量N和指定的值A之间的关系是 log2(N)=A ,即 N=A2 ,可选值为 0~4 ,不推荐使用超过 2 的值,一般使用 1 即可
在AOM中使用Tiles的副作用是压缩率下滑,所以极度不推荐使用过大的Tile值。
  • 码率控制说明
–end-usage
可选值为 q / cq / vbr / cvbr ,四个值分别代表:
–end-usage q :类似与H.265里的CRF模式,要求每一帧的浮点量化为指定的值,不考虑帧率限制
–end-usage cq :每一帧的浮点量化不一定是指定值,但要求整个视频的平均量化在指定值的95%~105%,此项基本不会用到。
–end-usage vbr:与SVT的VBR模式相同,请注意使用该模式是请务必启用二次编码,方式为加上 –passes 2 参数
–end-usage cvbr:与SVT的CVBR模式相同,一般不会用到,除非用于网络播放,同样推荐使用二次编码。

其他可设定参数说明:

–target-bitrate:当使用 VBR / CVBR 模式时需要设定的值,单位是 Kbps
–cq-level:当使用 Q / CQ 模式时需要设定的值,范围是 0~53 ,默认值为 26 ,1080P视频建议从24 开始尝试, 4K建议从 26 开始尝试
–bias-pct:决定更偏向CBR还是VBR,100为完全的VBR,0为完全的CBR,当 — end-usage 为 VBR 时默认100,为CVBR 时默认50
–overshoot-pct:VBR模式下最高允许平均码率超过设定值多少,默认10,无需百分号
–undershoot-pct:VBR模式下最高允许平均码率低于设定值多少,默认10,无需百分号
–aq-mode:自适应量化,用于改善某些情况下对画面质量的评估准确度,值为 0~3 ,0为关闭,1 为根据方差计算(variance),2 为根据画面复杂度计算(complexity),3为循环刷新(cyclic refresh),注意 AOM-AV1的第一种方法(variance)是有Bug的,不推荐使用,推荐选择 2 现在已经修好了,用 1 或 2 皆可,请自行尝试。
  • 关键帧设置参数说明

AOM的关键帧参数和SVT不同的地方在于AOM可以手动指定最小关键帧间隔,这在一些镜头变化较少的视频中有用,可以有效减少不必要的关键帧放置,但是如果设置的太大可能导致编码器无法放置新的完全帧,严重影响压缩率和画质。

–kf-max-dist
最大的关键帧间隔,一般设置在 帧率的3倍到帧率的10倍之间,具体的值需要根据视频内容来决定,镜头变换频繁的视频不必将关键帧间隔设置的太远,因为这对压缩率并没有太大帮助还会增加内存占用和算力消耗,此项为必填项,不填的话编码器会自动设置为 999
–kf-min-dist
最小的关键帧间隔,需要根据视频内容进行调整,一般不建议使用小于帧率二分之一的值,除非画面变化十分激烈,也不建议使用大于帧率两倍的值,除非画面十分平静。该值设置的太大可能导致帧循环参考变多影响画质。如果你不确定该值应该设置为多少,可以不填
–enable-fwd-kf
允许越过关键帧向前参考,这与SVT中的 irefresh-type 作用一样,适用于最大关键帧设置在小于等于3倍帧率的值时,可以一定程度上增加压缩率,可选值为 0 / 1 ,0为关闭,1为开启。不过AOM的编码器似乎有一个 特性 Bug,使关闭此选项后会造成不明原因的画质下降,所以建议保持开启
–lag-in-frames
此项类似于 SVT-AV1 中的 lookahead 参数,官方版本中该值不能超过 48 , 民间大佬开发的 PSY 分支中此项最大可以到 120。需要注意的是此项的数值与内存占用有直接关系,一般建议使用 48 即可
  • 基础编码命令示例
此处假设的是使用 Y4M 格式以串流输入 1080P 24fps 的视频,实际使用时可能需要调整
#追求极致压缩率(警告:可能很慢)
aomenc.exe --ivf --cpu-used 3 --tile-rows 1 --tile-columns 0 --end-usage q --cq-level 26 --aq-mode 1 --kf-max-dist 240 --kf-min-dist 24 --enable-fwd-kf 1 --lag-in-frames 48 -o example.ivf stdin

#追求编码速度(将会损失压缩率)
aomenc.exe --ivf --cpu-used 6 --tile-rows 4 --tile-columns 2 --end-usage q --cq-level 26 --aq-mode 1 --kf-max-dist 120 --kf-min-dist 24 --enable-fwd-kf 1 --lag-in-frames 24 -o speed.ivf stdin

#日常使用(较为均衡)
aomenc.exe --ivf --cpu-used 4 --tile-rows 2 --tile-columns 1 --end-usage q --cq-level 26 --aq-mode 1 --kf-max-dist 120 --kf-min-dist 24 --enable-fwd-kf 1 --lag-in-frames 48 -o normal.ivf stdin
  • 高级参数使用说明
以下内容属于高级参数,如果你在阅读了说明后依旧不明白其作用,请不要随意调整,否则可能导致各种不良后果。
画面分析与运动预测
–enable-chroma-delta-aq:允许基于色度插值的自适应量化(adaptive quantization),一定程度上可以减缓过低或过高的亮度和深色对于量化计算的影响,可选值 0(关闭) / 1(开启),一般建议开启
–enable-tpl-mode:允许基于时间的参考帧,与SVT的 enable-tpl-la 作用一致,可选值为 0(关闭) / 1(开启),一般建议开启,不过如果发现开启后造成了负面作用可以关闭。
–enable-ab-partition:允许编码器计算两套预测,随后选出更好的那个,适用于画面复杂的视频,允许编码器在拿捏不准哪个方案更好时可以选择两套方案,均进行计算后得到结论,从而增加得到最优解的概率,但在普通的视频中这个功能的作用不大反而会带来严重的速度下降,所以一般可以关闭
–quant-b-adapt:允许在B帧(双向参考帧)上使用自适应量化,可选值为 0(关闭) / 1(开启),可以在B帧使用较多的视频中让编码器对量化值有更准确的了解,一般建议开启
–noise-sensitivity:决定了量化计算器对于画面上的噪声的敏感程度,值越高约敏感,如果你发现量化器似乎一直给画面分配低于预期的码率,可以适当调高该值以改善画质,将此值设置的太高或太低都将导致严重后果
–max-reference-frames:指定每一帧编码时可以选出的最多候选参考帧数量,可选值 1~7,默认为7,一般可以将其降低为 5 而不会对压缩率造成显著影响,降低该值可以一定程度上加快编码速度但降得太低会严重影响画质。
–coeff-cost-upd-freq:压缩率和计算量比值的更新频率,可选值为 0(关闭) / 1(每偶数个CU块)/ 2(每编码完一个Tile块),使用更高的更新频率可以让编码器了解当前的压缩率是否符合预期,但同时会造成更高的额外负载,一般使用 2 即可
–mode-cost-upd-freq:编码模式计算量的更新频率,可选值与上面相同,一般使用 2 即可
–mv-cost-upd-freq:运动预测计算量的更新频率,可选值与上面这个相同,一般使用 2 即可
–min-partition-size:允许划分最小的编码块,可选值 4(4*4) / 8(8*8) / 16(16*16)/ 32(32*32)/ 64(64*64),如果你希望增加编码速度,那么可以适当调高最小编码块来减少不必要的划分尝试,但不建议将其设定为16或以上的值,不然可能会显著降低画质
–max-partition-size:允许划分的最大编码块,可选值 128(128*128)/ 64(64*64)/ 32(32*32)/ 16(16*16),如果你发现编码器可能过于频繁的使用超大的编码块并影响了画质,可以适当调低最大编码块来一定程度上改善画质,但将其设置为比 64 更低的值将导致编码速度显著降低注意:max-partition 的值必须大于等于 min-partition 的值。
后处理与滤镜
–tune:针对某个画质分析软件进行调优,一般无需设置,可选值为 PSNR / SSIM / VMAF / VMAF_NEG
–tune-content:使用内置的编码调优功能,针对不同的内容进行调优,目前可选值有 default(不调整)/ screen (针对录屏内容调优) / film(针对电影画面调优),此为测试功能,并非对所有内容均有效,若要使用,请先自行测试并谨慎启用。
–sharpness:对画面进行锐化处理,可选值 0~7,0为关闭,值越高,处理强度越强。
–arnr-maxframes: 替代帧滤镜基于的参考帧数量,可选值 1~15 ,一般画面保持可以设置为8,编码动漫时可以设为更低的值。
–arnr-strength: 滤镜的效果强度,可选值 0~6,一般画面设为 4 ,编码动漫时可以设为更低的值。
–denoise-noise-leve:画面降噪处理的强度,可选值 0~50,0为不使用降噪器,一般不用手动设定,但如果你发现编码器似乎没法给出一个正确的降噪强度可以手动调整。
–denoise-block-size:降噪时使用的分块大小,可选值 4 / 8 / 16 / 32 / 64 ,越小的块,降噪的效果越自然,但计算量也会大得多,默认值为 32 ,如果追求画质可以降低为 16.

以上就是AOM-AV1编码器中可能需要手动调整的高级参数的说明,其他的高级参数要么几乎用不到或者我找不到相关的文档所以无法解释。如果你需要查看完整的高级参数列表,可以使用以下指令,在输出中找到 AV1 Specific Options ,下方就是完整的高级参数列表了。

aomenc.exe --help
  • 使用了高级参数的编码命令示例:
再次警告:如果你不知道以上高级参数是什么意思,请不要随意调整,以免造成不良后果!
此处假设的是使用 Y4M 格式以串流输入 1080P 24fps 的视频,实际使用时可能需要调整
#追求极致压缩率
aomenc.exe --ivf --cpu-used 3 --tile-rows 1 --tile-columns 0 --end-usage q --cq-level 26 --aq-mode 2 --kf-max-dist 240 --kf-min-dist 24 --enable-fwd-kf 1 --enable-chroma-delta-aq 1 --enable-tpl-mode 1 --lag-in-frames 48 --quant-b-adapt 1 --coeff-cost-upd-freq 2 --mode-cost-upd-freq 2 --mv-cost-upd-freq 2 --arnr-maxframes 8 --arnr-strength 4 --denoise-block-size 16 -o example.ivf stdin

#追求编码速度(将会降低压缩率)
aomenc.exe --ivf --cpu-used 6 --tile-rows 4 --tile-columns 2 --end-usage q --cq-level 26 --aq-mode 2 --kf-max-dist 72 --kf-min-dist 12 --enable-fwd-kf 1 --lag-in-frames 24 --enable-chroma-delta-aq 1 --enable-tpl-mode 1 --quant-b-adapt --enable-ab-partition 0 --denoise-block-size 64 --min-partition-size 8 -o speed.ivf stdin

#日常使用
aomenc.exe --ivf --cpu-used 4 --tile-rows 2 --tile-columns 1 --end-usage q --cq-level 26 --aq-mode 2 --kf-max-dist 120 --kf-min-dist 24 --enable-fwd-kf 1 --enable-chroma-delta-aq 1 --enable-tpl-mode 1 --lag-in-frames 48 --quant-b-adapt 1 --enable-ab-partition 0 --coeff-cost-upd-freq 2 --mode-cost-upd-freq 2 --mv-cost-upd-freq 2 --arnr-maxframes 8 --arnr-strength 4 -o normal.ivf stdin

以上就是我总结出的SVT-AV1和AOM-AV1的使用指南,限于我的水平,一些参数的理解可能不准确,如果你有任何疑问,可以在评论里留言,我将尽可能回答,感谢阅读。

若没有特殊说明,这篇文章 《AV1编码器使用指南》最先发表在NanNan's Blog。本文采用BY-CC-SA 4.0协议授权,禁止用于商业用途,如需转载,请注明本文链接 https://blog.nannan.cool/archives/105/

评论

  1. 醉梦
    Windows Chrome
    5月前
    2022-7-07 17:12:26

    请问 “aomenc.exe –ivf –cpu-used 4 –tile-rows 2 –tile-columns 1 –end-usage q –cq-level 26 –aq-mode 2 –kf-max-dist 120 –kf-min-dist 24 –enable-fwd-kf 1 -o normal.ivf stdin
    ”如何压制MKV呢?代码后面加 1.mkv吗?

    • 博主
      醉梦
      Windows Chrome
      5月前
      2022-7-07 19:46:09

      这里使用的是串流输入,即还需要一个软件(例如FFMpeg)解包 MKV 文件并将视频流输入给 Aomenc 。对于日常编码我还是推荐使用 Staxrip 这个软件,你只需要设置编码器参数,剩下的他会帮你解决。
      你可以在这里下载Staxrip : https://github.com/staxrip/staxrip/releases/

      • 醉梦
        NanNan
        Windows Chrome
        5月前
        2022-7-08 0:10:21

        Staxrip中好像就有AV1压制选项,但是需要怎么样才能像设置265一样设置你文中的参数呢?博主方便加QQ交流一下吗?

        • 博主
          醉梦
          Android Chrome
          5月前
          2022-7-08 10:48:02

          好的,已经发送申请了

  2. XX
    Windows Chrome
    1月前
    2022-10-20 10:26:21

    aom-av1似乎更新了参数,必须写等号,最后是用’-‘而不是stdin

    • 博主
      XX
      Windows Chrome
      1月前
      2022-10-22 0:16:51

      最近一直在用 AV1AN 做编码,看到你的回复试了一下才发现是这样的,我已经在文章里加上了一条提示了。

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇