H.264码流分析

  • 选择一个.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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值