H.264编解码分析
一、关于视频编码
首先我们需要知道为什么我们需要视频编码呢?
因为视频信号所包含的信息量巨大,显然我们现在的网络情况是远远不能满足的,我们需要通过编码压缩视频,节省对传输带宽和储存空间的需求,以便于在网络上进行传送。
视频是由图像组成的。而图像则是由一个个像素组成的,而一个像素,可以通过 R/G/B 三种颜色的值来表达,也可以通过YUV表达 。其中,Y 是明亮度,用来表示像素的灰度值;U、V 分别是影像色彩与饱和度,用来表示像素的颜色。
在视频编码的过程中,视频不直接使用RGB而是用YUV作为输入,是因为YUV作为输入可以极大地去除冗余信息,节省带宽。
总的来说,视频编码流程如下:
视频编码实现的标准有很多,现在最主流的还是H.264,接下来我们着重介绍H.264的编解码原理
二、H.264编解码原理
1、编码:
编码器采用的仍是变换和预测的混合编码法。
在图6.1中,输入的帧或场Fn以宏块为单位被编码器处理。首先,按帧内或者帧间预测编码的方法进行处理。假设采用帧间预测编码,其预测值PRED是由当前片中前面已编码的参考图像经运动补偿(MC)后得到,当中参考图像用F’n-1表示。预测值PRED和当前块相减后,产生一个残差块Dn,经块变换、量化后产生一组量化后的变换系数X,再经熵编码,与解码所需的一些头信息一起组成压缩后的码流,经NAL(网络自适应层)供传输和存储用。
2、解码:
将编码器的NAL输出的H264比特流经熵解码得到量化后的一组变换系数X,再经反量化、反变换,得到残差D’n。利用从该比特流中解码出的头信息,解码器就产生一个预测块PRED,它和编码器中的原始PRED是同样的。当该解码器产生的PRED与残差D’n相加后,就得到了uF’n,再经滤波后,最后就得到滤波后的解码输出图像F’n。
三、实验步骤
1、选择两个264文件并对其进行解码,得到相应的YUV文件
(1)实验前准备
将两个mp4文件通过转换器生成两个.264
格式文件,分别命名为1.264
和2.264
(2)修改bin目录下的decoder.cfg
文件
如下,根据选择文件修改inputFile
及outFile
内容:
InputFile = "1.264" # H.264/AVC coded bitstream
OutputFile = "1_dec.yuv" # Output file, YUV/RGB
InputFile = "2.264" # H.264/AVC coded bitstream
OutputFile = "2_dec.yuv" # Output file,