【实验八】H.264编码实验

一.对264文件进行解码,得到相应的YUV文件

打开ldecod_vc10.vcxproj文件,修改decoder.cfg文件中的输入文件和输出文件。

InputFile             = "demo.264"       # H.264/AVC coded bitstream

OutputFile            = "demo.yuv"   # Output file, YUV/RGB

设置正确的工作路径,运行代码生成demo.yuv文件。

图像出现了一些问题,可能是参数设置的原因。

二.将上述视频序列编码为.264文件

以上文中生成的demo.yuv作为实验材料。修改配置文件修改encoder.cfg

(1)固定码率为800kbps,以不同的GOP长度及形状编码

GOP=15,2B帧,800kb/s;GOP=12,2B帧,800kb/s;GOP=9,2B帧,800kb/s

GOP=4,1B帧,800kb/s;GOP=12,无B帧,800kb/s;GOP=1,全I帧,800kb/s

(2)相同的GOP长度及形状,不同的码率

GOP=12,2B帧,1000kb/s;GOP=12,2B帧,800kb/s;GOP=12,2B帧,400kb/s

由于过程太多,此处仅以GOP=15,2B帧,800kb/s为例测试分析说明如下:

1.首先修改配置文件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     = 60      # Number of frames to be coded
...
SourceWidth           = 854    # Source frame width
SourceHeight          = 480    # Source frame height
SourceResize          = 0      # Resize source size for output
OutputWidth           = 854    # Output frame width
OutputHeight          = 480    # Output frame height
...
ReconFile             = "demo1.yuv"       # Reconstruction YUV file
OutputFile            = "demo1.264"           # Bitstream
##########################################################################################
# Encoder Control
##########################################################################################
...
IntraPeriod           = 60   # Period of I-pictures   (0=only first)
...
##########################################################################################
# B Slices
##########################################################################################
NumberBFrames          = 2  # Number of B coded frames inserted (0=not 
disable, N <= NumberReferenceFrames)
...
HierarchicalCoding      =  0  # B hierarchical coding (0= off, 1= 2 layers, 2= 2 full hierarchy, 3 = explicit)
...
Bitrate                 = 8000000 # Bitrate(bps)

实验结果:

2.用码流分析软件检查所生成的码流中各种编码模式和运动矢量等信息:

第一帧(I帧)的编码模式和运动矢量:

帧图像4*48*816*16

选取的是第一帧,按照分析来看,第一帧一定是帧内编码帧(I帧),在分析软件中分析时也确实如此。从图中,我们可以看到,宏块的类型MB Type为I_16X16_0_0_0,I_8X8和I_4X4。三个宏块都是I类型的宏块。同时,由于是I帧的原因,运动矢量并不存在。从上图中发现也确实如此。
 

第4帧(P帧)的编码模式和运动矢量:

由分析软件可知,Slice Type为P Slice,即该帧为前向预测帧(P帧),所以运动矢量应该是只有前向预测所得的运动矢量.

第2帧(B帧)的编码模式和运动矢量:

由分析软件可知,Slice_Type为B Slice,即该帧为双向预测帧(B帧),所以运动矢量应该有两种,一种是前向预测所得,一种是后向预测所得,拥有两种不同的运动矢量。

三.统计实验结果

事实上,用播放器播放时并没有特别大的差异。

模式bitrateY-PSNR
G15/2B(IBBPBBPBBPBBPBB)

1077

998

399

40.773

40.453

37.772

G12/2B(IBBPBBPBBPBB)

932

834

415

39.541

39.371

3.355

G12/1BIBPBPBPBPBPB)

1033

841

400

43.21

42.531

39.082

G12/0B(IPPPPPPPPPPP)

1001

807

396

43.119

41.978

37.982

G9/2B(IBBPBBPBB)

673

673

415

38.172

38.172

36.945

全I帧(IIIIIIIIIII……)

992

805

400

35.871

34.872

32.401

利用表格中的数据作图得到:

matlab绘图:

x1=[1077,998,399];
y1=[40.773,40.453,37.772];
x2=[932,834,415];
y2=[39.541,39.371,39.355];
x3=[1033,841,400];
y3=[43.21,42.531,39.082];
x4=[1001,807,396];
y4=[43.119,41.978,37.982];
x5=[673,673,415];
y5=[38.172,38.172,36.945];
x6=[992,805,400];
y6=[35.871,34.872,32.401];
plot(x1,y1,'r',x2,y2,'g',x3,y3,'b',x4,y4,'y',x5,y5,'k',x6,y6,'c');
grid on;
xlabel('比特速率');
ylabel('PSNR');

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值