AV1的实时模式


不久前,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%。

点击【阅读原文】或扫描图中二维码,了解更多讲师及话题信息

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值