体验Av1的三大软件编码

AV1很强!!本文是入门向,且是写给自己看的文章,非常流水账,也懒得给相关的内容放链接,本文的内容大多来自互联网,你也可以花上几个小时来自己了解这些东西(

相对于H.265以及HEVC来说,AV1的编码不会拥有漫无休止的授权费(AOMedia是这么说的,但也有一个公司(版权流氓?)几年前跳出来说成立了专利池之类的,还说AOMedia说的是谎言,具体你去他们官网看看就知道了(官网还有5G什么什么的,懒得看),此外,中国的编码AVS系列好像也是不会拥有漫无休止的授权费的)

好,进入正题。由于硬件不支持(包括显卡和核芯显卡),显卡hevc渲染体积大于h265(这个可以上veryslow甚至placebo?),种种原因,最后接触研究了一下AV1这个东西。


【资料图】

(顺便说说,软件解码好像大多用的dAV1d,也许是因为是目前最好的)

AV1有三大软件编码(好像还有个谷歌的?据说慢,懒得查)

libaom-AV1

aom应该就是aomedia的意思,这是AOMedia 概念验证的产物,后面也有优化,画质最好

-cpu-used n (越高越快,越低越慢但是会处理得更好。n=[0,8],其中7,8在加上-usage realtime时可用,脱离ffmpeg再加realtime可以解锁9和10)

-row-mt n (0单线程,1多线程)

-tiles axb (如2x2,1x4,4x1,这个我用2x2,但不清楚具体情况。可以用来加快解码速度,应该和编码没关系吧……假如2x2,那就是4tiles,原文说Enabling row-mtis only faster when the CPU has more threads than the number of encoded tiles.就是说假如16核心的cpu设置了16个tiles,多线程和速度就和单线程一样?那太可怕了

-crf n (n=[0,63],0的时候会产生更大的文件,63文件就小了,但是更糊,如果计算时间长一点说不定就可以好一些,这是个时间和空间的取舍。什么信息熵信息论边际效应的,不懂)

----上方的参数够我用了,还有一些其他的参数,比如控制比特率等等……自己去看----

没有介绍到的东西-strict experimental-b:v,minimum and maximum bitrate,-movflags +faststart,two-pass encoding,Average Bitrate,maximum keyframe interval,10-bit support,lossless encoding

压制一个对质量要求不太高的素材:

ffmpeg -i output.mp4 -c:v libaom-AV1 -cpu-used 6 -crf 63 -row-mt 1 -tiles 2x2 aom.mp4

压制后大小:4.54M,速度:0.25x,总计1分40秒

libsvtAV1

svt不清楚是什么意思,编码器与Intel 、 Netflix有关,性能优化好(一般cpu全核心跑满,上面那个aom用那个参数大概全核心70%)

-preset n (n=[0,13],越大越快,据说0的速度很极端的慢,所以最好用1或者干脆用libaom)

-crf n (同libaom的参数)

---------------------

没有介绍到的东西:tuning for visual quality,fast-decode,keyframe interval,film grain synthesis

同样是那个素材

ffmpeg -i output.mp4 -c:v libsvtAV1 -preset 10 -crf 63 output_AV1_fast.mp4

压制后大小:2.85M,速度2.46x,总计11秒

ffmpeg -i output.mp4 -c:v libsvtAV1 -preset 6 -crf 63 output_AV1_slow.mp4

压制后大小:3.42M,速度0.5x,时间48秒(顺带一提,preset5 是1分52秒)

librAV1e(rust AV1 encoder)

简单从零开始的社区驱动型开发的编码器(好像和Mozilla有关系?我不清楚,自己去查)

这个编码器在快速编码的时候效果不怎么好,大概就是慢速的时候对暗部细节掌握的更好。但是很多feature,应该还有很多bug……

-speed n (n=[-1,10],10最快,-1自动,默认是0)

-tiles n(n=[-1,你的cpu线程数],其中-1自动,自动默认是0。这个tiles和上面那个aom不同,设置成16就能全核运行,设置成0就只有单线程……)

-qp n(n=[-1,255],类似于上面两个的crf,但却好像有点额定质量的意思,不懂,建议用-b:v)

--low-latency(低延迟,可以牺牲画质加速)

这个太复杂了。-----------

反正效果没有上面两个好就是了。

ffmpeg -i output.mp4 -c:v librAV1e -b:v 1000000 -tiles 16 -rAV1e-params speed=10:low_latency=true:no-scene-detection=1  output_rAV1e_fast.mp4

这是我能做到的最快的配置了,然而速度很慢(

由于debian上的0.5几的版本用的是sse指令集,为了用上avx2指令集的0.6版本还可以这样子(在不重新安装ffmpeg的情况下):

ffmpeg -i ./output.mp4 -pix_fmt yuv420p -r 60 -f yuv4mpegpipe - | ./rAV1e - -o - --speed=10 -b 1000 --low-latency --no-scene-detection --tiles 16 --threads 16 | ffmpeg -i - -c:v copy 1.mp4

这个 | 和 - 的搭配…… - 代表(输出到/输入自)(管道/标准输入输出),反正我作为一个linux用户表示学到了(

总结

rAV1e就算用最快的参数也快不到哪里去,而且质量一般,也许在慢的时候可以比aom快(但是在画面静止的时候aom和svt可以更快地省略式编码,而rAV1e却会照单全收,具体可以看那几百条issue和doc,反正我是头晕了(哪怕开着翻译……)而且有bug,比如遇到亮度快速变化的时候,同时设置的speed不是10的时候……这属于是“未完成”的AV1编码器。

svt-AV1是最快的,当你设置13的preset+63的crf,就可以得到 BV1J14y1U7ss 的画质啦(

aomAV1的画质应该是最好的,但是慢起来是真的慢。

所以呢?我的结论是:不在意时间:动态细节怪请比较rAV1e 最新版和加了参数的svt,静态的可以比较加了参数的svt和aom。在意时间:svt默秒全。以上就是AV1软编码的全部内容,不在意体积大小和弱设备软解高清能力的用h265、hevc、h264显然更好。

这就是几天时间随便查找的知识,文章有误建议评论,要是不懂可别问我(例如ffmpeg压制相关的,我知道的不比你知道的多)。什么?你问ffmpeg怎么安装?看到这篇文章的你是幸运的,我的回答是,假如你想获得救赎的话,去用linux吧(

关键词: