乐趣区

关于算法:被压缩的视觉视频编解码技术

文 | 何鸣 网易云信音视频算法工程师

导读:视觉是人类取得信息的次要形式,每天有大量的视频信息被生产并传输。未经压缩的视频内容占用的存储空间和传输带宽非常微小,以常见的 30fps 高清视频为例,采纳 avi 格局存储的 YUV420 视频流一分钟就有 2GB 大小,传输带宽须要 40MB/s。所以咱们日常从手机和电脑等电子设备上取得的视频信息都是被压缩后再传输和存储的,压缩这些视频信息的技术便称为视频编解码技术。

1. 色彩空间

咱们人眼的视觉信息是由视杆细胞和视锥细胞取得的。视杆细胞次要感触光线的明暗变动,获取视觉的亮度信息,而视锥细胞能够感触到色彩。依据仿生的原理,计算机采集视频信号也采纳亮度信息和速度信息别离采集的形式。因为人眼的视杆细胞数量比视锥细胞的数量多很多,所以人眼对于亮度信息更加敏感,所以在采集视频信息时,常采纳 YUV420 的格局采集。具体操作如图 1 中所示,四个亮度像素 Y 共用一组红色和蓝色的色度像素。

图 1 YUV420 色彩空间

采集来的像素在计算机外部都采纳 2 进制的模式存储,为了示意人眼视觉的色彩空间,在计算机外部个别采纳 256 色存储,即亮度信息和色度信息的取值范畴都是 0 到 255。通过不同的数值组合能够示意出不同的色彩,例如,YUV 都是 255 时是粉色,YUV 都是 0 时是深绿色。这样为了示意一个像素须要 1.5 字节的数据,而一幅图像中有成千上万个像素。一幅 720p 分辨率的视频蕴含 92 万个像素,一幅 1080p 分辨率的视频蕴含 207 万个像素,而一秒钟的视频蕴含 30 帧图像。对于数据量微小的 YUV 视频数据,须要压缩后能力存储与传输。

2. 压缩原理

压缩视频信息与压缩文件信息不同,在视频中存在着大量的冗余信息。如图 2 所示,相邻帧之间的相似性会有工夫上的冗余,同一帧的相邻块之间存在着空间上的冗余,因为人眼感知对于低频信息更敏感,所以存在着感知上的冗余。

图 2 视频中的冗余信息

视频压缩的基本原理就是去除这些冗余信息,将视频压缩 300 到 500 倍,常见的压缩办法有 预测编码、变换编码和熵编码技术。如图 3 所示,将输出的视频信息依照各个编码模块进行解决,输入码流的过程称为视频编码过程,再通过对应的熵解码、变换解码和预测解码过程,将码流还原成 YUV420 视频流的过程称为视频解码过程。能够将视频编解码的过程看作是压缩和解压缩的过程,但在该过程中,因为压缩的算法有所差别,所以解码的算法必须对应着编码的算法,不同的编解码算法称为视频规范。

图 3 视频编码技术

当初罕用的视频规范,例如 H.26x 系列规范,其中最罕用的是 H.264 规范,因为开源编码器 x264 的遍及,也将这代规范称为 x264 规范。H.26x 系列规范的研发与停顿始终是行业的标杆,最新的 H.266/VVC 规范退出许多新技术,而这些技术能够简略概括为以下几个方面:

图 4 H.265 的块划分示意图

块划分技术:除深度学习技术外,传统的视频编解码技术都是按块去解决视频,而且趋势是最大块越来越大,最小块越来越小,块的类型越来越多。对于绝对静止的区域,采纳大块能够进步压缩效率,应用一两个标记位或者很少的残差数据就能够示意一个大块,能够极大的压缩视频画面。对于静止比拟多的区域,采纳小块能够进步画质品质,将静止的细节更残缺的示意进去。为了更精密的划分静止和静止的区域,块划分技术采纳各种形态的矩形块代替原有的方形块划分。在工程落地方面,越来越简单的块划分技术节约大量的计算资源,所以很多疾速算法都是针对块划分模式进行预测,将机器学习算法和深度学习算法利用到块划分预测过程中,能够在品质损失微不足道的状况下,疾速得出块划分模式。

图 5 帧内预测示意图

