首页 > 编程知识 正文

剪辑视频,音视频编解码基础知识

时间:2023-05-04 19:48:56 阅读:115484 作者:2645

1 .编码必要性

使用当前视频捕获设备时,获得的数据量非常大。 为此,一般进行编码处理以节约存储空间并减少传输带宽的占用。 在不影响图像客观信息表示的前提下,一般采用有损编码。 图像的局部空间在一定意义上是平滑连续的,同时在图像帧之间,除了目标运动和轻微的光照变化之外,帧之间的大部分残差很小,人眼对亮度比色度更敏感。 这些因素推动了视频编码的成功。

视频图像是立体场景的二维空间数据记录,在空间上局部连续、平滑,在时间上运动持续、一致。 空间中区域的一致性或局部连续性允许使用少数主要信息来表示其他信息,即预测编码。 时间运动渐变允许帧之间的残差表示目标的位移。 因此,视频图像据说在空间和时间上是相关的,具有冗馀性。 编码压缩是指利用相关性消除冗馀并保留图像的主要信息。

2 .编码压缩原理

当前,大多数编码算法、机制是混合编码,并且处理模块包括预测、运动估计、变换、量化、熵编码等。 不同的视频算法是各模块的不同实现方法,工作原理相似。 从总体上看,图像帧的编码模式主要有帧内和帧间两种方式。 在帧内编码中包括预测、变换、量化、熵编码等,在帧间编码中包括运动估计、运动补偿、变换、量化、熵编码等。 帧内预测和帧间运动估计一起进行预测编码。

预测编码是视频编码中最主要的方法。 的当前像素点与帧内的相邻的上、下、左、右等位置的像素点相比,灰度的变化小,相关性极强,在图像中具有空间冗馀。 视频帧是一种现用图像序列,包含每秒多帧图像,且当前图像点与先前帧中的对应位置或邻近像素点非常类似,具有强相关性且在时间上冗馀。 预测编码是指减少上述空间冗馀性和时间冗馀性,分别对应于帧内编码和帧间编码。

压缩原理图:

帧内预测编码:

帧内预测编码是对图像数据本身进行编码的编码,由于空间上的像素值不急剧变化,故在处理当前图像块时,如果能够参照以前编解码的图像,则参照的零值或小值变多,实现压缩编码的目的。 帧内编码的优点在于错误积累少,图像清晰,缺点是压缩倍率小。 举个具体的例子吧。 保存1像素的亮度值可能需要8bit,但如果2像素变化不大,则保存第1像素和第2像素的变化值。 这样,2位就可以了,可以节约码率。

假设对某个像素x进行了编码。 此时已经有参考像素X1,根据X1的值可以得到预测值XP。

从已编码的像素x中减去预测值XP以获得差值d,对差值进行量化和编码以创建最后的码流,否则保存x以创建码流。 最后,将差d和预测值XP相加得到X1,用于下一像素的预测。

上面介绍的是帧内预测编码的原理,根据视频压缩算法的标准不同,预测的方式也各不相同。 举例来说,MPEG-1/2/4标准帧内预测当前块的第一行或第一列,例如,使用当前块的顶部、左侧及顶部,移除原始直流分量; 取决于块的尺寸,H264标准帧内预测对于16x16亮度块有四种预测模式,对于44亮度块有九种预测模式。 减去预测值和当前值得到预测残差,然后代替当前的系数值得到压缩效果。 但是,如果图像细节丰富,帧内预测编码的效果就不是很好。

帧间预测编码:

帧间预测编码是视频编码的主要方法,帧间编码是p帧(前向预测)编码和b帧(双向预测)编码。 在经编码重构的帧中的对应位置或周围预测和搜索帧之间的预测,而不是在当前图像帧中。 帧间预测是图像在时间上前后的视频帧处理,因此就像物体在移动一样,出现在各个视频帧中。 帧间预测是在一个窗口中搜索最佳匹配的宏块,并将这两个宏块相减去以获得预测残差。 由于物体的实际运动轨迹不是整数像素大小,为了更准确地描述物体的运动轨迹,视频算法提出了1/2像素、1/4像素、1/8像素的运动估计,那么此时获得的匹配块和运动向量会更准确。

(1)帧间预测的基本原理

基本原理如图所示。 通过将当前帧图像f(x,y )减去预测图像f(x,y )而获得的帧误差e ) x,y )经由量化器输出et ) x,y ),并进行熵编码。 当将预测图像ft(x,y )与et ) x,y相加时,获得ft1 ) x,y ),并且在没有量化失真的情况中,ft1 ) x,y )是当前帧f ) x,y。 将当前帧ft1(x,y )与从帧存储器输出的前一帧(即参考重构帧)同时输入运动参数评价器,搜索、比较运动向量MV。 MV被输入到运动补偿预测器,得到预测图像。

预测的图像ft(x,y )不与当前图像f ) x,y完全相等,并且不管预测多么准确,帧误差e ) x,y )也总是存在。

(2)重建图像插值

