H.264文件分析和编解码实验

本文详细介绍了H.264编解码实验的原理,包括编码框架、序列参数集和图像参数集的解析。在文件分析步骤中,涉及SPS、PPS的读取和GOP的帧数据分析。实验过程涵盖了不同GOP结构和码率的视频编码,通过码流分析软件检查编码质量,并生成率失真曲线。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

H.264编解码实验

一、实验原理
1.H.264文件编码原理

H.264和先前的标准一样,都采用变换编码、基于运动补偿的帧间预测和熵编码的混合框架。大的不同是增加了帧内预测,变换采用整数变换,熵编码采用自适应的方法。

2.序列参数集

语法结构说明的是某一段视频序列的编码特性

  • 首先需要使用profile idc,level_idc两个语法元素说明该段视频序列遵循的是H.264/AVC标准的哪一种配置,以指导解码端调用合适的解码器进行解码。

  • 其次需要使用pic order_cnt type等语法元素说明该段视频序列中每帧图像的记数方法,也需要使用 pic_ widthes in- mbs- minusl和height in- mbs minusl 这两个语法元素说明该段视频序列中图像帧的长度和宽度。

  • 各段视频序列的编码特性可能不同,因此序列参数集的内容也就不会相同,也就需要一个 Sequence_parameter_set_id语法元素来区分不同的序列参数集,以方便解码端进行参考。

3. 图像参数集

说明的是某个图像帧的编码特性

  • 包括编码该图像帧所采用的熵编码模式(CAVLC或 者CABAC),所使用的参考帧的数目,以及对该图像帧的亮度和色度残差进行量化时所采用的量化参数值等。

  • 图像参数集中最主要的部分是该图像帧的Slice Group划分方式的表示(用于FMO)

  • 其中num_ slice_groupes minusl语法元素说明了该图像帧中Slice Group的数目

  • num_ slice_group- map type语法元素说明了Slice Group 的划分方式

  • 同序列参数集的情况一样,每个图像帧的编码特性 可能各不相同,也就需要一个 pic_parameter_set_id来区分不同的图像参数集。

二、文件分析步骤

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

三、H.264文件分析
1、SPS信息的读取

在这里插入图片描述

2、PPS信息的读取

在这里插入图片描述

3、GOP中帧数据的分析

用参考软件eseye_u.exe打开demo.264观察

在这里插入图片描述
在这里插入图片描述
导出demo264.csv文件,发现视频中除了第一帧是I帧,其他全是P帧。用excel画图。在这里插入图片描述

  • (1)第一帧是I帧

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

①该帧每个宏块QP值为26。
②空间特性:在图像平滑处,格子少,量化程度低。在细节丰富处,格子越多,量化程度越高。
③ 分析每个宏块所采用的编码类型及其比例:该I帧没有使用到帧间编码,该帧完全使用了帧内编码,由于该帧没有前参考帧,没有使用到运动矢量。

  • (2)第二帧是P帧
    在这里插入图片描述
    黄点
    在这里插入图片描述

蓝点
在这里插入图片描述
红点
在这里插入图片描述
①该帧每个宏块所用的QP值为26
②分析每个宏块所采用的编码类型及其比例:该P帧黄色是b_skip块,蓝色是向前+向后编码,红色是帧内编码

四、编解码实验过程
1、实验要求
  • 将自行选择或老师给的两个264文件进行解码,得到相应的YUV文件,将上述两个视频序列编码为.264文件固定码率,以不同的GOP长度及形状编码:
    GOP=15,2B帧;GOP=12,2B帧,GOP=9,2B帧
    GOP=4,1B帧;GOP=12,无B帧;GOP=1,全I帧
    相同的GOP长度及形状,不同的码率
    例:1000kb/s, 800kb/s,400kb/s,…
  • 用码流分析软件检查所生成的码流中各种编码模式和运动矢量等信息
  • 用播放器观看所生成码流的质量
  • 生成率失真曲线
2、实验过程

(1)将两个264文件进行解码,得到相应的YUV文件

  • demo.264

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • highway_qcif.264
    在这里插入图片描述
    在这里插入图片描述

(2)将上面两个视频序列编码为.264文件
encoder.cfg修改后

# Files
##########################################################################################
InputFile             = "demo.yuv"       # Input sequence
InputHeaderLength     = 0      # If the inputfile has a header, state it's length in byte here
StartFrame            = 0      # Start frame for encoding. (0-N)
FramesToBeEncoded     = 30      # Number of frames to be coded
FrameRate             = 30.0   # Frame Rate per second (0.1-100.0)
Enable32Pulldown      = 0      # Enable 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值