数据压缩实验8-1 H.264的码流分析

一、实验要求:

选择一个.mp4或者.264文件,在码流分析仪软件中打开该文件,从下面几个层次进行分析:

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

二.实验过程:

分析SPS和PPS所包含的主要信息:

SPS:
在这里插入图片描述

PPS(每一帧的编码后数据所依赖的参数保存于图像参数集(PPS)中):
在这里插入图片描述解释:
profile:高分辨率型
在这里插入图片描述
本实验中数值为100,故为High级别的profile

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

chroma_format_idc:色度格式,这里表示4:2:0

num_ref_frames最大参考帧数目:4

pic_width_in_mbs_minus1用于计算图像宽度(亮度分量以像素为单位

pic_height_in_map_units_minus1用于计算图像高度(以 map_unit 为单位):

frame_mbs_only_flag说明宏块的编码方式:1表示所有宏块都采用帧编码,同时也表示一帧数据按宏块计算的高度.

num_slice_groups_minus1某一帧中slice group的个数:该值为0表示一帧中所有的slice都属于一个slice group

deblocking_filter_control_present_flag表示Slice header中是否存在用于去块滤波器控制的信息:该标志位为1表示slice header中包含去块滤波相应的信息

seq_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的上限。计算方法为MaxPicOrderCntLsb = 2^(log2_max_pic_order_cnt_lsb_minus4 + 4)。

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;

pic_height_in_map_units_minus1

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

按照宏块计算的图像实际高度FrameHeightInMbs的计算方法为:

FrameHeightInMbs = ( 2 − frame_mbs_only_flag ) * PicHeightInMapUnits

故FRameHeightInMbs为30

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

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

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

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

因为每个宏块都是1616像素,故宽=16(39+1)=640pixel 高=16*(22+1)= 368pixel

图像原信息:
在这里插入图片描述
则得以验证上述模块的部分信息。

三.参考

[1] https://blog.csdn.net/hdkks/article/details/117994216?spm=1001.2014.3001.5501
[2] https://blog.csdn.net/weixin_44874766/article/details/117993932?spm=1001.2014.3001.5501
[3] h[1].264(官方中文版)文档

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值