【数据压缩作业】H.264编码

一、实验要求

1.将自行选择或老师给的两个264文件进行解码,得到相应的YUV文件
将上述两个视频序列编码为.264文件
2.固定码率,以不同的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,…
3.用码流分析软件检查所生成的码流中各种编码模式和运动矢量等信息
4.用播放器观看所生成码流的质量
5.生成率失真曲线

二、实验内容

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

  1. 将MP4格式文件转成264文件
  2. 将264文件进行解码得到YUV文件
      修改decoder.cfg文件中的输入文件和输出文件。
InputFile= "demo.264"     
OutputFile = "demo.yuv"   

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

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

以上文中生成的demo.yuv作为实验材料。命令行代码为lencod.exe -d encoder.cfg;修改配置文件修改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为例测试分析说明如下:

实验过程:

...
##########################################################################################
# Files
##########################################################################################
InputFile             = "mov.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
...
SourceWidth           = 320    # Source frame width
SourceHeight          = 176    # Source frame height
SourceResize          = 0      # Resize source size for output
OutputWidth           = 320    # Output frame width
OutputHeight          = 176    # Output frame height
...
ReconFile             = "mov_test1_rec.yuv"       # Reconstruction YUV file
OutputFile            = "mov_test1.264"           # Bitstream
##########################################################################################
# Encoder Control
##########################################################################################
...
IntraPeriod           = 15   # 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)
...

在这里插入图片描述
实验结果如下:
在这里插入图片描述
2.用码流分析软件检查所生成的码流中各种编码模式和运动矢量等信息:

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

第4帧(P帧)的编码模式和运动矢量:
在这里插入图片描述
由分析软件可知,Slice Type为P Slice,即该帧为前向预测帧(P帧),所以运动矢量应该是只有前向预测所得的运动矢量,从图中可以看出也确实如此,只有前向预测的绿色运动矢量。

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

三、总结

全I帧编码和【GOP=15,2B】比较,B帧属于极端的没有。
由分析可知,B帧越多的话,相对来说,运动矢量会越多。
同时,由所学知识和在播放器中码流的表现来看,在前后两帧画面相差大的情况下,运动矢量也会相应增多。

在这里插入图片描述
在这里插入图片描述
利用表格中的数据作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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值