- 选择一个.mp4或者.264文件。
- 在码流分析仪软件中打开该文件,从几个层次进行分析:
分析SPS和PPS里都包含哪些主要的信息,给出参数值。(例如分辨率、帧率、GOP结构等等)
图像分辨率:640×368;熵编码类型:CABAC
最大帧率:96
具有IDR帧,即本序列采用闭合GOP
SPS:
(1)profile_idc:
标识当前H.264码流的profile。H.264中定义了三种常用的档次profile:
基准档次:baseline profile ---> profile_idc=66
主要档次:main profile ---> profile_idc=77
扩展档次:extended profile ---> profile_idc=88
在新版的标准中,还包括了High、High 10、High 4:2:2、High 4:4:4、High 10 Intra、High
4:2:2 Intra、High 4:4:4 Intra、CAVLC 4:4:4 Intra等,每一种都由不同的profile_idc表示。
本次实验中码流的profile_idc=100,码流档次为High
(2)level_idc:
标识当前码流的level。编码的level定义了某种条件下的最大视频分辨率、最大视频帧率等参数,码流所遵从的level由level_idc指定
本次实验中码流的level_idc=31, 码流级别为3.1
(3)seq_parameter_set_id:
表示当前的序列集参数的id。通过该id值,图像参数集PPS可以引用其代表的SPS中的参数。
本次实验中码流的seq_parameter_set_id=0,序列参数集的id=0
(4)pic_width_in_mbs_minus1:
用于计算图像的宽度。单位为宏块个数,因此图像的实际宽度为:frame_width = 16 × (pic_width_in_mbs_minus1 + 1);
pic_height_in_map_units_minus1:
使用PicHeightInMapUnits来度量视频中一帧图像的高度。PicHeightInMapUnits并非图像明确的以像素或宏块为单位的高度,而需要考虑该宏块是帧编码或场编码。PicHeightInMapUnits的计算方式为:
PicHeightInMapUnits =pic_height_in_map_units_minus1 + 1;
本次实验码流中的pic_width_in_mbs_minus1=39
,pic_height_in_map_units_minus1=22
图像分辨率:宽(39+1)*16=640;高(22+1)*16=368
宏块个数:40×23=920
PPS:
(1)entropy_coding_mode_flag
熵编码模式标识,该标识位表示码流中熵编码/解码选择的算法。当该值为0时,选择左边的算法,通常为指数哥伦布编码或者CAVLC;当该值为1时,选择右边的算法,通常为CABAC。
本次实验码流中的entropy_coding_mode_flag=1,选择CABAC。
(2)num_slice_groups_minus1
表示某一帧中slice group的个数。当该值为0时,一帧中所有的slice都属于一个slice group。
(8)chroma_qp_index_offset
用于计算色度分量的量化参数,取值范围为[-12,12]
(9)deblocking_filter_control_present_flag
标识位,用于表示Slice header中是否存在用于去块滤波器控制的信息。当该标志位为1时,slice header中包含去块滤波相应的信息;当该标识位为0时,slice header中没有相应的信息。
本次实验码流中的deblocking_filter_control_present_flag=1,slice header中包含去块滤波器响应的信息。
以一个GOP为例,分析如下信息:
1.每个图像帧的类型及所用的编码比特数、QP值;并以图像帧号为横坐标、每帧所用比特数为纵坐标画出曲线图;以图像帧号为横坐标、每帧所用QP为纵坐标画出曲线图。
由导出的csv文件可看出该序列第一个GOP长度为250,绘制每帧bit数曲线图如下
2.以第一个I帧作为分析对象,基于该帧图像的空间特性,分析每个宏块所采用的编码类型及其所占比例。
该帧作为第一个I帧,所有宏块均为帧内编码宏块(红色点)
可以看到人物与背景边缘部分的宏块颜色有所区别,人物头发处具有细节纹理的宏块颜色也不同,即说明H.264对于高频部分使用小宏块更精细的搜索,低频区域使用大宏块。
如:
背景区域多采用Intra(I_16x16_1_0_0)类型宏块;
头发处多采用Intra(I_8x8)类型宏块;
人物与背景边缘且为头发处多采用Intra(I_4x4)类型宏块;
使用visa打开:
可以看出每个宏块的平均编码比特数为37.480bits,量化参数QP值为27.328;
计算不同宏块占比:
MB type 数量 比例
I_N*N 539 0.586
I_16*16_0_0_0 144 0.157
I_16*16_1_0_0 33 0.036
I_16*16_2_0_0 65 0.071
I_16*16_3_0_0 64 0.070
I_16*16_0_1_0 24 0.026
I_16*16_1_1_0 20 0.022
I_16*16_2_1_0 14 0.015
I_16*16_3_1_0 11 0.012
I_16*16_1_0_1 1 0.001
I_16*16_2_0_1 1 0.001
I_16*16_3_0_1 1 0.001
I_16*16_1_1_1 1 0.001
I_16*16_2_1_1 1 0.001
I_16*16_3_1_1 1 0.001
3.以第一个P帧作为分析对象,基于该帧图像的空间和时间特性,分析每个宏块所采用的编码类型及其所占比例。
可以看到多为黄色的Inter(B_Skip)宏块,即表示与前一帧相同,跳过不编码;
蓝色宏块使用双向预测编码;蓝色宏块附近存在绿色运动矢量,表示后向预测;红色线表示前向预测
用visa打开:
可以看出每个宏块的平均编码比特数为10.870bits,量化参数QP值为30.558;
计算得出占比:
MB type 数量 比例
I_16*16_0_1_0 46 0.505
I_16*16_1_1_0 8 0.088
I_16*16_2_1_0 11 0.121
I_16*16_3_1_0 5 0.055
I_16*16_0_2_0 14 0.154
I_16*16_2_2_0 4 0.044
I_16*16_0_0_1 3 0.033
P_L0_16*16 349 0.421
P_L0_L0_16*8 24 0.029
P_L0_L0_8*16 30 0.036
P_8*8 18 0.022
P_Skip 408 0.492
4.以某一个B帧作为分析对象,基于该帧图像的空间和时间特性,分析每个宏块所采用的编码类型及其所占比例。
包含很多黄色的Inter(B_Skip)宏块,即表示与前一帧相同,跳过不编码;
包含Inter(B_L1_16x16)宏块和Inter(B_L0_16x16)宏块
用visa打开:
可以看出每个宏块的平均编码比特数为1.596bits,量化参数QP值为23.333;