目录
H.264编解码框图
编码:
解码:
1.将两个264文件进行解码,得到相应的YUV文件
利用网站链接: https://www.convertfiles.com/convert/video/可以将mp4文件转为264文件
我生成了两个264文件
修改bin目录下的decoder.cfg文件,修改以下内容:
InputFile = "use1.264" # H.264/AVC coded bitstream
OutputFile = "use1.yuv" # Output file, YUV/RGB
将生成的264文件转为yuv文件,将生成的264文件放到bin目录下,在命令行中打开bin目录,运行命令 ldecod.exe -d decoder.cfg
运行效果如下
2.将视频序列编码为264文件
(一)固定码率,以不同的GOP长度及形状编码
GOP=15,2B帧;
修改bin目录下的encoder.cfg
应修改如下部分:
# Files
InputFile = "use1.yuv" # Input sequence
SourceWidth = 640 # Source frame width
SourceHeight = 360 # Source frame height
SourceResize = 0 # Resize source size for output
OutputWidth = 640 # Output frame width
OutputHeight = 360 # Output frame height
FramesToBeEncoded = 30 # Number of frames to be coded
ReconFile = "use1_reconstruct.yuv" # Reconstruction YUV file
OutputFile = "use1_1.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 used)
在命令行中打开bin目录,运行命令 lencod.exe -d encoder.cfg
剩下的修改方式类似,于是就在此不赘述了。
GOP=12,2B帧,
GOP=9,2B帧,
GOP=4,1B帧,
GOP=12,无B帧,
GOP=1,全I帧
(二)相同的GOP长度及形状,不同的码率
以GOP=15,2B帧为例修改生成不同不同码率
修改bin目录下的encoder.cfg
修改如下部分:
# Files
InputFile = "use1.yuv" # Input sequence
SourceWidth = 640 # Source frame width
SourceHeight = 360 # Source frame height
SourceResize = 0 # Resize source size for output
OutputWidth = 640 # Output frame width
OutputHeight = 360 # Output frame height
FramesToBeEncoded = 30 # Number of frames to be coded
ReconFile = "use1_reconstruct_2.yuv" # Reconstruction YUV file
OutputFile = "use1_2.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 used)
RateControlEnable = 1 # 0 Disable, 1 Enable
Bitrate = 1000000 # Bitrate(bps)
在命令行中打开bin目录,运行命令 lencod.exe -d encoder.cfg
结果如下:
3.用码流分析软件检查所生成的码流中各种编码模式和运动矢量等信息
以GOP=15,2B帧为例
第17帧的编码模式如下图:
查看运动矢量首先要打开MB Motion Vectors
运动矢量信息包括在下图中:
4.用播放器观看所生成码流的质量
下图为参数:GOP=15,2B帧,45020bps
下图为参数:GOP=15,2B帧,1000000bps
下图为参数:GOP=15,2B帧,800000bps
5.生成率失真曲线
码率为1000000bps的y分量psnr值为46.642
码率为800000bps的y分量的psnr值为42.292
码率为450200bps的y分量的psnr值为42.016
matlab程序如下:
利用matlab绘出率失真曲线如下,剩下的一些数值实验顺序类似上面,所以只做了这一组率失真曲线