您当前的位置:首页 > 好词好句 > 正文

为什么要编码(文章编解码原理及详细步骤)

为什么要编码(文章编解码原理及详细步骤)

说到文章编解码,我们自然会想到H.264、HEVC/H.265等权威的文章编解码标准;说到标准,有人认为有专门机构研究这个,我们关心它的应用。即使有兴趣阅读标准及相关技术,也需要花更多的时间去理解更多的数学公式和术语,如协方差、傅立叶变换、高频、滤波等。通常比较实际的做法是,只要考察如何应用这些标准,如何做好软硬件编码方案的选择,如何优化技术参数,如何调用API,就基本可以处理日常的文章业务。所以,说到文章编解码,总有一丝玄机。

本文的目的是从非专业的角度来看待文章编解码的原理,试图将所谓的高级技术术语或名词转换成普通IT专业人士略知一二的文字,让更多的人了解文章编解码是怎么回事。

为什么编码?

原因很简单:没有编码的源文章数据量太大。例如,如果您输出一个分辨率为19201080、24位颜色、每秒30帧的高清文章,这样一个一秒钟的文章的码率将达到1.5Gbps。因此,您需要对它进行编码,并将其压缩到尽可能低的水平。下图显示了编解码器标准的演变。H.264编码后,文章比特率压缩到10Mbps,是源文章数据的1/150。

那么,我们什么时候不再关心编码了呢?理想的状态是,当我们不再担心存储空间和网络带宽的限制时,我们不不需要考虑编码,按照顺序我们都可以接受。

思考:N年后,G网普及后,文章编解码技术和CDN的作用会越来越淡化吗?

什么是编码?

但狭义来说,并不全面:编码最重要的工作是压缩。但是压缩是一个循序渐进的过程,并不是简单的把图像中重复的零收集起来那么简单。根据方法,可压缩内容如下:

单幅图像压缩

图像被分成几个小块,每个小块的大小为88像素。如果这个小块中每个像素的颜色都是白色的,那么所有64个点的值是否都可以用一个点的值来代替?编码中的这个标准术语叫做空间冗余,对应的方法叫做帧内压缩。

多幅图像之间的压缩

文章中的一个连续动作,比如画面中的女主角在红墙的背景下闭上了眼睛。这个动作的背后是一系列的图片,每张图片的内容基本相同。唯一改变的部分是女主角的眼睛所在的位置。眼睛慢慢开合,这个区域的像素值发生了变化。对于绝大多数背景区域来说,它是不变的,那么除了这个有闭眼动作的区域之外,有没有可能只用一张图像来代替这么多连续的图像呢?编码中的这个术语叫做时间冗余,强调的是在一定时间内,如何压缩连续图像的冗余部分。这个术语叫做帧间压缩。

编码压缩

图像的空间冗余和时间冗余都被压缩成一个字符串。有没有进一步压缩这个字符串的可能?它这叫做编码冗余。

所有的文章编码技术和标准都在试图压缩上述三种冗余数据,绞尽脑汁采用不同的算法和策略,产生不同的结果,从而产生不同的文章编码标准。

编码的核心技术步骤主要分为预测、变换、量化和熵编码,在这些步骤之后还有一个可选的步骤就是滤波。是不是有点蠢?现在解释一下。

预测

根据时间采样将文章分成N个图像。为了便于压缩和计算,每幅图像被分成多个小块,例如每个小块由88个像素组成。如果不进行压缩,则需要存储每个图像的每个像素值。总共N个图像被存储和连接以形成完整的原始文章。像素的类型分为图像的亮度值和颜色值。为了简化理解,本文通篇以亮度值为例。

压缩的第一步是预测。对于一幅图像的每一个块,根据一些相邻的像素值,用一个公式预测指定方向下一个像素点的值,从而得到该点的预测像素值,构造一幅完整的图像。

例如,如果有两幅连续的运动图像,保持其中一幅图像的原始像素值不变,然后利用公式计算,根据该图像的值预测另一幅图像的运动,即利用公式计算出第一幅图像的像素值后,预测第二幅图像在指定位置的像素值,以此类推,得到完整的预测图像。

这里这是个问题。世界上有哪种算法可以计算预测的如此完美?不,没有 .什么预测有什么用?答案是得到他们的差异。什么差异有什么用?因为差的绝对值很小。还是唐我不明白?让让我们看看下图中的三个像素值矩阵:

有没有感觉差矩阵的数据存储量绝对值比较小?数值小,从理论上讲,是为了使包含的信息能量更低;为了到达编码阶段,编码压缩的数据量较小,因此压缩效率较高。那这就是预测的目的。

有了原始图像和特定的预测公式算法,我们不不需要存储第二幅图像到相关的第n幅图像的原始像素值,而只需要存储它们的差值。如果要解码,带上数据,用公式还原,再加上差值,就可以还原那些预测图像的本来面目了。

在图像中进行预测称为帧内预测;一系列画面的运动轨迹预测,比如一个扣篮动作的文章,属于帧间预测。

用作参考帧的帧,称为I帧,是关键帧,信息量最大,只能在帧内压缩,通常压缩率较低;但是,那些通过参考I帧的信息来获得差值而预测的后续图像,根本不是原始像素值,而是一些原始图像的残差,这些残差被称为预测帧。帧预测有时混合使用帧内预测和帧间预测,这取决于该块更适合哪种算法。

根据前面的图像,这一帧的图像称为P帧;结合前后图像进行双向预测计算,这一帧的图像称为B帧。基于一个关键的I帧图像加上一系列相应的预测图像(如B帧和P帧)的一组图像称为GOP。

