H.264编解码实验

一.实验项目名称

H264编码

基本参数

Line ParameterName Comment
13 InputFile 输入文件名
16 FramesToBeEncoded 编码的帧数
30 SourceWidth 源序列宽
31 SourceHeight 源序列高
33 OutputWidth 输出序列宽
34 OutputHeight 输出序列高
72 IntraPeriod I帧长度
78 EnableOpenGOP 是否允许参考下一GOP中的参考帧
180 NumberBFrames I/P帧之间的B帧数目
194 HierarchicalCoding B级编码
444 RateControlEnable 使用简单的码率控制
445 BitRate 码率
453 RCUpdateMode 码率控制方式:0是原始的JM率控制;1是对所有帧都适用的速率控制,不管它的片类型是什么;2是原始加上智能的对I和B片(包括层次)的选择;3是使用比特率统计法对I和B片的原始,混合二次速率控制(实验中应选2或3)

二.实验要求

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

三.实验步骤

修改encode.cfg中的相关参数

1. 不同Gop类型的参数设置

Gop类型 IntraPeriod NumberBFrames
15,2B帧 15 2
12,2B帧 12 2
9,2B帧 9 2
4,1B帧 4 1
12,0B帧 12 0
1,全I帧 1 0

2. 不同码率参数设置

码率(kbps) 40 80 100 200 400 800 1000

3. 基础参数设置

ParameterName Value Value
InputFile cy.yuv cy2.yuv
FramesToBeEncoded 35 30
SourceWidth 352 1920
SourceHeight 288 1080
OutputWidth 352 352
OutputHeight 288 288
EnableOpenGOP 1 1
HierarchicalCoding 2 2
RateControlEnable 1 1
RCUpdateMode 2 2

注:cy2.yuv进行了resize,尺度变换成352x288;

四.实验结果

1. 六种GOP类型,固定码率40kbps

a. IBBPBBPBBPBBPBB

在这里插入图片描述
b. IBBPBBPBBPBB

在这里插入图片描述
c. IBBPBBPBB

在这里插入图片描述
d. IBPB

在这里插入图片描述
e. IPPPPPPPPPPP

在这里插入图片描述
f. IIIII…

在这里插入图片描述
此处关闭了B帧Hierarchy编码模式,设置HierarchicalCoding=0;并设置RCUpdateMode=1,对所有帧适用的速率控制;

2. 编码模式

I模式,帧内编码(I帧)

在这里插入图片描述
P模式,前向预测帧(P帧),P帧宏块用到I帧和P帧,P模式为主(绿色)

在这里插入图片描述
B模式,双向预测帧(B帧),B帧中的宏块用到I和B模式,B模式为主(蓝色)

在这里插入图片描述
3. 运动矢量

I帧为帧内编码,无运动矢量,P帧为前向预测编码,运动矢量为绿色,B帧为双向预测编码,运动矢量有红绿两种颜色。图像中的标记的是每个块的运动矢量,一个块的大小不定,从16x16~4X4。

I帧

在这里插入图片描述
P帧

在这里插入图片描述
B帧

在这里插入图片描述
4. 率失真曲线

不同序列在GOP类型为15,2B时,随码率变化的率失真曲线
纵轴:Y-PSNR(dB);横轴:码率(kbps);

在这里插入图片描述
在这里插入图片描述
5. 重建序列

测试序列:cy.yuv;
测试码率:40kbps,1000kbps;
测试GOP类型:15,2B/12,2B

40kbps 1000kbps
15,2B 在这里插入图片描述 在这里插入图片描述
12,2B 在这里插入图片描述 在这里插入图片描述