不久前,Google Duo宣布将全面转向AV1。相比于VP9,AV1能够带来更好的编码效率,为用户提供更好的视频体验。本文来自Google软件工程师 姜健在LiveVideoStack线上分享的内容。
文 / 姜健
整理 / LiveVideoStack
视频回放:
https://www.livevideostack.cn/video/av1-real-time-mode/
1
关于AV1
AV1编解码技术对视频质量有非常大的提高,尤其是在低码率和网络状态非常差的情况下,AV1编解码技术相对于VP9和H264编解码都有一个质的飞跃。
从图中明显可以看出,在码率为30kbps情况下,左图是AV1编解码技术处理效果,右图是Duo目前所使用的编解码技术的处理效果,对比质量差别很大。
在印度、巴西等一些发展中国家大多数人的网络接入情况较差,这些网络较差的地区正是谷歌最受欢迎的市场,所以Google Duo也在尽力提高低码率的视频质量,因此AV1技术对Duo来说有非常大的帮助。
关于AV1编码器的设定,图中最下端区域是可执行的命令行,一般使用该命令行测试手机或电脑上的速度,需要强调的设定有以下几点:
Profile必须设置为0;
Real-time的模式;
在实时视频编解码时必须是1Pass
lag-in-frame必须设定0,目标码率必须恒定,若目标码率上下波动的起伏很大对网络的要求很高;
最后比较重要的是速度设定必须大于等于6,目前我们有实时模式下6、7、8三个速度档,很多编码器的决策设定都需要根据CPU参数。
AV1的实时模式与VOD的区别有以下四点:
三个速度档:6、7、8。
速度档6严格来讲与VP9的区别非常大,VP9的实时速度档使用的是Non-RD进行决策,因为RD ( rate-distortion)决策会很慢,但是在AV1中特意增加了速度档6,使用了RD(rate-distortion)优化来进行决策,因此速度档6的质量是最好的(速度越小质量越好)。
速度档7、8使用Non-RD进行决策,Non-RD即使用其他算法进行快速决策。但是速度越快质量越差。
AV1对于720P以及更高清视频使用了最大128×128的区块,低分辨率视频使用64×64分区。如果视频分辨率太小使用128×128分区后,区块很少,会降低质量,但是对于高清视频来讲,使用128×128可以提高编码速度。分区使用Variance进行决策,在VP9中的基于方差分区 (Variance based partition)使用的是机器学习中的CNN训练模型,通过计算Variance与提前设定的阈值进行比较。
AV1中加入了SVC支持,并且在libaom的代码中放入了SVC示例,该SVC支持比VP9更加灵活。
AV1目前的SIMD优化还没有完全结束,实时编码速度在未来还有比较大的提升空间,暂时还未对一些函数进行优化,目前正在手机端进行NEON的优化。
2
测试成果
实时模式的优化主要是速度与质量的平衡。
手机端速度测试
首先进行了低码率50Kvps QVGA的测试,320×240及以下分辨率的速度6档可达到40-50帧每秒的传输速度,速度7档可达到150-190帧每秒,速度8可达到200-250帧每秒,均为单线程测试。
640×360或640×480的视频在500KbpsVGA进行测试,结果显示速度6档位的传输速度非常慢,速度7档可达到25-40帧每秒,速度8挡可达到40-60帧每秒的速度,同样均为单线程测试。
由于手机端诸多性能因素使用多线程测试数据不稳定,因此未进行大量多线程测试。
台式机的速度测试
台式机CPU参数如图中最下端所见,单线程测试,500Kbps VGA测试,速度档7可达到80-130帧每秒的传输速度,速度档8可达到120-265帧每秒的传输速度。
台式机上测试800Kbps HD的720P以上,单线程速度7挡的测试结果为35-45帧每秒,速度8的测试结果为40-70帧每秒,该速度较VP9差,因为AV1编码器的复杂程度较高,虽然速度较慢,但是视频质量高很多。
3
AV1编码器优势
如图为VP9与AV1区块划分的区别,VP9最大支持64×64区块,而AV1最大支持128×128区块。AV1中的区块存在边长比为1:4的长方形分块,这种情况很少见,在实时编码器不考虑搜索该区块,比VP9灵活很多。
AV1编码器的算法复杂度虽然高但是搜索空间大,视频质量提升很多。
在视频编码之前,首先对原视频进行分析,即原视频的SAD(绝对误差和)和variance(方差),使用这两个数据跳过一些模式的选择,例如在计算运动向量(motion vector)时需要搜索很多模式,使用SAD和varance两个数据与阈值比较,可以跳过运动向量的一些模式选择,另外在帧内编码时,帧内模式的一些搜索也可以通过这两个数据简化。
手机端对SAD(绝对误差和)和variance(方差)的计算进行了优化,因此运算速度很快。
VP9只支持固定256像素宽度的块,当出现分辨率较小的帧例如640×480等,最多只能使用两个区块做并行。但是AV1在这方面很灵活,720P分辨率以上的最大区块单元是128个像素宽度,720P以下为64像素宽度,因此可以根据情况灵活增加区块,以进行多线程操作。同时,AV1与VP9都支持多行并行处理。另外AV1的解码器可以只解码特定区域,例如某一个区块为64像素宽度,可以要求解码器解码其中某一部分,这样当用户对视频的某一部分感兴趣时就可以只解码该部分。
图中最下边的文献是对AV1编码工具的综述,文中指出720P分辨率使用4个线程且进行4块区分,有3倍的速度提升。
当实时视频的前后两帧的变化很大时,码率会突然升高,帧的尺寸会突然变化很大,对网络是很大的压力,导致视频质量突然变差,因此AV1编码器会每隔一个最大区块计算时域SAD与前一帧作比较,若该时域SAD非常高,编码器即认为发生很大变化,就使用更高的QP,缩小该帧的尺寸,以降低网络压力。
AV1编码器会通过计算时域的方差简化模式选择。
SVC的AV1设定(比VP9直观很多):其中有三个变量:参考帧(设定不同分辨率的参考帧位置)、当前帧刷新哪一个缓存、模式设定,AV1的设定直接将所有的控制权交给用户,用户需要哪种模式即可设置哪种模式。
4
AV1编码器的未来
目前AV1正在开发WebRTC支持,很快会推出。
由于AV1编码器的复杂度远远高于VP9,因此在产品中较大的缺点是编码之后的尺寸是VP9的几倍,进行很多优化之后,例如去掉一些用不到的工具等,使编码后尺寸下降30%。
点击【 阅读原文 】或扫描图中二维码,了解更多讲师及话题信息
本文分享自微信公众号 - LiveVideoStack(livevideostack)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。