【数据压缩实验7】H.264文件码流分析

实验要求

1.选择一个.mp4或者.264文件。
2.在码流分析仪软件中打开该文件,从几个层次进行分析:
(1)分析SPS和PPS里都包含哪些主要的信息,给出参数值。(例如分辨率、帧率、GOP结构等等)
(2) 以一个GOP为例,分析如下信息:
 每个图像帧的类型及所用的编码比特数、QP值;并以图像帧号为横坐标、每帧所用比特数为纵坐标画出曲线图;以图像帧号为横坐标、每帧所用QP为纵坐标画出曲线图。
 以第一个I帧作为分析对象,基于该帧图像的空间特性,分析每个宏块所采用的编码类型及其比例。
 以第一个P帧作为分析对象,基于该帧图像的空间和时间特性,分析每个宏块所采用的编码类型及其比例。
 以某一个B帧作为分析对象,基于该帧图像的空间和时间特性,分析每个宏块所采用的编码类型及其比例。

实验过程

一、SPS和PPS

SPS:
在这里插入图片描述
(1) profile_idc:标识当前H.264码流的profile。
(根据profile_idc的值可以确定码流符合哪一种档次。判断规律为:
profile_idc = 66 → baseline profile;
profile_idc = 77 → main profile;
profile_idc = 88 → extended profile;)

这次实验码流中,profile_idc = 77,因此码流的档次为main profile.

(2) level_idc:标识当前码流的Level。编码的Level定义了某种条件下的最大视频分辨率、最大视频帧率等参数。

这次实验码流中,level_idc = 30,因此码流的级别为3.

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

(4) log2_max_frame_num_minus4:用于计算MaxFrameNum的值。

(5) pic_order_cnt_type:表示解码picture order count(POC)的方法。POC是一种计量图像序号的方式,该语法元素的取值为0、1或2。

(6) log2_max_pic_order_cnt_lsb_minus4:用于计算MaxPicOrderCntLsb的值,该值表示POC的上限。

(7) num_ref_frames:用于表示参考帧的最大数目。

(8) gaps_in_frame_num_value_allowed_flag:标识位,说明frame_num中是否允许不连续的值。

(9) pic_width_in_mbs_minus1:用于计算图像的宽度,单位为宏块个数。

这次实验图像的实际宽度为:frame_width = 16 × (22+1)=368。

(10) pic_height_in_map_units_minus1:用于度量视频中一帧图像的高度。

这次实验图像的实际高度为:16 × (29+1)=480。

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

这次实验的标示位为1,所以PicHeightInMapUnits表示一帧数据按宏块计算的高度。

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

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

(14) vui_parameters_present_flag:标识位,说明SPS中是否存在VUI信息。

PPS:
在这里插入图片描述
(1) pic_parameter_set_id:表示当前PPS的id。

(2) seq_parameter_set_id:表示当前PPS所引用的激活的SPS的id。

(3) entropy_coding_mode_flag:熵编码模式标识,该标识位表示码流中熵编码/解码选择的算法。

(4) num_slice_groups_minus1:表示某一帧中slice group的个数。当该值为0时,一帧中所有的slice都属于一个slice group。

这次实验的GOP结构:
num_slice_groupes_minus1=0,说明该图像帧中只有一个slice group。

(5) num_ref_idx_l0_default_active_minus1、num_ref_idx_l1_default_active_minus1:表示当Slice Header中的num_ref_idx_active_override_flag标识位为0时,P/SP/B slice的语法元素num_ref_idx_l0_active_minus1和num_ref_idx_l1_active_minus1的默认值。

(6) weighted_pred_flag:标识位,表示在P/SP slice中是否开启加权预测。

(7) weighted_bipred_idc:表示在B Slice中加权预测的方法,取值范围为[0,2]。0表示默认加权预测,1表示显式加权预测,2表示隐式加权预测。

(8) pic_init_qp_minus26和pic_init_qs_minus26:表示初始的量化参数。实际的量化参数由该参数、slice header中的slice_qp_delta/slice_qs_delta计算得到。

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

(10) deblocking_filter_control_present_flag:标识位,用于表示Slice header中是否存在用于去块滤波器控制的信息。当该标志位为1时,slice header中包含去块滤波相应的信息;当该标识位为0时,slice header中没有相应的信息。

(11) constrained_intra_pred_flag:若该标识为1,表示I宏块在进行帧内预测时只能使用来自I和SI类型宏块的信息;若该标识位0,表示I宏块可以使用来自Inter类型宏块的信息。

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

二、以一个GOP为例,分析信息

在这里插入图片描述
如图,第一个GOP的长度为31

导出数据:
在这里插入图片描述
以图像帧号为横坐标、每帧所用比特数为纵坐标画出曲线图:
在这里插入图片描述
第一个I帧:
在这里插入图片描述
比例:
在这里插入图片描述
I帧的编码类型为帧内预测编码,该帧每个宏块所用的平均编码比特数为60.546bits,QP(量化参数)值为22.442,采用两种类型的宏块进行量化。

第一个P帧:
在这里插入图片描述
比例:
在这里插入图片描述

P帧的编码类型为前向预测和帧内预测编码,该帧每个宏块所用的平均编码比特数为23.794bits,QP(量化参数)值为19.032,采用七种类型的宏块进行量化。

某一个B帧:
在这里插入图片描述
比例:
在这里插入图片描述
B帧的编码类型为前向预测和后向预测编码,该帧每个宏块所用的平均编码比特数为6.884bits,QP(量化参数)值为23.568,采用六种类型的宏块进行量化。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值