正文字数:7318 阅读时长:11 分钟
AV1视频编解码器是一种由开放媒体联盟AOM开发的royalty-free的压缩技术。libaom库是AV1的参考软件,应用各种编码器优化技术来实现更好的编码效率。本次分享,我们邀请到了来自Google 的李博晗,一起来讨论 GOP优化、时域滤波器、libaom库的其他改进以及正在进行的一些工作。
文 / 李博晗
整理 / LiveVideoStack
大家好!我是来自Google网络媒体团队的李博晗。今天,我将讨论有关AV1的编码器优化技术。
1
概 述
AV1视频编解码器是一种由开放媒体联盟AOM开发的royalty-free的压缩技术。它于2018年发布,与其前身(VP9)相比,AV1提高了约30%的压缩效率。libaom库是AV1的参考软件,它也是由大量AOM的成员开发的,且它是开源的。libaom库使用了各种编码器优化技术以便达到更好的编码效率。今天,我们将讨论其中的部分技术。
首先我们将讨论GOP优化;接着,我们会讨论时域滤波器;其后,我们还将提到libaom库的其他改进和一些正在进行的工作。
2
GDP优化
首先是GOP优化,GOP代表图片组(group of picture)。我们要编码的视频序列有很多帧,编码器会将这些帧分组为GOP。然后,编码器将顺序对每个GOP进行编码。基本上GOP是用于决定诸如分层编码结构和码率分配等的基本单元。举一个例子,这是一个包含九帧的GOP。GOP内具有层次结构,基础层一般包括第一帧和最后一帧。可以从这两个帧来预测下一层的帧。而再下一层的帧可以由这个三个帧来预测,以此类推。现在,我们想要确定每个GOP的长度。它的长度非常重要,因为从直觉上来说,我们希望每个GOP中的帧都包含具有相似特征,或者这些帧在GOP内部存在更高的相关性。想要知道GOP的长度,就要确定最后一帧在哪里。通常,最后一帧位于基础层,这意味着它将被用于预测此GOP中存在的所有其他帧。因此,为了提供更好的预测,我们想为最后一帧分配更高的质量。但是,如果我们错误地分配了GOP,例如,这里的最后一帧,如果它位于非常糟糕的位置,与其他帧之间相关性较低(比如GOP停止在场景更改的中间),那么即使我们此帧的重建质量非常高,也不会帮助到其他帧的预测。
2.1 Utilizing first-pass stats
从直觉出发,我们希望可以确定GOP的长度,使得最后一帧可以更好的预测其他帧。我们可以使用一些自适应方法来确定每个GOP应该多长以及最后一帧应该在哪里。在这里我们使用第一次编码(first-pass)数据。liibom支持两次(two-pass)编码,它先将所有帧编码处理一次,然后收集数据,再重新对所有帧进行编码。第一部分很快,而第二部分才是真正的编码——它使用所有从第一部分收集到的各种帧级别的统计信息。
在这里有三个第一次编码数据的示例,分别是帧内编码错误,一阶编码错误和二阶编码错误。帧内编码错误意味着在从其他帧预测的情况下对该帧进行帧内预测而得到的平均误差。一阶编码错误和我们前面提到的帧内编码错误意义相似,只是我们不仅可以进行帧内编码,还可以进行帧间预测,不过必须通过前一帧。这样,该帧的最大平均预测误差,就是一阶编码错误,二阶编码错误也非常相似。我们仍然可以使用帧内编码或进行帧间预测,但是只能使用相隔两帧的那一帧,这样就得到了二阶编码错误。
拥有这些很多帧级别的特征和数据,我们要使用它们来确定GOP的长度。我们想从这些统计信息中,获悉或者至少估计一下帧之间的相关性,以及其他一些我们关注的特征,并依此来分析第一遍的统计数据。
2.2 The hidden Markov model