H.264及编解码调试

本文介绍了H.264编码的实验目的、原理和步骤,通过对SPS和PPS的分析,理解视频的分辨率、帧率等信息,并通过实例分析了I、P帧的编码类型和比特数。实验还涉及H.264的编码器结构和GOP结构,以及如何进行视频的解码和编码操作。
摘要由CSDN通过智能技术生成

一、实验目的

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

二、实验原理

1. H.264的特点
压缩比高:在同等图像质量的条件下,采用H.264技术压缩后的码流,数据量只有MPEG-2的1/2;
容错率高:H.264码流具有较强的抗误码特性,可适应丢包率高、干扰严重的信道,如IP和无线网络;
网络适应性强:H.264提供了网络适应层,使得H.264的文件能容易地在不同网络上传输;
计算复杂度高:H.264使用较高的计算复杂度,换取优越的性能,其复杂度相当于MPEG-2的2—3倍。
2. H.264编解码器
H.264编码器结构与前代MPEG-2标准差别不大,均主要采用变换编码、DPCM与运动补偿的混合结构。编解码器的结构如图所示。
在这里插入图片描述

在这里插入图片描述

三、实验步骤

文件分析

本实验分析的是demo.264文件
1.序列参数集(Sequence parameter set, SPS)
在这里插入图片描述
66<-profile_idc:基准档次baseline profile
1<-constraint_set0_flag,1<-constraint_set1_flag
31<-level_idc:标识当前码流的Level。编码的Level定义了某种条件下的最大视频分辨率、最大视频帧率等参数,码流所遵从的level由level_idc指定。
0<-seq_parameter_set_id:当前的序列参数集的id。通过该id值,图像参数集pps可以引用其代表的sps中的参数。
4<-log2_max_frame_num_minus4:计算frame_num的上限值MaxFrameNum=2(log2_max_frame_num_minus4+4),这里为28。
2<-pic_order_cnt_type:表示解码picture order count(POC)的方法。
2<-num_ref_frames:参考帧的最大数目为2
53<-pic_width_in_mbs_minus1:计算图像的宽度,单位为宏块个数。Frame_width=(pic_width_in_mbs_minus1+1),这里为16*(53+1)=864
29<-pic_height_in_map_units_minus1:度量视频中一帧图像的高度,PicHeightInMapUnits=16*(pic_height_in_map_units_minus1+1),这里为16*(29+1)=480
1<-frame_mbs_only_flag:说明宏块的编码方式的标识位,为1时,所有宏块都采用帧编码,同时PicHeightInMapUnits表示一帧数据按宏块计算的高度。FrameHeightInMbs=(2-frame_mbs_only_flag)PicHeightInMapUnits,这里图像实际的高度为:frame-height=130=30
1<-direct_8x8_inference_flag:标识位,用于B_Skip、B_Direct模式运动矢量的推导计算。
1<-frame_cropping_flag:标识位,说明需要对输出的图像帧进行裁剪。
1<-vui_parameters_present_flag:标识位,说明SPS中存在VUI信息。
2.图像参数集(Picture parameter set,PPS):

在这里插入图片描述
pic_parameter_set_id:表示当前PPS的id。某个PPS在码流中会被相应的slice引用,slice引用PPS的方式就是在Slice header中保存PPS的id值。该值的取值范围为[0,255]。
当前视频pic_parameter_set_id=0
seq_parameter_set_id:表示当前PPS所引用的激活的SPS的id。通过这种方式,PPS中也可以取到对应SPS中的参数。该值的取值范围为[0,31]。
当前视频seq_parameter_set_id=0
entropy_coding_mode_flag:熵编码模式标识,该标识位表示码流中熵编码/解码选择的算法。对于部分语法元素,在不同的编码配置下,选择的熵编码方式不同。例如在一个宏块语法元素中,宏块类型mb_type的语法元素描述符为“ue(v)| ae(v)”,在baseline profile等设置下采用指数哥伦布编码,在main profile等设置下采用CABAC编码。
标识位entropy_coding_mode_flag的作用就是控制这种算法选择。
当该值为0时,选择左边的算法,通常为指数哥伦布编码或者CAVLC;
当该值为1时,选择右边的算法,通常为CABAC。
当前视频entropy_coding_mode_flag=1
pic_order_present_flag:标识位,用于表示另外条带头中的两个语法元素delta_pic_order_cnt_bottom和delta_pic_order_cn是否存在的标识。这两个语法元素表示了某一帧的底场的POC的计算方法。
当前视频pic_order_present_flag=0
num_slice_groups_minus1:表示某一帧中slice group的个数。当该值为0时,一帧中所有的slice都属于一个slice group。slice group是一帧中宏块的组合方式,定义在协议文档的3.141部分。
当前视频num_slice_groups_minus1=0
num_ref_idx_l0_default_active_minus1、num_ref_idx_l0_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的默认值。
当前视频num_ref_idx_l0_default_active_minus1=0num_ref_idx_l0_default_active_minus1=0
weighted_pred_flag:标识位,表示在P/SP slice中是否开启加权预测。
当前视频weighted_pred_flag=0,不开启加权预测。
weighted_bipred_idc:表示在B Slice中加权预测的方法,取值范围为[0,2]。0表示默认加权预测,1表示显式加权预测,2表示隐式加权预测。
当前视频weighted_bipred_idc=0,B条带采用默认加权预测
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
chroma_qp_index_offset:用于计算色度分量的量化参数,取值范围为[-12,12]。
当前视频chroma_qp_index_offset=0
deblocking_filter_control_present_flag
标识位,用于表示Slice header中是否存在用于去块滤波器控制的信息。当该标志位为1时,slice header中包含去块滤波相应的信息;当该标识位为0时,slice header中没有相应的信息。
当前视频deblocking_filter_control_present_flag=1,说明控制去块效应滤波器的特征的一组语法元素将出现在条带头中
constrained_intra_pred_flag:若该标识为1,表示I宏块在进行帧内预测时只能使用来自I和SI类型宏块的信息;若该标识位0,表示I宏块可以使用来自Inter类型宏块的信息。
当前视频constrained_intra_pred_flag=0,说明I宏块可以使用来自Inter类型宏块的信息。
redundant_pic_cnt_present_flag:标识位,用于表示Slice header中是否存在redundant_pic_cnt语法元素。当该标志位为1时,slice header中包含redundant_pic_cnt;当该标识位为0时,slice header中没有相应的信息。
3.以一个GOP为例分析
当前视频redundant_pic_cnt_present_flag=0。
GOP结构为IP。
在这里插入图片描述
使用H.264Visa打开demo.264,发现该视频只有I帧和P帧,没有B帧,其中I帧大小大于P帧。因为I帧没有用运动预测来压缩数据。
利用matlab导入数据,绘出以图像帧号为横坐标、每帧所用比特数为纵坐标图片:
在这里插入图片描述

在这里插入图片描述
以图像帧号为横坐标、每帧所用QP为纵坐标画出曲线图。
在这里插入图片描述

第一个I帧全为帧内编码。
在这里插入图片描述
每个宏块所用的平均编码比特数为166.599bits,QP(量化参数)值为26.000。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值