目录
一、实验简介
用码流分析仪H264Visa、Elecard StreamEye Tools打开一个.mp4或.264文件,从SPS、PPS、GOP中I、P、B帧的层次进行码流分析。
二、实验步骤及结果
1. SPS、PPS分析
用Elecard StreamEye Tools打开Movie.mp4文件。
从【File】中可知:
该视频的分辨率为640*368,帧率为48,profile为High,Level为3.1级。
(1)序列参数集SPS
参数名称 | 内容 | 说明 |
profile_idc | High | 标识当前H.264码流的profile。 |
level_idc | 31 | 标识当前码流的Level。Level定义了某种条件下的最大视频分辨率、最大视频帧率等参数,码流所遵从的level由level_idc指定。 |
seq_parameter_set_id | 0 | 表示当前的序列参数集的id。通过该id值,PPS可以引用其代表的SPS中的参数。 |
log2_max_frame_num_minus4 | 2 | 用于计算MaxFrameNum的值。MaxFrameNum是frame_num的上限值,frame_num是图像序号的一种表示方法,在帧间编码中常用作一种参考帧标记的手段。 |
pic_order_cnt_type | 0 | 表示解码picture order count(POC)的方法。POC是另一种计量图像序号的方式,与frame_num有着不同的计算方法。 |
num_ref_frames | 16 | 表示参考帧的数目。 |
pic_width_in_mbs_minus1 | 39 | 用于计算图像的宽度。单位为宏块个数,因此图像的实际宽度为:16×(39+1)=640。 |
pic_height_in_map_units_minus1 | 22 | 用于计算图像的高度。单位为宏块个数,因此图像的实际宽度为:16×(22+1)=368。 |
frame_mbs_only_flag | 1 | 标识位,说明宏块的编码方式。当该标识位为0时,宏块可能为帧编码或场编码;该标识位为1时,所有宏块都采用帧编码。 |
(2)图像参数集PPS
参数名称 | 内容 | 说明 |
pic_parameter_set_id | 0 | 表示当前PPS的id。 |
seq_parameter_set_id | 0 | 表示当前PPS所引用的激活的SPS的id。 |
entropy_coding_mode_falg | 1 | 熵编码模式标识,该标识位表示码流中熵编码/解码选择的算法。值为0时,选择左边的算法,通常为指数哥伦布编码或者CAVLC;当该值为1时,选择右边的算法,通常为CABAC。 |
num_slice_groups_minus1 | 0 | 表示某一帧中slice group的个数。当该值为0时,一帧中所有的slice都属于一个slice group。 |
weighted_pred_flag | 1 | 标识位,表示在P/SP slice中是否开启加权预测。 |
weighted_bipred_idc | 2 | 表示在B Slice中加权预测的方法,取值范围为[0,2]。0表示默认加权预测,1表示显式加权预测,2表示隐式加权预测。 |
chroma_qp_index_offset | -2 | 用于计算色度分量的量化参数,取值范围为[-12,12]。 |
deblocking_filter_control_present_flag | 1 | 标识位,用于表示Slice header中是否存在用于去块滤波器控制的信息。当该标志位为1时,slice header中包含去块滤波相应的信息;当该标识位为0时,slice header中没有相应的信息。 |
constrained_intra_pred_flag | 0 | 若该标识为1,表示I宏块在进行帧内预测时只能使用来自I和SI类型宏块的信息;若该标识位0,表示I宏块可以使用来自Inter类型宏块的信息。 |
2. GOP分析
(1)图像帧类型与所用比特数分析
由图可知:
红色为I帧,蓝色为P帧,绿色为B帧;该视频序列中每个GOP中有250帧。
Number in Stream order与Number in Display order不同,前者是解码顺序,后者是显示顺序;
橙色水平线表示该视频序列的平均比特数,其中I帧所用的编码比特数最多,其次是P帧,B帧所
用的比特数最少。
以图像帧号为横坐标、每帧所用比特数为纵坐标画出曲线图:
(2)I帧分析
用H264Visa打开Movie.mp4文件,分析第一个I帧。
可以看出此I帧中的所有宏块都是I类型的,大小有16×16、8×8、4×4三种。
在图像突变处,宏块划分得更细,宏块较小;在图像平坦处,宏块较大。
(3)P帧分析
可以看出此P帧中的宏块大部分为16×16和16×8的块,P型宏块占多数,少数为I型宏块;
在前后图像变化较大的区域,该宏块在之前的帧中找不到相似的宏块,因此使用I帧编码方式。
(4)B帧分析
可以看出此B帧中的宏块都为B型宏块,且大部分为B_skip。