H.264码流分析

码流分析

使用码流分析软件H264Visa对MP4文件进行分析

实验要求

  1. 分析SPS和PPS里都包含哪些主要的信息,给出参数值。(例如分辨率、帧率、GOP结构等等)
  2. 以一个GOP为例,分析如下信息:
    1. 每个图像帧的类型及所用的编码比特数、QP值;并以图像帧号为横坐标、每帧所用比特数为纵坐标画出曲线图;以图像帧号为横坐标、每帧所用QP为纵坐标画出曲线图。
    2. 以第一个I帧作为分析对象,基于该帧图像的空间特性,分析每个宏块所采用的编码类型及其比例。
    3. 以第一个P帧作为分析对象,基于该帧图像的空间和时间特性,分析每个宏块所采用的编码类型及其比例。
    4. 以某一个B帧作为分析对象,基于该帧图像的空间和时间特性,分析每个宏块所采用的编码类型及其比例。

实验内容

H.264码流分析_第1张图片

1.分析SPS和PPS里都包含哪些主要的信息,给出参数值

(1)SPS

SPS为Sequence parameter set,即序列参数集

H.264码流分析_第2张图片

1.profile_idc

标识当前H.264码流的profile。H.264中定义了三种常用的档次profile:
基准档次:baseline profile;
主要档次:main profile;
扩展档次:extended profile;

当前profile_idc为100,格式为高级

H.264码流分析_第3张图片

2.level_idc

标识当前码流的Level。编码的Level定义了某种条件下的最大视频分辨率、最大视频帧率等参数,码流所遵从的level由level_idc指定。

当前level_idc为31

3.seq_parameter_set_id

表示当前的序列参数集的id。通过该id值,图像参数集pps可以引用其代表的sps中的参数。seq_parameter_set_id 的值应在 0-31 的范围内,包括 0 和 31。

当前seq_parameter_set_id为0

4.chroma_format_idc

与亮度取样对应的色度取样。chroma_format_idc 的值应该在 0到 3 的范围内(包括 0 和 3)。当 chroma_format_idc 不存在时,应推断其值为 1( 4:2:0 的色度格式)。

当前chroma_format_idc为1,为4:2:0色度格式

4.log2_max_frame_num_minus4

用于计算MaxFrameNum的值。

MaxFrameNum=2 ^{_{}^{log2_max_frame_num_minus4+4}}

MaxFrameNum是frame_num的上限值,frame_num是图像序号的一种表示方法,在帧间编码中常用作一种参考帧标记的手段。

当前log2_max_frame_num_minus4为2

 5.pic_order_cnt_type

表示解码picture order count(POC)的方法。POC是另一种计量图像序号的方式,与frame_num有着不同的计算方法。

当前pic_order_cnt_type为0

6. num_ref_frames

用于表示参考帧的最大数目。

当前num_ref_frames为16

7.gaps_in_frame_num_value_allowed_flag
标识位,说明frame_num中是否允许不连续的值。

当前gaps_in_frame_num_value_allowed_flag为0

8.pic_width_in_mbs_minus1
用于计算图像的宽度,单位为宏块个数。

当前pic_width_in_mbs_minus1为39,frame_width=16×(39+1)=640

9.pic_height_in_map_units_minus1
使用PicHeightInMapUnits来度量视频中一帧图像的高度。

当前pic_height_in_map_units_minus1为22,图像高PicHeightInMapUnits=16×(22+1)=365

10. frame_mbs_only_flag
标识位,说明宏块的编码方式。当该标识位为0时,宏块可能为帧编码或场编码;该标识位为1时,所有宏块都采用帧编码。根据该标识位取值不同,PicHeightInMapUnits的含义也不同,为0时表示一场数据按宏块计算的高度,为1时表示一帧数据按宏块计算的高度。

当前frame_mbs_only_flag为1,图像实际高度为frame_height=16×23=368

11.direct_8x8_inference_flag
标识位,用于B_Skip、B_Direct模式运动矢量的推导计算。

当前direct_8x8_inference_flag为1

12. frame_cropping_flag
标识位,说明是否需要对输出的图像帧进行裁剪。

当前frame_cropping_flag为0,不存在帧剪切偏移参数

13.ui_parameters_present_flag
标识位,说明SPS中是否存在VUI信息。

当前ui_parameters_present_flag为1,表示存在 vui_parameters( ) 语法结构

帧率=time_scale/num_units_in_tick,本文件的帧率为96Hz

(2)PPS

PPS为Picture Parameter Set,即图像参数集

H.264码流分析_第4张图片

1.pic_parameter_set_id

标识在条带头中提到的图像参数集。变量 pic_parameter_set_id 的值应该在 0 到 255 的范围内(包括 0 和 255)。某个PPS在码流中会被相应的slice引用,slice引用PPS的方式就是在Slice header中保存PPS的id值。

当前pic_parameter_set_id为0

2.seq_parameter_set_id

表示当前PPS所引用的激活的SPS的id。通过这种方式,PPS中也可以取到对应SPS中的参数。 变量 seq_parameter_set_id 的值应该在 0 到 31 的范围内(包括 0 和 31)

当前seq_parameter_set_id为0

3.entropy_coding_mode_flag

用于选取语法元素的熵编码方式,在语法表中由两个标识符代表,具体如下:

