H.264学习(一)

来源:互联网 发布:it外包服务市场 编辑:程序博客网 时间:2024/05/01 01:16

        由于工作需要,以及提升自身能力,遂打算深入学习H.264。之前一直都是做应用的,编码库用的是x264,解码器是从ffmpeg里提取出来的(当然不是我提取的......)。只知道如何去调用接口,而不清楚其具体是如何实现的,甚至有些参数还不甚明了。这往往会导致很多你意想不到的BUG产生,也会耗费你很多时间去解决问题,大大降低了工作的效率。

        如何开始学习H.264呢?作为程序猿,那还是从代码入手吧。

        1、通读H.264标准,可以参考毕厚杰的《新一代视频压缩编码标注》(本人英文功底不深厚,只能先看看中文版的了.....),了解各种术语的基本概念,以及编解码的过程。

        2、分析x264源码了,这可是个很耗精力的活。

        至于ffmpeg,一个很庞大的库,先把x264搞定再说吧。

        开始ing......

        原打算花2周时间看H.264标准的,唉,太乐观了,到目前只看了四分之一......看到一些理论计算都还跳过来着(不过这些也不是我通读的重点)。废话不多说了,先记录一下看到过的一些知识。

        第一章就不多说了,主要就是讲随着社会的信息化,视频编码的要求及可能性。这里有几点要提一下:

        1、压缩比与视频质量,压缩就是为了节省带宽和储存空间,但不能一味的压缩,过分压缩会失真,会降低视频质量。工作中虽然经常会提到视频质量,但当时对这个概念还是很模糊的,不知道如何去评判视频质量的高低。视频质量有两个标准:一个是主观感受,从视觉上去判定;另一个是信噪比(S/N)(还不知道这个怎么计算.......)。

        2、视频压缩的方式:预测编码和变换编码。预测编码是利用像素之间的相关性,前后帧图像之间的相关性来完成编码的。何为相关性?比如同一图像临近像素,它们的值相似或者相等的概率很大。这样的话,就可以将一个像素作为参考点,用与该像素的关系来表示其它像素点。变换编码我看得不是很明白了,视频信号中包含着很多直流和低频成分,还有少量的高频成分,然后用数学变换后,得到变换域的图像,脑子转不过来了.......

        3、视频编解码的基本结构,脑子里还是得有这个结构的:

       


         第二章主要讲数字视频信号的特点以及如何从模拟信号中得到可用的数字视频信号。

        1、模拟信号经过取样、量化、PCM编码(脉冲编码调制)就可以输出数字电视信号了。

        2、色彩空间,包括RGB和YUV的由来及YUV的优势与抽样方式。

        3、视频信号的预处理,包括色彩插值、色彩校正、伽马校正、图像增强、白平衡。这些先不关心,了解下就可以了。


        第三章详细讲了预测编码及变换编码的过程。好多公式......没细看,跳过.....再跳过......不过还是学到了点东西。

        1、预测编码有两种,帧间预测编码和帧内预测编码。帧间编码的编码效率更高,又能分为单向预测、双向预测、重叠块运动补偿。这让我想到平时说的B帧、P帧了。B帧应该就是双向预测,P帧时单向预测。重叠块运动补偿还不清楚.......

        2、运动估计,直接给出概念:在帧间预测编码中,由于活动图像邻近帧中的景物存在着一定的相关性,因此可将活动图像分成若干块或宏块,并设法搜索出每个块或宏块在邻近帧中的位置,并得出两者之间的空间位置的相对偏移量,得到的相对偏移量就是通常所致的运动矢量,得到运动矢量的过程被称为运动估计。

        3、变换编码,这个一直不是很理解,先不说了。有多种正交变换编码方法,如K-L变换、离散余弦变换(DCT)、快速傅立叶变换(FFT)等。K-L变换编码性能最理想,但缺少快速算法,DCT变换性能仅此于K-L变换,且有快速算法,所以应用广泛。

        4、现实中一般采用混合编码方法,即对图像先进行带有运动补偿的帧间预测编码,再对预测后的残差信号进行DCT变换。

        5、熵编码,在工作中一直听到熵编码这个词,但一直不知道何谓熵编码,所以这里特地写出。利用信源的统计特性进行码率压缩的编码就称为熵编码,也叫统计编码。有两种:变长编码(哈夫曼编码)和算术编码。这里虽然给出了定义,但还不清楚如何使用或者是哪里需要熵编码。以后再深入。


        第四章是讲视频编码标准的发展史,以及H.261、H.263、MPEG-1、MPEG-2、MPEG-4、JPEG、AVS标准。其它标准先不介绍了,这里主要讲一下MPEG-4,毕竟是现在主流的编码标准。

        1、MPEG-4分为6个Part,其第二部分就定义了视频的编解码标准,第三部分定义了音频的编码器集合。

        2、MPEG-4是基于VOP(Video Object Plane)的编码方式,每个VO由3类信息来描述:运动信息、形状信息和纹理信息。


        先写到这,下回见~~!