H.264码流分析仪

目录

一、实验内容

二、实验结果 

 1. SPS

profile_idc

level_idc

eq_parameter_set_id

log2_max_frame_num_minus4

pic_order_cnt_type

log2_max_pic_order_cnt_lsb_minus4

max_num_ref_frames

gaps_in_frame_num_value_allowed_flag

pic_width_in_mbs_minus1

pic_height_in_map_units_minus1

frame_mbs_only_flag

mb_adaptive_frame_field_flag

direct_8x8_inference_flag

frame_cropping_flag

vui_parameters_present_flag

2. PPS

pic_parameter_set_id

seq_parameter_set_id

entropy_coding_mode_flag

pic_order_present_flag

num_slice_groups_minus1

num_ref_idx_l0_active_minus1、num_ref_idx_l1_active_minus1

weighted_pred_flag

weighted_bipred_idc

pic_init_qp_minus26、pic_init_qs_minus26

chroma_qp_index_offset

deblocking_filter_control_present_flag

constrained_intra_pred_flag

redundant_pic_cnt_present_flag

transform_8x8_mode_flag

pic_scaling_matrix_present_flag

3. GOP结构

每帧编码比特数

4. I / P / B 帧分析

 I帧

P帧 

 B帧

一、实验内容

1、选择一个.mp4或者.264文件。
2、在码流分析仪软件中打开该文件,从几个层次进行分析:
(1)分析SPS和PPS里都包含哪些主要的信息,给出参数值。(例如分辨率、帧率、GOP结构等等)
(2)以一个GOP为例,分析如下信息:

  • 每个图像帧的类型及所用的编码比特数、QP值;并以图像帧号为横坐标、每帧所用比特数为纵坐标画出曲线图;以图像帧号为横坐标、每帧所用QP为纵坐标画出曲线图。
  • 以第一个I帧作为分析对象,基于该帧图像的空间特性,分析每个宏块所采用的编码类型及其比例。
  • 以第一个P帧作为分析对象,基于该帧图像的空间和时间特性,分析每个宏块所采用的编码类型及其比例。
  • 以某一个B帧作为分析对象,基于该帧图像的空间和时间特性,分析每个宏块所采用的编码类型及其比例。

二、实验结果 

 1. SPS

PS即Sequence Paramater Set,又称作序列参数集。SPS中保存了一组编码视频序列(Coded video sequence)的全局参数。

本次实验所用视频的SPS参数如下:

 

profile_idc

标识当前H.264码流的profile。我们知道,H.264中定义了三种常用的档次profile:

基准档次:baseline profile;

主要档次:main profile;

扩展档次:extended profile;

在H.264的SPS中,第一个字节表示profile_idc,根据profile_idc的值可以确定码流符合哪一种档次。根据新的标准规定,我们的实验码流中,profile_idc =100,说明码流的档次为High。

level_idc

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

当前码流中,level_idc = 31,因此码流的级别为3.1,可看出支持720p

eq_parameter_set_id

表示当前的序列参数集的id。通过该id值,图像参数集pps可以引用其代表的sps中的参数。

log2_max_frame_num_minus4

用于计算MaxFrameNum的值。计算公式为MaxFrameNum = 2^(log2_max_frame_num_minus4 +4)。MaxFrameNum是frame_num的上限值,frame_num是图像序号的一种表示方法,在帧间编码中常用作一种参考帧标记的手段。

pic_order_cnt_type

表示解码picture order count(POC)的方法。POC是另一种计量图像序号的方式,与frame_num有着不同的计算方法。该语法元素的取值为0、1或2。

log2_max_pic_order_cnt_lsb_minus4

用于计算MaxPicOrderCntLsb的值,该值表示POC的上限。

max_num_ref_frames

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

gaps_in_frame_num_value_allowed_flag

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

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

frame_mbs_only_flag

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

按照宏块计算的图像实际高度FrameHeightInMbs的计算方法为:
FrameHeightInMbs = ( 2 − frame_mbs_only_flag ) * PicHeightInMapUnits

mb_adaptive_frame_field_flag

标识位,说明是否采用了宏块级的帧场自适应编码。当该标识位为0时,不存在帧编码和场编码之间的切换;当标识位为1时,宏块可能在帧编码和场编码模式之间进行选择。

direct_8x8_inference_flag

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

frame_cropping_flag

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

vui_parameters_present_flag

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

2. PPS

PPS是指Picture Parameter Set,即图像参数集。

 

pic_parameter_set_id

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

seq_parameter_set_id

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

entropy_coding_mode_flag

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

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

pic_order_present_flag

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

num_slice_groups_minus1

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

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。

weighted_pred_flag

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

weighted_bipred_idc

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

pic_init_qp_minus26、pic_init_qs_minus26

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

chroma_qp_index_offset

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

deblocking_filter_control_present_flag

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

constrained_intra_pred_flag

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

redundant_pic_cnt_present_flag

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

transform_8x8_mode_flag

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

pic_scaling_matrix_present_flag

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

3. GOP结构

GOP(Group of Pictures,图像组)是将一个图像序列中连续的几个图像组成的一个小组,是对编码后的视频码流进行编辑、存取和压缩编码的基本单元,包含不同种类编码的帧。增大GOP或提高GOP中P/B帧的占比,可以提高压缩比,降低码率。因此一般而言,在码率一定的条件下,GOP越大,图像质量越好(P/B帧的比重更大);在图像质量一定的条件下,GOP越大,码率越低。

以如下GOP为例: 

上图是第二个GOP的I帧,也就是第二个GOP的起始帧。

 上图是第三个GOP的I帧,也就是第三个GOP的起始帧。由此两个I帧的序号得到,GOP的长度为30。

每帧编码比特数

将一个GOP内每个帧的编码比特数保存成.cvs文件,如下所示:其中可以看出每帧的类型(I / B / P 帧)和size。

 以图像帧号为横坐标,每帧所用比特数为纵坐标画出曲线图:

 每帧QP值

 由上图可知,I帧的QP值比较小,也就是说明量化比较精细,B帧和P帧的量化比较粗糙

4. I / P / B 帧分析

 I帧

 可以看到该帧全部为Intra类型,也就是帧内编码帧。编码时多采用8 × 8 、16 × 16 的宏块,细节部分也有采用4 × 4 的宏块。

P帧 

 可以看到该帧内有帧内编码帧,即粉红色区域;也有帧间编码帧,即绿色区域。

 B帧

 查看某一个宏块的信息:

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值