近年来,视频编解码技术在理论和应用上取得了很大的进步,越来越多的人想了解编解码技术。为此,网易云信R&D工程师为大家进行了总结和梳理,并从理论和实践两个方面简要介绍了视频编解码技术。
相关阅读推荐
直播视频的关键技术:平滑、拥塞和延时追赶
视频直播技术详解:直播推流调度
音视频通话:浅谈音频处理和压缩技术
1.视频介绍
视频的本质是图像序列。根据视觉暂留原理,每秒播放20~25幅图像会形成连续平滑的视觉效果,人眼无法分辨单一图像,所以连续的画面称为视频。每秒播放的图像数称为帧速率。图像由像素组成。在彩色图像中,每个像素由三个分量组成:R、G和B,每个分量存储在一个字节中。分辨率用于描述图像的大小。例如,分辨率为1280x720意味着图像宽度为1280像素,高度为720像素。
2.压缩视频的原因
视频为什么要压缩?如果有一个60秒的视频,分辨率为1280x720,帧率为25,那么这个视频的大小等于60 x 25 x 1280 x 720 x 3 = 4147200000字节,约为3955MB。如果不压缩这个巨大的数据,磁盘空很快就会被占用。
多媒体数据占互联网数据的80%以上,大部分是图像和视频数据。压缩前的视频非常大,不利于存储和传输。因此,有必要对视频进行压缩。视频压缩也叫视频编码。它利用视频中空之间的冗余和时间冗余,消除人眼不敏感的信息,达到数据压缩的目的。
3.视频压缩基础
视频能被压缩的根本原因是信息冗余。视频中有两种冗余信息:
(1)空之间的冗余。对于视频的每一帧,在一定的尺度内,像素的变化非常平缓,像素非常相似,这就是空之间的冗余。
(2)时间冗余。视频是由不断变化的图像组成的。在短时间内,相邻图像之间的变化非常小,所以相邻图像非常相似,这就是所谓的时间冗余。
4.视频编码的原理和细节
因为视频中有大量的信息冗余,如果要压缩视频,就必须想办法去除冗余信息。标准视频编码过程包括以下步骤:
(1)预测编码。预测是利用以前的像素值来计算当前的像素值。根据以前的知识,在空或时间上相邻的像素非常相似,所以只要预测方法合适,预测值和实际值就会非常接近。假设当前像素的实际值为X,预测值为P,那么X A=X-P之间的残差为A=X-P..如果我们只对残差数据进行编码,数据量会大大减少。这就是预测编码的原理。预测编码可以分为空帧间预测(帧内预测)和时间预测(帧间预测)。预测编码可分为以下步骤:
即通过使用先前编码和重建像素块来预测当前像素块的值
Ii .找出当前像素和预测像素之间的差异
iii .编码像素差值
iv、将编码后的数据传输到解码端,按照同样的方法预测解码端的像素值,并加入残差重构原始图像。
为了得到最佳预测值,编码器通常需要使用不同的预测方法进行预测,然后按照一定的评价标准(通常是SAD、STAD、RDO等)得到最佳预测值。)(注意预测值越接近实际值越好,但所谓优化是计算复杂度、失真和比特率之间的综合考虑)。特别是对于帧间预测,在预测时需要大量的计算才能在参考帧中找到当前块的匹配块,因此需要进行预测。
(2)变换编码。变量编码本身不压缩数据。变换的目的是将空域信息变换为频域信息,去除了信息之间的相关性,在下一次编码操作中可以得到更高的压缩比。可变编码是为下一次量化编码做准备。视频编码中常用的变换方法有离散余弦变换和哈达玛变换。
(3)量化编码。量化是视频失真的根本原因。预测编码和变换编码后得到的数据称为变换系数。虽然变换系数与原始数据相比较小,但系数值的变化范围仍然很大。利用量化将变换系数的连续值转换成有限的离散值,可以大大提高压缩比。假设有这样一组数据[16,96,100,600,50],量化参数为25,量化后的数据为Round ([16/25,96/25,100/24,600/25,50/25]) = [0,4,4]编码是一个不可逆的操作,这是失真的根本原因。
(4)环路滤波。环路滤波和压缩关系不大,但和视频的画质关系很大。视频编码是分块进行的。当通过量化模块时,每个块选择的量化系数可能不同,导致每个块产生不同的失真和像素块的不连续边界。因此,人眼观看视频时,会出现遮挡效应(即有很多马赛克现象)。为了提高视频质量,需要消除阻塞效应,这是环路滤波器模块的功能。量化后的数据块经过反量化和反变换,然后重构,再经过去块滤波,得到的像素块可以作为预测模块的参考像素块。环路滤波是一个可选模块。
(5)熵编码。熵编码的目的是去除统计冗余,实现进一步的数据压缩。这个可能有点抽象。例如,假设有这样一组数据[0,4,4,24,2]。如果用定长编码进行编码,这个数据可以表示为[00000,00100,00100,11000,000010],每个数据需要5位来表示,这个数据的总长度为5位x,如果我们用霍夫曼编码,这个数组中每个元素的概率值如下:值0的概率为20%,值4的概率为40%,值24的概率为20%,值2的概率为20%,即根据每个元素的概率,构造哈夫曼树(数组在节点括号内)
可见,霍夫曼编码可以去除统计冗余,达到数据压缩的目的。霍夫曼编码是一种熵编码方法。但由于霍夫曼编码对误差非常敏感,不适合实际应用,所以在实际应用中通常采用变长编码(CAVLC)和算术编码(CABAC)作为熵编码算法。算术编码是用一个0到1之间的浮点数来描述一个信号序列,然后用这个浮点数来表示信号序列,极大地压缩了数据。算术编码可以用一个简单的例子来说明,假设有一个二进制串“10101110”,符号0和1的概率值都是50%,算术编码的过程如下:
(1)设置一个区间,通常我们把这个区间设置为[0,1],然后用低点指向区间的下界,用高点指向区间的上界,现在低点指向0,rhigh指向1。
(2)输入每个符号,根据不同的符号调整高低。调整方法如下式所示。最后以low指向的浮点数作为这个符号串的码字来表示这个二进制串。可见,算术编码的压缩效率远高于霍夫曼编码。x264采用CABAC(上下文自适应二进制算术编码)作为熵编码算法。
更多关于即时通讯、音视频技术的干巴巴的文章,请关注网易云信博客。
1.《视频编解码 视频编解码的理论和实践1:基础知识介绍》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《视频编解码 视频编解码的理论和实践1:基础知识介绍》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/yule/1451355.html