SPS:Sequence Paramater Set,又称作序列参数集
PPS:Picture Paramater,图像参数集
一、选择一个.mp4或者.264文件。
二、在码流分析仪软件中打开该文件
profile_idc:标识当前H.264码流的档次
本例中profile_idc=100,说明是High(FRExt)档次
而constraint_set0_flag ~ constraint_set3_flag是在编码的档次方面对码流增加的其他一些额外限制性条件
level_idc:标识当前码流的级别。编码的级别定义了某种条件下的最大视频分辨率、最大视频帧率等参数
本例中level_idc=31,查表知是3.1级。支持720p高清格式,隔行扫描,每秒钟扫描27648000个样本。
if(profile_idc = = 100||profile_idc= = 110||profile_idc = = 122||profile_idc = = 144):
按照要求选择编码器之后,对比特进行解读
chroma_format_idc=1:取样格式4:2:0
seq_parameter_set_id:表示当前的序列参数集的id。通过该id值,图像参数集pps可以引用其代表的sps中的参数
pic_width_in_mbs_minus1:用于计算图像的宽度。单位为宏块个数,图像的实际宽度为:
frame_width = 16 × (pic_width_in_mbs_minus1 + 1);
本例中frame_width = 16×(39+1)=640pixel 共40个宏块
pic_height_in_map_units_minus1:度量视频中一帧图像的高度。加1后为解码帧或场的高度
PicHeightInMapUnits = pic_height_in_map_units_minus1 + 1;
本例中PicHeightInMapUnits=22+1=23
frame_mbs_only_flag:其值为1,每个编码图像都是一个仅包含帧宏块的编码帧;当该标识位为0时,宏块可能为帧编码或场编码;该标识位为1时,所有宏块都采用帧编码。
根据该标识位取值不同,PicHeightInMapUnits的含义不同,为0时表示一场数据按宏块计算的高度,为1时表示一帧数据按宏块计算的高度
direct_8×8_inference_flag:标识位,用于B_Skip、B_Direct模式亮度运动矢量的推导计算。
frame_cropping_flag:标识位,说明是否需要对输出的图像帧进行裁剪;本例中为0,不需要对图像帧进行裁剪。
pic_parameter_set_id:表示当前PPS的id。某个PPS在码流中会被相应的slice引用,slice引用PPS的方式就是在Slice header中保存PPS的id值。该值的取值范围为[0,255]。
seq_parameter_set_id:表示当前PPS所引用的激活的SPS的id。通过这种方式,PPS中也可以取到对应SPS中的参数。该值的取值范围为[0,31]。
entropy_coding_mode_flag:熵编码模式标识,该标识位表示码流中熵编码/解码选择的算法。当该值为0时,选择算法通常为指数哥伦布编码或者CAVLC;当该值为1时,选择算法通常为CABAC。
num_slice_groups_minus1:表示某一帧中slice group的个数。当该值为0时,一帧中所有的slice都属于一个slice group。
chroma_qp_index_offset:用于计算色度分量的量化参数,取值范围为[-12,12]。
本例中色度分量的量化参数为-2
constrained_intra_pred_flag:若该标识为1,表示I宏块在进行帧内预测时只能使用来自I和SI类型宏块的信息;若该标识位0,表示I宏块可以使用来自Inter类型宏块的信息。
本例中constrained_intra_pred_flag=0可以使用来自Inter类型宏块的信息。
从导出的csv信息表中可知,第一个GOP有249帧:
以图像帧号为横坐标、每帧所用比特数为纵坐标:
因无法批量导出QP数据,此处逐一读取了前50帧的QP值作图
帧类型统计如下:
除了第一帧为I帧,其余均为P帧或B帧
从图中的格子分布来看,在画面的变化不大的部分量化步长小,在轮廓处量化步长大
其平均编码比特数为:37.480 QP值为27.328
空间特性:
宏块帧编码类型 | 数量 | 占比 |
---|---|---|
(0)I_N x N | 539 | 58.6% |
(1)I_16 x 16_0_0_0 | 144 | 15.6% |
(2)I_16 x 16_1_0_0 | 33 | 3.6% |
(3)I_16 x 16_2_0_0 | 65 | 7.1% |
(4)I_16 x 16_3_0_0 | 64 | 7.0% |
(5)I_16 x 16_0_1_0 | 24 | 2.6% |
(6)I_16 x 16_1_1_0 | 14 | 2.2% |
(7)I_16 x 16_2_1_0 | 11 | 1.5% |
(8)I_16 x 16_3_1_0 | 1 | 0.1% |
(14)I_16 x 16_1_0_1 | 1 | 0.1% |
(15)I_16 x 16_2_0_1 | 1 | 0.1% |
(16)I_16 x 16_3_0_1 | 1 | 0.1% |
(18)I_16 x 16_1_1_1 | 1 | 0.1% |
(19)I_16 x 16_2_1_1 | 1 | 0.1% |
(20)I_16 x 16_3_1_1 | 1 | 0.1% |
时间特性
可以看到737个的B_Skip块总的比特数为249,而67个B_L0_16x16块的总bits比特数为453。
其平均编码比特数为1.596 QP值为23.333
空间特性
宏块帧编码类型 | 数量 | 占比 |
---|---|---|
(1)B_L0_16 x 16 | 67 | 7.3% |
(2)B_L1_16 x 16 | 109 | 11.85% |
(3)B_Bi_16 x 16 | 2 | 0.22% |
(8)B_L0_L1_16 x 8 | 1 | 0.1% |
(10)B_L1_L0_16 x 8 | 2 | 0.22% |
(14)B_L1_Bi_16 x 8 | 2 | 0.22% |
B_Skip | 737 | 80.11% |
B_Skip:这一宏块的数据内容与前一帧相同,跳过不编码,因此所占用的比特数很小
B帧是双向预测帧,目前显示的位置的编码方式为B_L1_16x16右侧的MB Info可以看到该16x16宏块参考帧在L1中,是后向预测。
空间特性
宏块帧编码类型 | 数量 | 占比 |
---|---|---|
(5)I_16 x 16_0_1_0 | 46 | 5% |
(6)I_16 x 16_1_1_0 | 8 | 0.87% |
(7)I_16 x 16_2_1_0 | 11 | 1.2% |
(8)I_16 x 16_3_1_0 | 5 | 0.5% |
(9)I_16 x 16_0_2_0 | 14 | 1.5% |
(11)I_16 x 16_2_2_0 | 4 | 0.43% |
(13)I_16 x 16_0_0_1 | 3 | 0.33% |
(0)P_L0_16 x 16 | 349 | 37.9% |
(1)P_L0_L0_16 x 8 | 24 | 2.6% |
(2)P_L0_L0_8 x 16 | 30 | 3.3% |
(3)P_8 x 8 | 18 | 2.0% |
P_Skip | 408 | 44.35% |
表中, Pred_L0 表示使用 L0,即前向预测; Pred_L1 表示使用 L1,即后向预测; Bipred 表示双向预测; Direct 表示直接预测模式。预测模式(mb_type,n)预测模式是 mb_type 的函数, n 是宏块的第n个分区。
时间特性:
P帧有帧间的前向预测,帧内预测,无后向预测。