H.264编码实验
一、实验要求
二、实验流程
1.对264文件进行解码,得到相应的YUV文件
修改decoder.cfg文件中的输入文件和输出文件
2.将上述视频序列编码为.264文件
本实验以解码器生成的demo.yuv文件为输入,
(1)固定码率为800kbps,以不同的GOP长度及形状编码
GOP=15,2B帧,1000kb/s;GOP=12,2B帧,1000kb/s;GOP=9,2B帧,1000kb/s
GOP=4,1B帧,1000kb/s;GOP=12,无B帧,1000kb/s;GOP=1,全I帧,1000kb/s
编码器需要修改的参数如下(以GOP=15,2B帧,1000kb/s为例):
...
InputFile = "demo.yuv" # Input sequence
FramesToBeEncoded = 60 # Number of frames to be coded
FrameRate = 30.0 # Frame Rate per second (0.1-100.0)
SourceWidth = 320 # Source frame width
SourceHeight = 176 # Source frame height
OutputWidth = 320 # Output frame width
OutputHeight = 176 # Output frame height
IntraPeriod = 15 # Period of I-pictures (0=only first)
NumberBFrames = 2 # Number of B coded frames inserted (0=not used)
RateControlEnable = 1 # 0 Disable, 1 Enable
Bitrate = 10000 # Bitrate(bps)
...
实验结果:
3.用码流分析软件检查所生成的码流中各种编码模式和运动矢量等信息
I帧的编码模式和运动矢量:
从图中,我们可以看到,宏块的类型MB Type为I_4X4宏块是I类型的宏块。由于是I帧的原因,运动矢量并不存在。从上图中发现也确实如此。
P帧的编码模式和运动矢量:
由分析软件可知,Slice Type为P Slice,即该帧为前向预测帧(P帧),所以运动矢量应该是只有前向预测所得的运动矢量,从图中可以看出也确实如此,只有前向预测的绿色运动矢量。
由分析软件可知,Slice_Type为B Slice,即该帧为双向预测帧(B帧),所以运动矢量应该有两种,一种是前向预测所得,一种是后向预测所得,拥有两种不同的运动矢量。
4.生成率失真曲线
在播放器中码流的表现来看,在前后两帧画面相差大的情况下,运动矢量也会相应增多。
GOP | BITRATE | Y-PSNR |
---|---|---|
15/2B | 1077 998 399 | 40.773 40.453 37.772 |
12/2B | 932 834 415 | 39.541 39.371 3.355 |
12/0B | 1001 807 396 | 38.172 38.172 36.945 |
9/2B | 992 805 400 | 35.871 34.872 32.401 |
由率失真曲线可知,GOP组结构相同时,比特率越大,编码后文件失真越小;比特率相同时,GOP越短,编码后文件失真越大。