帧内预测:帧内预测属于预测编码的领域,在视频序列中,有一些帧和块的预测信息无奈从参考帧中取得,这样的帧被称为 I 帧或帧内预测块。在 I 帧中所有的块都是帧内预测块,而帧内预测块能够存在于 I 帧或 P 帧和 B 帧中。具体怎么实现帧内预测呢,对于一个帧内预测块,首先在该块四周弥补出一圈像素(对于边缘局部,能够采纳扩边的形式),依据这圈像素值,采纳角度预测或者立体预测的形式弥补出以后块,再通过与原图比拟,抉择损失最小的预测模式。因为帧内预测弥补时采纳的像素值都来自于以后帧,不须要参考帧信息,所以帧内预测罕用于序列首帧或者视频信息变动比拟大的区域。

图 6 帧间预测示意图

帧间预测:与帧内预测绝对应的是帧间预测技术,他们同属于预测编码技术。帧间预测的参考图像信息来自于参考帧,所以在视频首帧或者参考帧缺失的状况下不能应用帧间预测技术。帧间预测的要害过程便是静止搜寻与静止弥补过程。静止搜寻过程负责搜寻出参考帧上最靠近以后块的图像块,并生成静止矢量,静止弥补则依据参考帧信息生成以后帧信息。依据最新的帧间预测技术,静止信息能够蕴含平移、缩放和旋转。因为静止矢量指向的地位未必是整数像素的地位,所以在静止弥补过程中还波及到亚像素弥补技术。通过帧间预测能够极大进步视频的压缩率,例如在参考帧中有着类似度很高的块,则能够对以后块采纳 skip 的模式编码,仅需一个标记位即可编码原有块内所有的 YUV 信息。

图 7 16x16DCT 变换核

变换量化:变换与量化技术是配套应用的,在刚刚的剖析中,因为人眼对于高频信息的不敏感,须要对高频信息进行压缩,在频域更容易对其进行操作,所以须要对图像进行变换。罕用的变换形式有哈达玛、整数 DCT 和整数 DST,因为有预测编码技术的存在,所以变换通常在残差信息上操作,依据不同的压缩率要求,能够对变换后的系数进行量化,仅保留人眼更敏感的低频信息。在解码过程中,须要配套的反量化和反变换技术,将压缩后的残差系数还原进去。

图 8 CABAC 编码器框架

熵编码:对于标记位和残差系数,还须要一套编码技术进一步压缩这些信息,对于一些要害信息,能够采纳指数哥伦布,游程编码等形式压缩,对于大量的残差系数和图像帧内的编码信息,当初罕用基于上下文模型的熵编码技术进行压缩。熵编码的基本原理是对小概率符号应用更多比特编码,而大概率符号则采纳较少的比特编码,通过上下文模型,大部分的大概率符号都能够被压缩。区别于预测编码和变换量化过程,熵编码过程是无损的。

图 9 环路滤波器 SAO 的 4 种边界弥补模式

环路滤波:对于参考帧来说,因为后续的视频都是根据后面视频帧的信息弥补进去,所以参考帧中呈现的损失和谬误,会连续到整个序列,随着静止弥补的过程,或扩散到整个视频帧当中。为了升高视频的损失,在每一帧编码完之后,都会对其进行后处理,解决这些视频帧的滤波器被称为环路滤波器,使其更加靠近于原始视频序列。现阶段,许多基于深度学习的后处理技术被利用到环路滤波器当中,在编解码过程中起到很好的成果。

图 10 WPP 并行技术示意图

除了以上技术,在工程化落地过程中,码控技术、并行技术、指令集技术 同样影响编码器成果。视频编解码技术蕴含着一系列算法的技术集成,将这些技术组合应用,造成各类视频编解码规范。除 H.26x 视频规范之外,还存在着凋谢视频规范联盟的 AV1 规范,国产的 AVS 规范等。

3. 视频编码技术的挑战与倒退

依据当初的技术需要,将来的视频编码技术须要面对更高分辨率、更高帧率、更广色域及 HDR 视频的挑战。同时,面对更多模式的视频内容,例如全景视频、点云、深度学习特色图等,视频编码技术须要与时俱进,一直倒退。现有技术方兴未艾,将来技术依然可期。

直播预报

视频编解码技术始终是视频内容利用中的外围业务,基于各个平台和各个渠道的视频内容采集与散发都波及到视频编解码技术的染指。在 RTC 业务场景下,如何构建高效疾速的视频编解码引擎,如何对现有的编解码技术进行优化改良,如何在私有协定根底上实现公有协定,如何重写编解码框架等问题都值得关注。

今晚 19:30,网易云信音视频算法工程师何鸣将为大家具体介绍网易云信 RTC 业务场景下的编解码技术优化与实际,以及将来的倒退方向。

更多技术干货关注【网易智企技术 +】公众号

退出移动版