IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 视频编解码发展历程(从AVC到HEVC再到VVC)(一) -> 正文阅读

[C++知识库]视频编解码发展历程(从AVC到HEVC再到VVC)(一)

视频编解码发展历程(从AVC到HEVC再到VVC)(一)

概述

在过去的17年里,自2003年确定现在仍占主导地位的 H.264/运动图像专家组 (MPEG-4) 高级视频编码 (AVC) 标准的第一个版本以来,已经又开发了两个主要的新一代视频编码标准,即称为高效视频编码标准(HEVC) 和多功能视频编码 (VVC)标准。与AVC一样保持了10年的开发周期,HEVC于2013年完成,并且与AVC相比,HEVC完成了约50%的比特率降低。 VVC 项目的周期缩短了三年,该项目于2020年7月完成,再次实现比其前身 (HEVC) 降低约50%的比特率。本文总结了AVC及之后视频编码标准化的这些发展。当然本文特别侧重于提供VVC第一个版本的概述,以及与HEVC的比较。正如在之前的开发周期中一样,除了混合视频压缩方面的进一步提升之外,VVC标准还诠释了其命名中所突出的视频应用领域的广泛多功能性。VVC标准包含了对更加广泛的应用程序的支持,除了对典型的标准和高清摄像机捕获的内容编码支持外,还包括了对计算机生成/屏幕内容、高动态范围内容、多层和多视图编码的功能,以及沉浸式媒体(如 360° 视频)的支持。

2013年,高效视频编码(HEVC)标准的第一个版本最终确定,与之前的H.264/MPEG-4高级视频编码 (AVC) 标准相比,比特率降低了约50%。 这两个标准都是由 ITU-T 视频编码专家组 (VCEG) 和 ISO/IEC 运动图像专家组 (MPEG) 共同制定的。与十年前制定的 H.262/MPEG-2 视频标准相比,AVC 本身提供了大约50%的比特率降低,该标准也是同一组织的联合项目。 现在,截至2020年7月,VCEG和MPEG还完成了通用视频编码 (VVC) 标准的制定,该标准旨在将比特率再降低50%并提供一系列附加功能。VVC标准伴随着一个关联的元数据规范,称为通用补充增强信息 (VSEI) 标准。

目前,随着宽带互联网服务覆盖范围和速度的大幅提升,视频在全球数据流量中的份额已经达到80%左右,并且该数据还在继续增长。此外,4k(3840×2160)分辨率的家用电视机比例也在稳步增长,这些更高分辨率的电视机需要更高质量的视频内容才能充分发挥其潜力。 尽管几乎每台4k电视都配备了HEVC解码器来播放高质量的4k视频,但提供该内容所需的数据速率仍然相当高,从而扩展了宽带容量的极限。这说明需要比当前HEVC标准可以提供的更有效的压缩——现在VVC进一步解决了这一需求。
除了其高压缩性能外,VVC 还旨在促进对各种视频内容和应用程序的高效编码,包括以下内容:

  1. 超标清和超高清视频,包括更高分辨率(高达8k或更大)、高动态范围(HDR)和宽色域;
  2. 计算机生成或屏幕内容,尤其是在计算机桌面屏幕共享和在线游戏应用程序中;
  3. 用于沉浸式和增强现实的360°视频

此外,VVC 的第一个版本包括用于分辨率自适应、基于区域的访问、分层编码可扩展性、各种色度采样格式的编码以及灵活的比特流处理(例如从不同编码的视频比特流中提取和合并区域)的灵活机制。

视频编码标准介绍

现代视频编码标准已被开发用于对比特率、图像质量、延迟、随机可访问性、复杂性等具有多种要求的数字视频的有效传输和存储。因此对以下应用程序的支持尤为重要。

  1. 实时对话服务,例如视频电话、视频会议、屏幕共享和云游戏,其中低延迟/延迟和合理的复杂性是关键要求(最近因 COVID-19 大流行,该应用成为最前沿的应用程序) ;
  2. 直播,例如通过卫星、有线和地面传输频道的电视,重点是图像质量、恒定或适度变化的频道比特率、适度的延迟以及用于频道调谐和频道切换的频繁随机接入点 ;
  3. 视频点播,例如通过互联网协议(IP)的视频流,其中图像质量、比特率和对传输通道的适应最重要;
  4. 数码相机的捕捉、流式传输和存储,例如用于智能手机、无人机、动作、安全摄像头和专业摄像系统。

在这里插入图片描述

端到端视频压缩技术在源头涉及将视频压缩为比特流的编码器,在接收器涉及解码器以解压缩比特流以供消费。编码器和解码器的组合通常称为编解码器。然而,该术语有些误导,因为编码器和解码器通常作为完全独立的产品实现,并且在大多数应用中,编码器的数量与解码器的数量非常不同。如图1所示,视频编码标准只规定了编码数据的格式和解码器的操作。这包括比特流的结构和语法,以及从中重建解码视频所需的过程,但不包括编码器执行的操作。