连续运动的物体,轨迹连续,但像素离散。 因此,仅用整数像素表示运动物体明显是不准确的,因此被称为非整数像素的运动轨迹。 对于前向预测编码参考帧,每次重建参考帧时,都必须基于此参考帧内插多个非整数像素运动轨迹的参考帧。 例如,1/2像素的运动路径有四个参考帧:重建参考帧、重建参考帧的水平插值参考帧、重建参考帧的垂直参考帧和重建参考帧的斜角参考帧。

      (3)运动估计算法

      在以上参考帧中对当前宏块搜索最佳匹配宏块,估计出最佳运动矢量大小。运动估计算法是基于块匹配的运动估值算法,对当前编码宏块寻找最佳匹配图像宏块,同时就找到了最佳运动矢量。运动估计要解决两个问题:匹配准则和搜索算法。

      常见的块匹配判断准则有平均绝对差(MAD)、差的绝对值的和(SAD)。SAD准则更为常用,值越小,表明两个块越相似。

      最简单的运动估计算法有三步搜索法、对数搜索法、四步搜索法、菱形搜索法、大/小钻石搜索法、六角形搜索法等等。

      由于实际物体的运动变化万千,很难用一种简单的模型去描述,也很难用一种单一的算法来搜索最佳运动矢量,因此实际上大多采用多种搜索算法相结合的办法,可以在很大程度上提高预测的有效性和鲁棒性。

      H264视频标准推荐的运动估计算法,全称是非对称十字型多层次六边形格点运动搜索算法。利用了以下的多种搜索方式:第一步:非对称十字型搜索,水平搜索多于垂直方向;第二步:正方形区域搜索;第三步:中六边形模板、十字模板。

      (4)运动补偿插值

      根据匹配准则得到最佳匹配宏块及其运动矢量,作差运算得到残差,在计算残差时,需要根据运动矢量和参考帧类型做差值补偿。在参考帧中,对应宏块位置偏移运动矢量大小得到匹配宏块,然后根据运动矢量选择插值帧:水平插值、垂直插值、斜角插值,最后做减法运算,完成运动补偿。

      

      变换编码:

      变换编码是把时域的信号通过数学工具转换到另外一个域内,在这个新域中,信号的能量重新分布,而且能量更集中,从而便于编码压缩。平坦区域或者内容缓慢变化区域占据一幅图像的绝大部分,而细节区域或内容突变区域则占小部分。也可以说,图像中直流和低频分量占大部分,高频分量占小部分。这样,空间域的图像变换到频域,即变换域,会产生一些相关性很小的变换系数,并可以对其进行压缩编码。视频编码中变换编码的数据源有两种:图像数据本身和图像残差。

      对图像做变换编码,最理想的变换运算应对整个图像进行,以便去除所有像素间的相关性。但是这样操作计算量太大,需要的临时存储区太大。实际上,往往把图像分为一定大小的块,然后以宏块为单位进行DCT变换。也正是因为以宏块为处理单位,编码后的图像有块效应,这就需要在解码视频时增加后处理以提高图像质量。H264视频编码算法在编码内部及解码端开启了环路滤波功能,提高参考帧或者解码帧的图像质量。


      量化编码:

      量化编码是把DCT系数除以一个常量,经过量化后的结果是量化步长的整数倍或为更多的零值,从而达到压缩的目的。H263编码方式是16x16宏块的DCT系数除以同一个量化步长,即均匀量化。在反量化时,由于量化过程取整或者四舍五入,无法还原DCT系数,从而产生失真。量化是视频编码失真的根本原因。


      熵编码:

      经过变换、量化之后,图像数据已经有一定程度的压缩。由于图像的DCT量化系数的相关性较小,所有系数均重要,但数据的概率分布有一定规律。熵编码就是利用概率分布规律实现无损的统计编码。基本原理:符号出现概率大的用短码字来表示,符号出现概率小的用长码字来表示,从而起到数据压缩的目的,所以熵编码又称为可变长编码VLC。

   

3.主流视频编码算法

      目前主流的视频编码标准是MPEG-4和H264。

      MPEG-4是ISO组织制定的音频编码编解码算法,主要针对网络、视频会议和可视电话等;

      H264是ITU-T和ISO联合组织JVT制定的视频编解码标准,在MPEG-4中是part-10,称为AVC,在ITU中称为H264。    


4.视频解码原理及

      视频解码流程是编码流程的逆过程。实际上,任何一个编码器都隐含着解码器的大部分操作。

      视频解码原理图:

     

      首先解析码流的头数据,获取编码图像的有关参数,包括帧编码类型(I/P)、图像宽度或高度等,后续就是以宏块为单位循环解码。熵解码是可变长编码VLC的逆操作,即VLD。H263/MPEG-1/2/4是Huffman熵编码,即通常意义上的VLD,而H264则是采用算数解码,又包括CAVLD、CABAD。另外,对于帧间编码的宏块,解码器还要解析出当前宏块的运动向量。熵编码后是反量化操作,对于不同的解码算法有着不同的反量化处理,H263采用了32级的均匀量化,即宏块数据采取一个量化步长;MPEG-4除了支持H263的均匀量化外,还增加了量化表的处理方式;H264采用了52级的均匀量化方式。反量化处理后,进行反变换IDCT,H264采取4x4的整数ICT。运动补偿是解码中的重点,因为码流统计中帧间编码为主要的编码类型,与之对应的处理就是插值运动补偿,根据从码流中解析的运动向量信息,定位参考帧的确切位置,然后计算1/2、1/4像素精度的插值,最后把结果补偿到重建帧中。最后处理是可选的去除块效应、环路滤波、图像扩展等。




版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。