目录
一、H.264解码实验
(一)实验过程及任务
1、选择两个264文件进行解码,得到相应的YUV文件
参考JM使用手册,将JM18.6下的ldecod.exe、decoder.cfg与要处理的.264文件放在同一目录下,利用cmd指令指定解码文件与解码得到的yuv文件名,完成解码
2、实验结果
成功将原H.264文件解码为yuv格式文件。
二、H.264编码实验
(一)编码原理
H.264和先前的标准一样,都采用变换编码、基于运动补偿的帧间预测和熵编码的混合框架。不同是增加了帧内预测,变换采用整数变换,熵编码采用自适应的方法。根据我自己的经验,在调试编码器程序之前,一定先把变换和量化的原理弄明白。这样编码参数文件中QP的设置就比较清楚。(变换量化部分邵文娟做过一个不错的总结)。其它的我觉得都可以结合调试程序来学习(边调边学)。例如,具体的预测方式只看原理非常清楚,但一定要结合程序才能彻底弄明白。熵编码更是要结合文献和程序才能弄清楚。
(二)H.264编码器输入参数文件说明
(三)实验过程及任务
1、将上面实验中的两个视频序列编码为.264文件
参考JM使用手册,编码语法如下
(2)编码要求
-
固定码率,以不同的GOP长度及形状编码
GOP=15,2B帧;GOP=12,2B帧,GOP=9,2B帧
GOP=4,1B帧;GOP=12,无B帧;GOP=1,全I帧 -
相同的GOP长度及形状,不同的码率
例:1000kb/s, 800kb/s,400kb/s
- encoder.cfg 文件中的B帧和P帧
参考JM18.6文件:
Examples of usage:
lencod.exe
lencod.exe -h
lencod.exe -d default.cfg
lencod.exe -f curenc1.cfg
lencod.exe -f curenc1.cfg –p InputFile="e:\data\container_qcif_30.yuv"\ -p SourceWidth=176 -p SourceHeight=144
lencod.exe -f curenc1.cfg -p FramesToBeEncoded=30 \ -p QPFirstFrame=28 -p QPRemainingFrame=28 -p QPBPicture=30
(3)码率控制
H.264的码率控制算法建立在如下假设上:即编码图像有一个预先定义好的顺序,也即预先定义好了GOP的组成。该算法可以用来产生适合可用带宽的码流,同时考虑了HRD模型。
该算法主要包括以下三个部分:
- GOP级别的码率控制
- 图像级别的码率控制
- 可选的基本单元级别的码率控制(基本单元被定义为同一帧图像中连续的一组宏块,如果使用了基本单元,则其中的宏块个数最小为1,最大为该帧图像的宏块总数)
- encoder.cfg 文件中的码率控制
(3)实验结果
- PSNR输出
2、用码流分析软件检查所生成的码流中各种编码模式和运动矢量等信息
打开码流分析软件MB Blocks逐帧分析。视频流的第一帧一定是I帧,具体宏块类型(MB Type)有I_4x4,I_8x8,I_16x16。即I帧内只含有其中只含有I型宏块,不含有P帧。
解码实验再编码的264文件分析:
3、率失真曲线
PSNR是"Peak Signal to Noise Ratio"的缩写,即峰值信噪比,是一种评价图像的客观标准。
记录码流的Y-PSNR: