数据压缩学习实验(八)H264编码器调试

实验内容

  1. 调试JM18.6 H264编解码器,将输入的Annex B格式码流解码至YUV文件
  2. 调整编码器参数,将解码后的YUV文件编码至不同格式的H.264文件
  3. 用码流分析软件检查所生成的码流中各种编码模式和运动矢量等信息
  4. 用播放器观看所生成码流的质量
  5. 生成率失真曲线

实验过程及结果

解码.264文件(Annex B码流)至YUV 420文件

在H.264中,编码后的比特流将被NAL( Network Abstraction Layer)打包形成NAL Unity:
在这里插入图片描述
NAL Unity由一个字节的头部和有效载荷组成,可以被单独的解析和处理,包含1字节的头部和有效载荷:
在这里插入图片描述
H.264码流的Annex B格式由NAL Unity数据加开始前缀组成。其开始前缀为2个或者3个0x00,后面再加一个0x01。此外,为了防止NALU载荷中出现开始前缀,需要对其进行防竞争处理,通过在0x01前插入防竞争字节0x03实现,将0x000001变成0x00000301。
更为详细的Annex B码流格式可参考:字节流格式(Annex B)和RTP格式流浅析

使用ffmpeg将.mp4文件转换至.264格式的Annex B Byte Stream Format,命令:

ffmpeg -i test1.mp4 -codec copy -bsf:v h264_mp4toannexb test1.264

转换结果:
测试视频Test1
测试视频Test2
使用JM H264编解码器中的解码器部分将两段文件解码至YUV文件,使用解码器时,需要修改解码器配置文件中以下两项以指定输入输出文件:

InputFile             = "test2.264"       # H.264/AVC coded bitstream
OutputFile            = "test2_dec.yuv"   # Output file, YUV/RGB

解码结果:
在这里插入图片描述
在这里插入图片描述

将解码后的YUV文件编码至不同格式的H.264文件

视频编码帧主要分为三种:
I(Intra frame)帧:帧内编码帧,仅利用该帧图象本身信息进行编码,数据率最大。
P(Predictive-coded frame )帧:前向预测编码帧,根据前面最靠近的I帧或者另一个P帧进行预测,属于前向预测,数据率小于I帧
B(Bidirectionally predictive-coded frame)帧:双向预测编码帧,它既用过去的帧作基准,也用未来的帧作基准,即前向和后向预测都有,数据率最小。

图像组GOP(group of pictures)
图像组是将一个图像序列中连续的几个不同编码帧种类的图像组成一个小组,简称为GOP。一个GOP中通常只包含1个I帧。
在这里插入图片描述

在相同码率的情况下,GOP越长,图像质量越高(P、B帧可分配到更多比特);在相同图像质量的情况下,GOP越长,码率越低(高码率的I帧少)。

在JM H264编解码器中,调整GOP需要设置cfg文件中的如下参数:

IntraPeriod           = 0  # Period of I-pictures   (0=only first) I帧周期&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值