视频已经在人们的日常工作和生活中无处不在,不仅用于娱乐休闲购物等等,并且正逐步替代文字成为人们获得知识和资讯的最重要方式。视频编码/压缩技术是支持视频应用的最核心、最基础的技术之一。目前广泛应用的视频编码和压缩技术主要是一些视频编码标准。H.266/VVC [1][2](后面简写为 VVC,即:多功能视频编码)是最新一代视频编码标准,2020年7月定稿,ITU 第一版于当年11月正式发布,ISO/IEC 第一版于2021年2月正式发布。伴随 VVC 的 VSEI 标准 [3][4] 的第一版的定稿和发布时间与 VVC 相同。
VVC 是英文 Versatile Video Coding 的缩写,意思是 VVC 可以支持非常广泛的应用。相对于之前的视频编码标准,比如 H.265/HEVC (后面简写为 HEVC )和 H.264/AVC (后面简写为 AVC ), VVC 对8K超高清、屏幕、高动态和360度全景视频等新的视频类型以及自适应带宽和分辨率的流媒体和实时通信等应用有了更好的支持。 VSEI 是 Versatile Supplemental Enhancement Information 的缩写,主要规定用于 VVC 视频码流的视频可用性信息( Video Useability Information, VUI )和一些承载辅助增强信息( SEI )的消息的格式。在 HEVC 和 AVC 标准中,这些 VUI 和 SEI 格式是放在编码标准主文本中的,在制定 VVC 是被分开放在两个不同的标准文本中。
那么,VVC 是如何制定出来的呢?从技术上看,VVC 相对于之前的视频编码标准,尤其是HEVC 和AVC ,都有哪些新技术和技术增强呢?今后还会有 VVC 的新版本吗?本文后面几节将逐一介绍这些内容。
2.VVC制定过程VVC, HEVC 和 AVC 都是由国际标准化组织及国际电工委员会ISO/IEC旗下的动态图像专家组 MPEG( Moving Picture Experts Group )和国际电联电信标准化部门ITU-T旗下的视频编码专家组 VCEG( Video Coding Experts Group )联合制定的。在制定 VVC 时 MPEG 和 VCEG 的联合工作组的名称在前期叫做联合视频探索组( Joint Video Exploration Team ),在 VVC 项目正式启动后叫做联合视频专家组( Joint Video Experts Team),二者缩写都是 JVET [5]。制定HEVC时有两个联合工作组,视频编码联合合作组( Joint Collaboration Team on Video Coding, JCTV-VC )[6] 和3D视频编码扩展联合合作组( Joint Collaboration Team on 3D Video Coding Extension Development, JCTV-3V )[7]。制定 AVC 的联合工作组的名称最简单,叫做联合视频组( Joint Video Team, JVT )[8]。
图1. VVC标准诞生过程
图1 描述了 H.266/VVC 的关键时间节点。从2015年1月份到2015年10月,属于 KTA ( Key Technology Area )阶段,大家可以比较发散去做一些技术的探索 [9] 。2015年10月,随着一个超过HEVC 10 %编码性能的技术提案的递交 [10] ,JVET( Joint Video Exploration Team ),即联合探索委员会正式成立,同时,该提案所对应的软件平台定义为 JEM ( Joint Exploration Model )。有了 JEM 之后,新的技术都会基于 JEM 进行验证,每次标准会议之后发布一个新的 JEM 版本。截止到2017年7月份,历经7次 JVET 标准会议, JEM 完成了7个版本的迭代,这个版本性能已经比 HEVC 的压缩性能提高30%。这向工业界提供了一个强力有的信号:下一代标准还是非常有希望达成既定目标的(主观质量相同的条件下,码率降低达50%)。于是,标准化工作进入第二阶段:举证和技术提案征求及响应阶段举证,这中间历经3次标准会议。2018年4月份, CfP ( Call for Proposals )响应的测试结果公开,23份 CfP 响应中的最高性能版本已经比 HEVC 节约 40% 的码率,这意味着下一代视频压缩技术已经比较成熟,从而正式启动 VVC 标准的制定工作。从2018年4月起,历经十次标准会议,数千份技术提案的审议,全球数百位专家会上会下日日夜夜的共同努力,最终 VVC 标准的第一版( VVC v1 )于2020年7月正式完成。图2列出了参与 VVC 标准化工作的一些公司;可喜的是,中国公司的参与度非常高,中国公司在国际视频标准化的舞台上扮演着越来越重要的角色。
图2. VVC标准主要参与公司
VVC编码工具相对于上一代视频编码标准 HEVC,根据最近的JVET官方主观测试结果,VVC 的平均编码性能提高已经可以达到49% [11]。VVC 的压缩性能依靠的是一系列已有编码工具、新编码工具和对已有编码工具的技术改进。VVC 的新编码工具和对已有编码工具的技术改进主要包括以下几类:1) 块划分,2) 帧内预测,3) 帧间预测,4) 变换和量化,5) 熵编码,6)环路滤波,7)特殊模式,8)屏幕内容编码,和9)360度视频编码。下面分别简单介绍VVC中这几类编码工具的具体技术。参考文献 [12] 中包含对这些内容的更为详细的介绍。
块划分VVC中增加了四叉树分块之外的新分块方法,称之为Multiple-Type Tree (MTT),也就是说,VVC采用了四叉树加多类型树(QT MTT)的分块法。在QT MTT分块中,一个方块可以均匀分成左右或上下两个矩形块,也称为BT划分(Binary-Tree split);或者也可以从左到右或从上到下按1:2:1的比例分成三个矩形块,也称为TT划分(Ternary-Tree split),例如图3所示。同时,BT或者TT划分得到的子块还允许继续使用BT或者TT划分,但是不能再使用QT划分。
图3. 四叉树加多类型树(QT MTT)块划分举例
VVC 中还允许对色度分量采用不同的分块树结构(Chroma Separate Tree, CST)。CST有两种实现方式:1) 作用在帧内编码条带级别,这种编码方式也称为双树(Dual-Tree)编码,对于每个支持的最大编码树单元(Coding Tree Unit, CTU),亮度和色度采用不同的分块树结构;2) 对于使用单编码树(Single-Tree,CTU级别的亮度和色度采用相同分块树)的条带,当亮度块大小满足某种条件时,亮度和色度也会采用不同的分块树划分,这种编码方式也称为局部双树(Local Dual-Tree)编码,主要用于防止分块结果中有很多小色度块。另外,HEVC支持的最大CTU是64×64,而在VVC中的最大CTU增加到128×128,最小CTU仅支持32×32。
帧内预测在帧内预测方面,VVC 支持67种帧内预测模式(这个数字在HEVC中是35)并对非方形块的角度预测方向做了调整,预测像素插值采用两类四抽头插值滤波器(HEVC中的是低精度的线性差值)。基于位置的预测组合(Position Dependent intra Prediction Combination, PDPC)技术将滤波前后的预测信号合并在一起以进一步提高帧内预测精度。多参考行帧内预测技术不仅可以利用最近相邻的重建像素值,还可以采用更远的重建像素值进行帧内预测。基于矩阵的帧内预测技术中利用了矩阵向量的乘法来进行帧内预测。跨分量线性模型帧内预测技术利用亮度图像分量的像素值来预测同一图像中色度分量的像素值。在子分块模式中,一个亮度编码单元的不同子块采用相同的编码模式信息。
领取音视频开发学习资料:https://docs.qq.com/doc/DQm1VTHBlQmdmTlN2
帧间预测在帧间预测方面,VVC 继承了HEVC的基于整个编码单元的运动矢量差值(Motion Vector Difference, MMVD)编码及运动信息继承模式,即:AMVP (Adaptive Motion Vector Prediction) 和Skip/Merge模式,并分别做了扩展。对AMVP模式,VVC引入了块级的自适应运动矢量精度,以及对称编码模式(Symmetric Motion Vector Differences Signalling)用于双向预测但只需要编码其中一个参考图像的MVD。对于Skip/Merge模式,VVC引入基于历史信息的运动矢量预测(HMVP, History-based Motion Vector Prediction)和配对平均运动矢量预测(pair-wise average merge candidate)。除了上述基于整个编码单元的运动矢量编码/继承之外,VVC还引入了基于子块的时域运动推导模式(Subblock-based Temporal Motion Vector Prediction, SbTMVP),即当前编码单元分为大小相同的子块(8×8亮度子块),每个子块的运动矢量单独进行推导。VVC还引进一个仿射运动模型来更精确地表示像缩放和旋转这样的高阶运动从而提高运动信息的编码效率。运动矢量的精度从HEVC中的1/4亮度像素提高到了1/16亮度像素。此外,VVC还引入多个新的帧间预测编码工具,如:将AMVP和merge模式结合起来的合并模式(Merge mode with MVD, MMVD),通过对 merge 模式增加额外的运动矢量差值得到了进一步提高;几何分块模式的分块结果可以更加切合视频内容中的实体对象边界的运动轨迹;帧间预测和帧内预测合并在一起的预测模式可以同时减少时域冗余和空域冗余以取得更高的压缩性能。VVC的另一个重要改进是引入解码端运动细化和双向光流这两个工具,在不增加码率开销的情况下进一步提升运动补偿效率。
变换和量化在变换方面,VVC引入了非正方形变换、多变换(主变换)选择、低频不可分变换和子块变换。VCC另外,VVC 中的最大变换维度提高到了64×64(HEVC中是32×32)。非正方形变换用于对非正方形的分块进行变换操作。这种变换在水平方向和垂直方向使用不同长度的变换内核。有了多变换选择,编码器可以从一组预定义的整数正弦、余弦、跳过变换并在码流中标明所用变换。低频不可分变换对帧内预测残差的主变换结果中的低频分量进行再进行二次变换,以更好地利用编码块内容的方向性进一步提高压缩性能。子块变换用于当对一个帧间预测残差块的一部分进行编码而其它部分的值全部设为零的时候。
VVC在量化方面引入了三个新编码工具:自适应色度量化参数偏差,依赖量化和量化残差联合编码。采用自适应色度量化参数偏差这个工具时,对于特定的量化组,色度量化参数不直接编码,而是通过亮度量化参数和预定义并传输的查找表推导得出。在依赖量化中,一个变换系数的重建值范围依赖于扫描顺序在它前面的几个变换系数的重建值,从而减少输入向量和最接近的重建向量之间的平均失真。量化残差联合编码指的是对两个色度分量的残差一起编码,而不是分别编码,这样当两个色度分量的残差相似时编码效率会更高。
熵编码与HEVC相同,VVC采用的熵编码也是上下文自适应的二进制算术编码(Context-Adaptive Binary Arithmetic Coding, CABAC),但是在CABAC引擎和变换系数编码两方面做了改进。在CABAC引擎方面的改进是多重假设概率更新模型和上下文模型绑定的自适应率(即概率更新速度依赖于上下文模型),其中采用了和每个上下文模型耦合的两个概率估计P0和P1,而P0和P1相互独立地根据各自的自适应率进行更新。用于二进制算术编码器中进行区间细分的概率估计P设为P0和P1的均值。在变换系数编码两方面,除了4×4的系数组之外,VVC还允许1×16、16×1、2×8、8×2、2×4和 4×2这六种系数组。此外,还增加了一个标志位用于依赖量化的状态过渡,以及一个改进的概率模型选择机制用于和变换系数绝对值相关的语法元素的编码。
环路滤波除了支持HEVC中也有的去块效应滤波器(Deblocking Filter, DBF)和样本自适应偏差(Sample Adaptive Offset, SAO)外,VVC还支持带色度缩放的亮度映射(Luma Mapping with Chroma Scaling, LMCS)和自适应环路滤波器(adaptive loop filter, ALF)。在DBF方便增加了更长的滤波器和一个专门为高动态视频设计的亮度自适应滤波模式。SAO与HEVC相同。编码器可以利用LMCS在编码前分段线性地改变输入视频信号幅度分布的动态范围从而提高编码效率,在解码端逆向复原。VVC中的ALF包括两种模式:1)亮度和色度样本基于块的ALF; 2)色度样本夸分量自适应滤波器(Cross-Component Adaptive Loop Filter, CC-ALF)。在ALF中,亮度和色度分别采用7×7和5×5的菱形滤波器;对于每个4×4块,根据其方向性和梯度活动性分成25类和4个转置状态的一种,从所传递的多组滤波器中选择一个采用。CC-ALF采用一个菱形线性高通滤波器利用ALF滤波后的亮度样本来进一步细化色度样本。
屏幕内容编码VVC保留了HEVC中的基于块的差分脉冲编码调制,但仅限于帧内预测的编码单元。变换跳过残差编码在HEVC基础上作了以下改进:1) 第一个非零值的位置不再编码,扫描方向改为相反方向;2) 利用上下文模型提高了正负号指示的编码效率;3) 绝对值的编码改进。也保留了帧内块拷贝(Intra Block Copy, IBC)和调色板模式这两个在HEVC中就有的工具并做了改进。在HEVC中,IBC被定义为一种帧间预测模式,其参考帧是当前帧本身并且运动向量必须指向当前帧已解码且未进行环路滤波的区域。在VVC中,IBC与帧间预测解耦,并对参考缓冲的管理相对于HEVC进行了简化,参考样本存储在一个局部的小缓冲器中。调色板的编码方式在VVC中取决于亮度色度是否使用单个编码树。如果使用单个编码树,三个色度分量的调色板联合在一起编码;否则亮度和色度调色板分开编码。对于采用调色板的编码单元,个别像素还可以不使用用调色板中的内容,而是直接编码其量化值。最后,VVC中的自适应颜色变换这个屏幕内容编码工具与HEVC中相同,未作改进。
360度视频编码360度视频是在2014、2015年左右逐渐开始流行起来的,而HEVC的第一版是在2013年年初定稿的,所以VVC顺利成章地成为第一个包含360度视频编码工具的国际视频编码标准。由于传统视频编码技术基本上都使用于360度视频编码,VVC中包含的360度视频“压缩”工具只有两个,更多的对360度视频的支持是在系统和传输接口的设计中(见本文下节)。VVC中的一个360度视频“压缩”工具叫做运动矢量环绕,就是当运动矢量指向图像右(左)边界之外的位置时,运动补偿中实际用的参考像素是图像左(右)边界内的像素(或通过插值滤波得到的子像素)。这是因为360度视频中常用的一种叫做等矩形映射(Equirectangular Projection, ERP)图像的左右边界实际上是物理世界的球形表面的连续位置,类似于世界地图的左右边界实际上是地球上的连接南北极的同一条经线。所以这样的运动矢量环绕可以提高采用ERP的360度视频的编码效率。另外一个360度视频“压缩”工具叫做环路滤波虚拟边界;如果采用,则环路滤波的适用效果不会夸过图像中某些水平或垂直线(这些线就是这里说的所谓的虚拟边界)。这个工具适用于360度视频中常用的另一种映射,叫做立方体贴图映射(Cube Map Projection, CMP)。参考文献 [13] 中包含详细的360度视频以及ERP和CMP的介绍。
4.VVC系统和传输接口视频编码标准的系统和传输接口通常也叫做高层语法(High-Level Syntax, HLS),是编解码器中压缩工具和视频应用和传输系统之间的联系纽带。HLS涉及视频编码标准中的众多课题,包括码流的基本结构、编码数据的基本结构、序列层和图像层的参数编码、随机访问、视频流自适应、解码图像管理(这里包括参考图像管理)、档次(profile)和级别(level)的定义和编码、码流缓冲模型、高层图像分割(比如条带划分和瓦片划分)、时域伸缩性、可扩展性、后向兼容性、容错、增强信息编码,等等。
VVC继承了AVC和VVC的HLS设计中很多方面,包括基于网络抽象层(Network Abstraction Layer, NAL)单元的语法结构、分等级的语法和数据单元结构、VUI和SEI机制、以及基于虚拟参考解码器(Hypothetical Reference Decoder, HRD)的视频缓冲模型。
与AVC和HEVC相比,VVC的HLS中的新的或有显著改进的设计主要包括以下这些方面:矩形条带(slice)和子图像(subpicture)、自适应图像分辨率更新、自适应参数集(Adaptation Parameter Set, APS)、图像头、逐渐解码刷新(Gradual Decoding Refresh, GDR)、参考图像列表(Reference Picture List, RPL)的直接编码、以及大大简化的多层可伸缩编码设计。下面逐一简单介绍。参考文献 [12] 和 [14] 中包含对这些内容的更为详细的介绍。
领取音视频开发学习资料:https://docs.qq.com/doc/DQm1VTHBlQmdmTlN2
条带和子图像相对于AVC和HEVC,VVC在条带支持方面有一个重大的变化,那就是基于分块单元(AVC中的宏块或HEVC中的CTU)的条带机制被基于瓦片(tile)或瓦片中的CTU行的条带机制取代。这个变化的原因是网络技术和视频编码及传输技术的发展让过去常用的视频错误隐藏技术基本上被扔到了历史的故纸堆里——人们看到的视频基本上不再包含采用错误隐藏技术得到的视频帧了。
VVC条带有两种模式:矩形条带和光栅扫描条带。顾名思义,矩形条带的形状总是一个矩形。每个矩形条带可以包含一个或多个完整的瓦片(例如图4所示),也可以包含一个瓦片中的一个或多个CTU行(例如图5右上角的那个矩形条带)。每个光栅扫描条带也包含一个或多个完整的瓦片,但是这些瓦片的顺序必须是光栅扫描顺序,所以其形状通常不是矩形的,例如图6所示。
图4. 包含18×12 CTUs的图像被划分为24个瓦片和9个矩形条带
图5. 一个图像被划分为4个瓦片和4个矩形条带(左边两个瓦片合为一个条带而右上角的瓦片被划分为2个矩形条带
图6. 包含18×12 CTUs的图像被划分为12个瓦片和3个光栅扫描条带
VVC是第一个引入子图像这个设计的视频编码标准。概念上子图像与HEVC中的运动受限的瓦片集(motion-constrained tile set, MCTS)相同,但是在设计上做了改进以提高编码压缩效率和应用系统友好性。每个子图像的形状也必须是矩形的,包含一个或多个矩形条带,例如图7所示。
图7. 一个图像被划分为18个瓦片、24个条带和24个子图像(这个例子中每个子图像正好包含一个矩形条带)
子图像可以独立编码从而可以被提取出来单独解码,所以可以用于感兴趣区域(region of interest, ROI)编码,也可以用于360度视频的传输优化,例如图8所示。360度视频与传统视频应用的最关键区别之一是用户在任何瞬间都只会看到整个360度球面的一小部分,这个传输方案就是利用这个关键点进行优化,目标是让用户看到的部分具有高画质,而看不到的部分的画质可以比较低。看不到的部分也不能完全不传,因为那样的话,如果用户突然转头就只能看到黑屏,那样就离侵入式体验想去太远了、
图8. 基于子图像的360度视频传输方案
VVC子图像设计相对于MCTS的改进主要有以下五点:1) 可抽取子图像中的运动矢量可以指向子图像边界之外,如果发生则运动补偿时采用像素填充技术,就像运动矢量指向图像边界之外时一样,从而提高编码效率。2) 对合并模式和解码端运动矢量细化中的运动矢量选择和推导作了针对子图像的改进。3) 抽取子图像时不需要改动条带头。4) 包含不同类型条带(比如支持随机访问的和不支持随机访问的)的子图像可以被简单合并为一个图像,合并时也不需要改动条带头。5) 定义了子图像序列的HRD和类别,从而编码器可以保证每个可抽取子码流的一致性。
自适应图像分辨率更新在AVC和HEVC中,改变图像分辨率有在编码视频序列(Coded Video Sequence, CVS)的起始帧、并开始使用一个新的序列参数集的时候才可能。而在VVC中图像分辨率可以在一个CVS中的任何帧改变,而且改变时还可以继续用帧间预测。这就需要允许在不同分辨率的两个图像之间进行帧间预测,因此需要能够进行参考图像重采样(Reference Picture Resampling, RPR)。这里的重采样既可能是上采样,也可能是下采样,取决于参考帧的分辨更大还是当前帧的分辨率更大。
自适应参数集(APS)VVC中增加了一种新的参数集——APS,用来传输符合一下三个条件的图像层或条底层信息:1) 可以被一个图像的多个条带和/或不同图像的多个条带共享的;2) 可能在图像之间频繁变化;3) 可能取值的个数比较大,如果放到图像参数集(Picture Parameter Set, PPS)中去的话会导致PPS在一个码流中需要更新从而无法进行PPS的带外传输。在VVC中APS被用来传输三种参数:ALF参数、LMCS参数和缩放列表(scaling list)参数。
图像头图像头并不是一个新概念,在MPEG-2等AVC之前的编码标准里面就有,但是在采用基于NAL单元的码流结构的AVC和HEVC中没有。VVC中重新引入图像头的主要目的是为了减少图像层信息在一个图像的不同条带中的重复,所以包含的信息基本上就是同一图像中各个条带必须或很可能共享的信息。
领取音视频开发学习资料:https://docs.qq.com/doc/DQm1VTHBlQmdmTlN2
逐渐解码刷新(GDR)GDR指的是可以从一个帧间编码的图像进行随机访问,虽然不能立即得到正确解码的图像,但是随着更多帧的解码,视频内容中正确解码的区域逐渐增大直至到某一帧所有的区域都能正确解码。由于采用帧内编码的块可以相对均匀地分布在多个连续的图像中,编码器就可能使码率很平滑,从而降低点到点延时。GDR也不是新概念,在AVC和HEVC中可以支持,并可以用恢复点(recovery point)SEI消息表明对GDR的支持和给出GDR恢复点的位置。在VVC中,GDR通过一个新的NAL单元类型来表明,GDR恢复点的位置信息放在图像头里,一个码流或CVS的首帧就可以是采用帧间编码的GDR帧,甚至整个合法码流里面可以没有任何一帧是瞬时解码刷新(Instantaneous Decoding Refresh, IDR)或干净随机访问(Clean Random Access, CRA)帧,也可以整个合法码流没有一个帧内编码帧。
参考图像列表(RPL)的直接编码参考图像管理负责解码图像存入到解码图像缓冲区(Decoded Picture Buffer, DPB)、从DPB中删除、以及将参考帧按合理顺序放到RPL中去这些操作,是视频编码标准中的核心功能之一。在HEVC中,参考帧管理通过一个叫做参考图像集(Reference Picture Set, RPS)的机制,包括RPL的建立过程。VVC对RPL信息直接编码,而不是间接地通过RPS。
多层可伸缩编码因为有了上面提到的RPR,VVC中支持多层可伸缩编码就变得简单了。因为相对于单层编码不需要任何其它“低层”编码工具了,只需要增加HLS的支持即可。这也正式VVC第一版中就会支持多层可伸缩编码的主要原因(AVC和HEVC都是在第一版之后才加入对多层可伸缩编码的支持的)。相对于AVC和HEVC后期版本中的多层可伸缩编码,VVC中的多层可伸缩编码设计从一开始就聚焦于对单层解码器设计的友好性。首先,对解码多层码流的能力的规定与单层码流一致,从而一个单层解码器只需要少量的改变就可以解码多层码流,比如级别中对最小DPB能力的规定与码流中有几层无关。另外,多层可伸缩编码的HLS的设计大大简化,代价是牺牲了一些灵活性,比如在每个随机访问点要求每层的图像都必须存在。
VVC中的多层可伸缩编码设计虽然相对简单,但是仍然不仅支持了传统的空间可伸缩性、质量可伸缩性、以及多视角可伸缩性,还支持了一些可伸缩性和子图像的组合。比如,图8所示的基于子图像的360度视频传输方案可以通过允许层间预测进一步改进,如图9所示。
图9. 基于子图像并允许层间预测的360度视频传输方案
5.总结正如标题所示,本文对H.266/VVC视频标准的制定过程、编码工具和系统/传输接口做了一个名副其实的“概述”,一点而过,挂一漏万。从2020年7月VVC第一版定稿后,JVET进行的工作包括维护第一版的文本和参考软件,以及VVC主观质量测试和码流一致性方面的工作。最近还开始了VVC第二版和VSEI第二版的工作。VVC第二版草案目前新增内容包括一个新级别和两个从HEVC引入的SEI消息,计划新增内容还包括对高比特深度(如12 bits)的支持,目前正在进行核心实验。VSEI第二版草案的目前新增内容包括六个SEI消息(其中三个是从HEVC引入的)。
作者:字节跳动视频云技术团队原文链接:https://juejin.cn/post/6940078108787769357
,