如果entropy_coding_mode_flag 等于0,那么采用Exp-Golomb编码或CAVLC;如果entropy_coding_mode_flag 等于1,就采用CABAC。

entropy_coding_mode_flag为1

4.pic_order_present_flag

等于 1 表示与图像顺序数有关的语法元素将出现于条带头中,等于 0 表示条带头中不会出现与图像顺序数有关的语法元素。

pic_order_present_flag为0,条带头中不会出现与图像顺序数有关的语法元素

5.num_slice_groups_minus1

表示一个图像中的条带组数(slice group)。 num_slice_groups_minus1 等于 0 时,图像中所有的条带属于同一个条带组。

num_slice_groups_minus1为0,只有一个slice group

6.num_ref_idx_l0_active_minus1//num_ref_idx_l1_active_minus1

num_ref_idx_l0_active_minus1 表示参考图像列表 0 的最大参考索引号,该索引号将用来在一幅图像中num_ref_idx_active_override_flag 等于 0 的条带使用列表 0 预测时,解码该图像的这些条带。

num_ref_idx_l1_active_minus1 与 num_ref_idx_l0_active_minus1 具有同样的定义,只是分别用 11 和列表 1取代 10 和列表 0。

当前num_ref_idx_l0_active_minus1为15,num_ref_idx_l1_active_minus1为0

7.weighted_pred_flag

等于 0 表示加权的预测不应用于 P 和 SP 条带。weighted_pred_flag 等于 1 表示在 P 和 SP条带中应使用加权的预测。

当前weighted_pred_flag为1

8.weighted_bipred_idc

等于 0 表示 B 条带应该采用默认的加权预测。weighted_bipred_idc 等于 1 表示 B 条带应该 采 用具体指 明 的 加 权 预 测 。 weighted_bipred_idc 等 于 2 表 示 B 条 带 应 该 采 用 隐 含 的 加 权 预 测 。

当前weighted_bipred_idc为2

9.pic_init_qp_minus26//pic_init_qs_minus26

表示初始的量化参数。实际的量化参数由该参数、slice header中的slice_qp_delta/slice_qs_delta计算得到。

当前pic_init_qp_minus26为0,pic_init_qs_minus26为0

10.chroma_qp_index_offset

用于计算色度分量的量化参数,取值范围为[-12,12]。

当前chroma_qp_index_offset为-2

11.deblocking_filter_control_present_flag

等于 1 表示控制去块效应滤波器的特征的一组语法元素将出现在条带头中,等于 0 表示控制去块效应滤波器的特征的一组语法元素不会出现在条带头中。

当前deblocking_filter_control_present_flag为1

12.constrained_intra_pred_flag

等于 0 表示帧内预测允许使用残余数据,且使用帧内宏块预测模式编码的宏块 的预测可以使用帧间宏块预测模式编码的相邻宏块的解码样值;等于 1 表示受限制的帧内预测,在这种情况下,使用帧内宏块预测模式编码的宏块的预测仅使用残余数据和来自 I 或 SI 宏块类型的解码样值。

当前constrained_intra_pred_flag为0

13.redundant_pic_cnt_present_flag

标识位,用于表示Slice header中是否存在redundant_pic_cnt语法元素。当该标志位为1时,slice header中包含redundant_pic_cnt;当该标识位为0时,slice header中没有相应的信息。

当前redundant_pic_cnt_present_flag为0

14.transform_8x8_mode_flag

等 于 1 表 示 8x8 变 换 解 码过程可能正 在使用,等于 0 表示未使用 8x8 变换解码过程。当 transform_8x8_mode_flag 不存在时,默认其值为 0。

当前transform_8x8_mode_flag为1

15.pic_scaling_matrix_present_flag

等于 1 表示存在用来修改在序列参数集中指定的缩放比例列表的参数,等于 0 表示用于该图像中的缩放比例列表应等于由序列参数集规定的。当 pic_scaling_matrix_present_flag 不存在时,默认其值为 0。

当前pic_scaling_matrix_present_flag为0

2.分析一个GOP

GOP(Group of Pictures,图像组)是将一个图像序列中连续的几个图像组成的一个小组,是对编码后的视频码流进行编辑、存取和压缩编码的基本单元,包含不同种类编码的帧。

使用Elecard StreamEye Tools

红色表示I帧 蓝色表示P帧 绿色表示B帧

H.264码流分析_第5张图片

 I帧,第二个DOP,第一个GOP长度为30帧

H.264码流分析_第6张图片

第三个GOP,第二个GOP长度为30帧

保存为csv文件

H.264码流分析_第7张图片

 绘制图表 

H.264码流分析_第8张图片

I帧

 H.264码流分析_第9张图片

 P帧

 H.264码流分析_第10张图片

 蓝点宏块

H.264码流分析_第11张图片

 黄点宏块,说明该块的预测误差是0

 H.264码流分析_第12张图片

 红色宏块

B帧

 

H.264码流分析_第13张图片

 蓝色宏块

H.264码流分析_第14张图片

 黄色宏块,说明该块的预测误差是0

H.264码流分析_第15张图片

 红色宏块

H.264码流分析_第16张图片

绿色宏块

参考:

[1]数据压缩11 | 实验7 | MP4及H.264码流分析_月婵婵的博客-CSDN博客

[2]h264 : 关于level_idc和Profile_IDC的解释_newarow的博客-CSDN博客

你可能感兴趣的:(数据压缩作业,音视频)