码流分析
实验目的:
- 分析SPS和PPS里都包含哪些主要的信息,给出参数值。
- 以一个GOP为例,分析如下信息:
每个图像帧的类型及所用的编码比特数、QP值;并以图像帧号为横坐标、每帧所用比特数为纵坐标画出曲线图;以图像帧号为横坐标、每帧所用QP为纵坐标画出曲线图。 - 以第一个I帧作为分析对象,基于该帧图像的空间特性,分析每个宏块所采用的编码类型及其比例。
- 以第一个P帧作为分析对象,基于该帧图像的空间和时间特性,分析每个宏块所采用的编码类型及其比例。
- 以某一个B帧作为分析对象,基于该帧图像的空间和时间特性,分析每个宏块所采用的编码类型及其比例。
实验过程
- 分析SPS和PPS里都包含哪些主要的信息,给出参数值。
使用H264Visa码流分析软件打开老师提供的demo.264
SPS:
PPS:
从图中可以得到一些视频数据,如:
- num_ref_frames(最大参考帧数目):2
- pic_width_in_mbs_minus1(计算图像宽度):frame_width = 16 × (53 + 1) = 864(以像素为单位)
- pic_height_in_map_units_minus1(计算图像高度):PicHeightInMapUnits = 29 + 1 = 30(以 map_unit 为单位)
- frame_mbs_only_flag说明宏块的编码方式:1表示所有宏块都采用帧编码,同时也表示一帧数据按宏块计算的高度,即按照宏块计算的图像实际高度FrameHeightInMbs
= ( 2 − 1 ) * 30 = 30,frame_height = 16 × 54 = 864- num_slice_groups_minus1某一帧中slice group的个数:该值为0表示一帧中所有的slice都属于一个slice group
- deblocking_filter_control_present_flag表示Slice header中是否存在用于去块滤波器控制的信息:该标志位为1表示slice header中包含去块滤波相应的信息
图像的长宽可得到验证
- 以一个GOP为例,分析如下信息: 每个图像帧的类型及所用的编码比特数、QP值;并以图像帧号为横坐标、每帧所用比特数为纵坐标画出曲线图;以图像帧号为横坐标、每帧所用QP为纵坐标画出曲线图。
可看出,第一个GOP长度为58,导出数据如下
以图像帧号为横坐标、每帧所用比特数为纵坐标画出曲线图如下:
以图像帧号为横坐标、每帧所用QP为纵坐标画出曲线图如下:
- 以第一个I帧作为分析对象,基于该帧图像的空间特性,分析每个宏块所采用的编码类型及其比例。
经统计得到数据
- 以第一个P帧作为分析对象,基于该帧图像的空间和时间特性,分析每个宏块所采用的编码类型及其比例。
统计结果如下:
(该例无B帧,故无法分析,但原理一致
程序分析
实验要求
实验过程
1、解码
在Idecod中修改命令参数如下
对highway_qcif.264进行处理:
得到输出:
同理对demo.264进行处理,得到输出:
2、编码
(1)固定码率(5Mbps),不同的GOP长度及形状:
在Iencod中修改命令参数如下:
两文件大小如下:
demo:864x480(前得)
highway_qcif:176x144(用H264Visa可得到)
以demo文件为例程序中修改以下参数
得到输出出现问题,暂未解决。
优先级:IDRPeriod > IntraPeriod;IntraPeriod > NumberBFrames;IDRPeriod > PrimaryGOPLength。
参考同学的输出结果得到结论:
码率一定的情况下,图像质量从高到低依次是:GOP=12,0B帧 > GOP=15,2B帧 > GOP=12,2B帧 > GOP=9,2B帧 > GOP=4,1B帧 > GOP=1,全I帧。
(2)固定GOP长度及形状(GOP=15、2B帧),不同码率:
以highway_qcif.yuv为例,不同码率下Y分量的PSNR如下:
以码率为横坐标,以PSNR为纵坐标,生成率失真曲线。
可以看出,随着比特率的升高,编码后的图像质量也有所提升。