使解码器标准化可确保与所有兼容解码器设备的互操作性,同时允许在效率、计算复杂性、功耗、延迟和其他考虑因素的特定应用限制下设计和操作编码器。例如,在实时通信场景中,任何特定的编码器都不可能有时间或计算资源来测试所有可能的编码模式,因此可能会牺牲一些编码效率来降低延迟和/或复杂性。此类算法优化的类型和程度被故意置于标准范围之外。

自 1988 年 H.261 以来的所有视频编码标准都基于所谓的混合视频编码原理,如图2所示。混合是指减少视频信号中冗余的两种方法的组合,即预测和变换编码以及预测残差的量化。 尽管预测和变换通过去除相关性减少了视频信号中的冗余,但量化通过降低其精度来减少变换系数表示的数据,理想情况下是通过仅去除难以察觉的细节;在这种情况下,它有助于减少数据的不相关性。这种混合视频编码设计原则也用于两个最新的标准HEVC和VVC。要更详细地回顾以前的标准,从 H.120 到 AVC,还包括 H.261、MPEG-1 视频、H.262/MPEG-2 视频、H.263 和 MPEG-4 视频,读者可参考论文Video compression—From concepts to the H.264/AVC standard。

参考上图,现代混合视频编码器的特征在下面介绍。

块划分用于将图像划分为更小的块,用于预测和变换过程的操作。第一个混合视频编码标准使用固定块大小,通常16×16的块大小被用于亮度预测区域,8×8用于变换。从H.263开始,尤其是从AVC开始,块划分成为设计重点的主要部分。在随后的几代中,通过添加更多不同的块大小和形状来适应局部区域统计数据,块划分已经变得更加灵活。在预测阶段,这允许编码器在预测的高精度(使用小块)与要发送的侧边或预测信息(使用大块)的低数据速率之间进行权衡。对于残差的编码,小块可以对细节进行编码,而大块可以非常有效地对平滑区域进行编码。随着将图片分割成块的可能性增加,与固定大小或有限分割集相比,需要测试可能的块划分组合并决定选择哪种块划分种类的选择也变多,从而导致编码器的复杂性随之增加。不过,幸运的是快速划分算法和计算能力的进步使最近的标准能够提供高度的灵活性。AVC、HEVC和VVC都采用具有多个深度级别和块作为叶节点的基于树的划分结构,并且VVC还提供了使用非矩形划分块的能力。

运动补偿或图片间预测用于消除已编码视频序列(CVS)的(因此称为inter)图片之间存在的冗余。一个关键概念是基于块的运动补偿,其中图片被划分为块,对于每个块,来自先前解码图片的对应区域,即参考图片,被用作当前块的预测。假设块的内容在具有平移运动的图片之间移动,当前块与参考图片中的相应区域之间的位移通常由二维平移运动向量(MV)来指代。寻找当前块最佳的帧间预测块通常在编码器处通过运动估计的块匹配搜索来完成。然后编码器将预测得到的MV数据用信号发送给解码器。H.261仅使用整数值MV,此平移运动补偿的概念后来通过使用带插值的分数样本MV精度(MPEG-1和MPEG-2视频的半采样精度和MPEG-4 Visual的四分之一采样精度)进行了推广,对来自一张时间前一张和一张后一张图片(MPEG-1和MPEG-2视频中的双向预测)或来自具有任意相对时间位置的多个参考图片(在AVC之后的标准中)的两个预测进行平均。此外,使用来自不同时间位置的多个参考图片可以实现图片组(GOP)内部的分层预测结构,这进一步提高了编码效率。然而,当使用后续图片时,由于需要不同的图片排序以进行编码和显示,从而引入了结构延迟。最新的标准VVC通过近似仿射运动并在解码器端使用另一个运动估计过程进行运动细化,甚至超越了平移运动模型。

帧内预测通过从已编码/解码的空间相邻参考样本中导出块的预测来利用图片内存在的空间冗余(因此称为intra)。 空间样本域中的这种预测是通过AVC引入的,而以前的标准使用的是简化的变换域预测。在AVC中,采用了三种不同类型的预测模式,DC、平面(planar)和角度模式,所有这些模式都使用在要预测的块左侧和/或上方的已解码块的相邻样本。第一种,即所谓的DC模式,对相邻参考像素进行平均,并使用该值作为对整个块(即每个像素)的预测。第二种,即平面plannar模式,通过参考像素的位置相关线性组合将要预测的像素建模为平面。作为第三个选项,角度模式沿特定方向/角度对参考像素进行插值。例如,垂直角度模式只是沿每一列复制上述参考像素。HEVC扩展了这些模式,例如,通过将角度数量从8增加到33,而最新的VVC标准不仅进一步扩展了模式的数量,而且还结合了新方法,例如基于矩阵的帧内预测(MIP),这是使用机器学习设计的。与帧间预测中的运动信息类似,编码器将估计的预测信息,即帧内预测模式,发送给解码器。

变换通过使用合适的变换方式将信号从空间域变换到变换域(通常是频域)来去除信号的相关性。混合视频编码标准对预测残差(无论是来自帧间预测还是帧内预测)进行变换,即预测与原始输入视频信号之间的差值,如图2所示。 在变换域中,基本信息通常集中在少量系数中。在解码器处,需要应用逆变换来重建残差样本。变换方式的一个例子是Karhunen-Loève 变换 (KLT),它被认为是一种最佳去相关变换方法,但取决于输入信号的相关特性,而解码器通常不知道这些特性。另一个例子是离散余弦变换 (DCT),它自H.261以来一直被用于混合视频压缩,也用于著名的 JPEG图像压缩标准(与H.261大约在同一时间设计)。对于高度相关的自回归源,DCT与KLT具有相同的效果,并且DCT更容易计算。在从H.263第3版和 AVC 开始的后续标准中,使用基于整数的降低复杂度变换,通常非正式地称为DCT,尽管真正的DCT使用涉及无理数的三角基函数并支持额外的因式分解。为了考虑源信号中的不同统计数据,在HEVC和VVC中的多个变换之间进行选择可能是有益的。此外,如在VVC中那样对变换系数应用附加变换可以进一步去除相关性。

量化旨在降低输入值或一组输入值的精度,以减少表示这些值所需的数据量。在混合视频编码中,量化通常应用于单独的变换残差样本,即变换系数,从而产生整数系数级别。从图2中可以看出,该过程应用于编码器。在解码器处,相应的过程称为逆量化或简称为缩放,它在不恢复精度的情况下恢复原始值范围。精度损失使量化成为引入失真的混合视频编码框图的主要元素。量化和缩放可以看作是一个舍入操作,步长控制精度。在最近的视频编码标准中,步长源自控制保真度和比特率的所谓量化参数 (QP)。较大的步长(较大的QP)会降低比特率,但也会降低质量,例如,这会导致视频图片出现块伪影和模糊细节。

通常,每个样本都是独立量化的,这称为标量量化。与此相反,矢量量化联合处理一组样本,例如,通过将块映射到来自码本的矢量。至少从解码器的角度来看,在HEVC之前的所有最新视频编码标准都仅采用标量量化。HEVC包括一种称为符号数据隐藏的技巧,可以将其视为矢量量化的一种形式,而VVC引入了相关量化 (DQ),这可以解释为一种滑动块矢量量化,因为样本的量化取决于先前样本的状态。使用先前标准优化编码的高级技术也可以被视为矢量量化,而从解码器的角度来看似乎是标量量化。

熵编码通过考虑源符号的统计特性,即相对频率,将码字分配给一组离散值的源符号。 所有最近的视频编码标准都使用可变长度编码 (VLC) 表,这些表将较短的码字分配给出现频率较高的符号,以便接近熵。早期标准中设计码字表的方法是基于霍夫曼编码(稍作调整)。VLC通常用于编码和解码绝大多数数据,包括控制数据、运动数据和系数级别。AVC通过使用上下文自适应VLC (CAVLC) 进一步改进了系数级编码的VLC方案。上下文由先前符号的值或值的组合确定,可用于切换到为该上下文设计的VLC表。此外,AVC是第一个引入上下文自适应二进制算术编码 (CABAC)作为第二种更有效的熵编码方法的视频编码标准。CABAC仍然使用VLC表来映射符号,例如系数级别到二进制字符串(码字)。然而,二进制串不是直接写入比特流,而是二进制串中的每个比特使用具有上下文自适应概率模型的二进制算术编码进一步编码。由于其高效率,CABAC已成为后续HEVC和VVC标准中唯一的熵编码方法。

环路滤波是应用于重构图像的滤波过程(或这些过程的组合),如图2所示,其中重构图像是重构残差信号(包括量化误差)和预测。环路滤波后的重构图片可以存储起来,作为后续图片的帧间预测的参考。环路滤波这个名称的来历是对混合视频编码预测环路内的其他图片的这种影响。过滤的主要目的是减少视觉伪影并减少重建错误。H.263第2版是第一个使用去块环路滤波器的标准,它成为AVC第1版的核心功能。该滤波器旨在适应量化保真度,因此它可以衰减由基于块的预测残差的量化引入的块伪影,同时保留图片内容中的锐利边缘。

HEVC添加了第二个环路滤波阶段,称为样本自适应偏移滤波(SAO),这是在去块后应用的非线性滤波器,以衰减振铃效应和带状伪影。在新兴的VVC标准中,引入了自适应环路滤波器(ALF)作为第三个滤波器,其中,滤波器系数通常是通过使用维纳滤波器优化方法最小化重构误差来确定的。此外,在VVC中,另一个称为带色度缩放的亮度映射(LMCS)的过程也可以先于其他过程应用在环内处理阶段。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-13 11:17:51  更:2021-10-13 11:19:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 19:35:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计