现在,你明白别人常说的I帧、B帧、P帧是什么了吧?I帧是图像信息的关键;b帧或者P帧是主要压缩的地方。

思考:为了减少文章的网络传输延迟,CDN上的HLS文章数据分片是不是越细越好?

回答:不能,切片时,每个切片至少要提供一个I帧和一系列P帧和B帧。如果划分过细,I帧的数量会增加。I帧太多意味着压缩率变低,网络传输量不减反增。

变化

它这还远没有结束。虽然预测公式减少了许多像素中存储的编码信息量,但这不是压缩。因此引入了各种变换,如离散余弦变换、小波变换等。在学术上,它的目的是把图像从空间域转换到频率域,通过这些所谓的变换把高频信息过滤掉。因为人眼对高频信息不敏感,所以不会如果有些被过滤掉了,那也没关系。经典的DCT公式如下所示:

你又犯傻了吗?好,翻译一下。看下图。转换公式就像一个水果分拣机。根据一些特点,比如把水果按大小分类,大的放一堆,小的放一堆。转型之后,物以类聚。如果后续有什么需求,可以轻松封箱打包。

图像的变换改变了原有像素信息的空间顺序,取而代之的是基于频率和幅度的存储方式。但此时的改造只是改变了阵型,没有任何实际的压缩动作。

以一个88的图像块为例。原始图像块的像素值为

你能看出什么特征吗?如果没有,请提醒我,矩阵左上角的值较大,右下角的值较小,趋近于零。这就是传说中的分频。DCT变换后,低频、高幅、重要信息放在左上;然而,人类不敏感的、高频但低振幅的数据被放置在右下侧。

这有什么好处?在下一个量化步骤中,可以对右下侧的数据进行操作。所以可以简单理解为,无论A或B是什么变换,don 不要被它的公式和名字吓倒。只是改变阵型,为后续的编码压缩做准备。

量化

到现在还是没有实质性的压缩。万事俱备,只欠量化。这是压缩前的最后一道工序。量化就好比给刚站队的选手的身高分级,通过一个基准步长计算出每个值的相对值。又犯傻了,是吧?如下图:量化前左上角的值为236,步长为8,那么量化后其值为236/8=30;量化前第二行第一个元素的值为-22,量化后为-22/8=-3。

这样,量化分级后,数据开始变得简洁明了,但准确性也损失了,损失的大小由量化步长决定。图像的失真是由量化引起的。

回过头来看,经过上面的DCT变换,数据形成已经准备好了;量化后,很多高频的右下角的值变成了0。对数值进行之字形扫描,将其转换成一串数字。

上述变换值的量化结果如下:

30, 0, -3, -1, -2, -2, -1, -1, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…

为什么要做之字形扫描,因为把全零凑在一起更方便;为什么右下角都是0?因为DCT变换改变了队形。为什么你把零放在一起?用于编码和压缩!

熵编码

压缩的第一个过程称为游程编码。什么是游程编码?忘了这个名词,就是重复的数据用重复的二次值来表示。看看这个例子,一个原始的字符串:

aaaaaaabbbbccccdddeeddaa

对原始字符串进行游程编码后,用重复的数字替换重复的字母,它就变成这样:

7a4b4c3d2e2d2a

这是游程编码的思想。游程编码思想虽然简单,但是非常有用,在PNG、GZIP等各种压缩算法中都有它的影子。

那这还不是全部。它这只是压缩的一小步。第二步,对游程编码后的数据进行变长编码,比如霍夫曼编码,这是压缩的重头戏。霍夫曼编码的主要思想是用最短的代码代替字符串,从整体上减少了原始数据的长度。网上讨论很多,所以我赢了这里不赘述。有兴趣的也可以看我的文章《图解DEFLATE编解码》。

编码和解码概述

让让我们梳理一下文章编码的核心步骤:

首先进行帧内预测和帧间预测,根据关键帧得到每幅图像的差值,减少编码信息量的存储;

将其转换完成队形调整;

对数据进行有损量化,将不重要的数据归零;

在特定方向上扫描量化数据,并将二维数据转换成一维数据;

最后进行压缩,即先进行游程编码,再进行压缩编码。

解码步骤正好相反。

大多数文章编码和解码标准无一例外地包含这些目标。当然,有些标准也考虑环路滤波,但不是必须选项,这里就不解释了。

编码和解码标准

各大标准有什么区别?有了以上的基本认识,就it’这很容易解释。标准不同,有的只用变换,有的用预测和变换的混合编码;或者帧内预测算法不同,预测方向不同,有的支持4个方向,有的支持8个方向;或者变换的算法不一样,比如DCT和小波。或者熵编码算法不同,有的是霍夫曼编码,有的是算术编码;等待.

具体来说,H.263及之前的编码标准会直接对帧内编码块进行变换,H.264提供基于九个方向的帧内预测;比如在HEVC/H.265中,采用了基于四叉树的分块方法;对于帧间预测,提供了八种类型的预测单元。除DCT外,首次使用DST,有效地变换了残差矩阵。

最新的编码标准,算法越先进越复杂。

最后

以上是文章编解码的基本原理。希望看完能大致了解文章编解码原理的基本思路。但如果你真的想深入了解文章编解码标准和算法的细节,那就要下功夫了。你可以就课文中的每个主题写几本书。请带着你的理想和毅力走下去,祝你一切顺利!

hfy

标签:编码文章图像


声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,谢谢。

上一篇: 电视投屏怎么操作(电视投屏怎么投 电视投屏的技巧)

下一篇: 免费邮箱申请



推荐阅读