H.264编码器

一、H.264的基本原理

                                

H.264是基于预测、变换、量化、编码的混合编码框架

预测:

  不直接对图像块进行变换、量化和编码处理,而是根据邻近块(通常是位于当前块上面和左边相邻的己编码块)的值来预测当前宏块的值,然后再对预测值和原始值的差值进行变换、量化和编码,是对预测误差进行编码。

(1)帧内预测:H.264帧内预测有亮度的4*4、16*16和色度的8*8模式,其中4*4模式有9种预测方式,其余两个有4种预测方式。亮度平坦区一般采用大块预测,对于细节较丰富的图片采用更精细的4*4预测模式

(2)帧间预测:H.264 编解码器采用已编码视频帧/场和基于块的运动补偿进行帧间预测。除了保留以前编码标准帧间预测的主要特性外,H.264 还采用了一些新的特性来提高编码效率

    ①使用不同大小和形状的块进行运动搜索

    ②使用 1/4 像素精度搜索,即使用高精度的运动矢量来表示图像块的运动方向和位移

    ③使用多个参考帧进行帧间预测

    ④使用块分离滤波器消除块效应

变换:

  H.264 对图像或预测残差采用 4×4 整数离散余弦变换技术,有效避免了采用通用 8×8 离散余弦变换、反变换引起的失配问题。采用三种不同的变换方式。它们分别是:适用于帧内预测宏块 4×4 亮度 DC 系数块的整数变换,适用于任何色度宏块 2×2 DC 系数块的整数变换和适用于其他 4×4 残差数据块的整数变换。

量化:

  H.264 标准支持 52 个量化步长,每个量化步长有一个对应的序号,被称为量化参数(QP)。当量化参数取最小值(0)时,代表最精细的量化,当量化参数取最大值(51)时,代表最粗糙的量化。量化参数 QP 值每增加 6,量化步长 Qstep值增加一倍。

编码:

  H.264 标准提供的熵编码有通用变长码编码(UVLC)、基于上下文的自适应变长码编码(CAVLC)和基于上下文的自适应二进制算术编码(CABAC)。

其次,H.264还提供了去块效应滤波和分层设计、数据分割等功能。

二、H.264编码实验

1.首先输入一个“highway_qcif.yuv”的序列视频,该视频的特点是一直在行驶的车辆拍摄的公路的画面,画面内容变化不大,不同码率、不同GOP下编出的亮度峰值信噪比如下所示:

                                     

我们画出该序列的率失真曲线图如下:

                                                

2.下面这个序列是“demo.yuv”的编码,这个视频的特点是只有一个小孩子在背景不动的情况下,做摆幅不大的变动。不同码率、不同GOP下编出的亮度峰值信噪比如下图所示:

                                                

我们画出该视频序列的率失真曲线如下:

                                                    

三、实验结果分析

1.固定码率,B帧的数量,在率失真曲线上面纵向对比GOP15_B2、GOP12_B2、GOP9_B2,发现GOP的长度越大,平均PSNR值就会越大;我们采用码率控制的模块如下图,一般码率采取的要比原来不采用码率控制的要低一些,这样的话预测的长度越大,可以减少更多的冗余,为有效的视频帧数据提供更精细的量化,自然PSNR要大一些。


  所以我们可以看出两个率失真曲线最下面的一条直线是全I帧,因为没有预测帧,所以要给每一个像素数据分配一定的比特数,浪费了一定的资源

  又因为我们的码率取值没有超过不进行码率控制时的码率,所以全I帧的PSNR再往上升比较困难,呈现出一条直线的样子                                        

2  .固定GOP的长度、形状,码率越高,为视频数据可分配的比特数越多,PSNR自然更高一

3.固定码率、GOP长度,B帧越多,在码率较低的情况下,PSNR值要大于B帧较少的,但是,当码率逐渐升高时,B帧由于是双向预测,失真较多,PSNR渐渐不如B帧较少的(比较两个图中的GOP12_B2,GOP12_B1)

4.两个视频的码流分析:

①公路图片

     

  由上图片,左边是公路p_Skip宏块数量的搜索,右边是小女孩的p_Skip宏块数量搜索。

  可以看出公路的视频中P_Skip类型的宏块数量要远远小于小女孩视频中的,公路算是快速运动类型的视频,小女孩视频中大部分为背景,且女孩动作较慢。

  结合率失真曲线,我们可以大致从实验的结果,看出有高速运动物体,但是整体背景变动不大的视频序列,GOP在合适的范围内越长越好,码率在适当的情况下也是越大失真越小;而大背景基本不变,只有局部的微小变化的视频,GOP的长度选择适中,B帧数量要结合码率的限制来选择。

四、码流软件分析视频

1.一个I帧一个P帧

                                                     

I帧分要作为后面P、B帧的参考要分的细一点,以免造成差错传播      

2.运动矢量

                                           

以上三个图分别是I、B、P帧,可以看出来

①I帧是帧内预测,所以没有运动矢量

②B帧是双向预测帧,有红、绿两种运动矢量

③P帧是前向预测帧,有绿色的运动矢量

3.我们还可以用这个按钮看一下冗余的程度,灰色的部分全部都是冗余的部分

  其中绿色的格子宏块大一些,红色的因为在细节较为丰富的区域,所以宏块小一些,一个是亮度的16*16,用于亮度平坦区,一个是亮度的4*4,用于细节较为丰富的区域