视频编解码·学习笔记3. H.264视频编解码工程JM的下载与编解码

Posted Simon_Ace

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了视频编解码·学习笔记3. H.264视频编解码工程JM的下载与编解码相关的知识,希望对你有一定的参考价值。

一、下载JM工程:

JM是H.264标准制定团队所认可的官方参考软件。网址如下

http://iphome.hhi.de/suehring/tml/

从页面中可找到相应的工程源码,本次选择JM 8.6版本,此版本为经典版本:

http://iphome.hhi.de/suehring/tml/download/old_jm/

二、配置编码环境:

下载后打开工程目录中tml.sln文件,VS中会有三个工程,其中rtpdump没用,删掉。另外两个ldecod和lencod分别为解码和编码工程。

首先将lencod右键-设为启动项目,并将其“属性->常规->输出目录”修改为$(ProjectDir)bin“属性->调试->工作目录”也修改为$(ProjectDir)bin
技术分享图片
编译lencod工程 —— 右键lencod -> 仅用于项目 -> 仅重新生成lencod
之后在bin目录下可找到编译生成的文件。

在工作目录bin中,可以找到三个config配置文件,表示三个profile的配置,本次使用最简单的baseline配置文件进行修改。复制一份,并将文件名改为encoder.cfg,文件名必须是这个才能作为工程中默认参数,否则还要修改相关配置。

  • encoder_main.cfg
  • encoder_baseline.cfg
  • encoder_extended.cfg

其中配置文件部分内容如下,修改的地方为INputFile(编码文件)、FramesToBeEncoded(编码帧数),IntraPeriod(所有帧都设为I针)

##########################################################################################
# Files
##########################################################################################
InputFile             = "akiyo_qcif.yuv"       # Input sequence, YUV 4:2:0
InputHeaderLength     = 0      # If the inputfile has a header, state it‘s length in byte here 
StartFrame            = 0      # Start frame for encoding. (0-N)
FramesToBeEncoded     = 10      # Number of frames to be coded
FrameRate             = 30     # Frame Rate per second (1-100)
SourceWidth           = 176    # Image width in Pels, must be multiple of 16
SourceHeight          = 144    # Image height in Pels, must be multiple of 16
TraceFile             = "trace_enc.txt"
ReconFile             = "test_rec.yuv"
OutputFile            = "test.264"


##########################################################################################
# Encoder Control
##########################################################################################
ProfileIDC            = 66  # Profile IDC (66=baseline, 77=main, 88=extended)
LevelIDC              = 30  # Level IDC   (e.g. 20 = level 2.0)

IntraPeriod           =  1  # Period of I-Frames (0=only first)             ### if 1 -> make all the frames are I_frames
IDRIntraEnable        =  0  # Force IDR Intra  (0=disable 1=enable)         ### if 1 -> make all I frames to IDR关键帧
.... ...

配置好后,运行工程,运行过程中cmd页面如下所示:
技术分享图片

之后去看工作目录bin中生成的文件:
test.264为生成的H.264码流文件,trace_enc.txt是生成的日志,由于是关闭的,所以没有内容,test_rec.yuv为编码过程中重建的视频图像,可将此文件与原始视频作比较,即可看出失真所在。

三、配置解码环境:

首先将ldecod设为启动项目,编译ldecod项目(右键->仅用于项目->仅重新生成ldecod),同样修改工程配置文件:
“属性->常规->输出目录”修改为$(ProjectDir)bin“属性->调试->工作目录”也修改为$(ProjectDir)bin
技术分享图片

工作目录中 decoder.cfg为解码配置文件,参数如下:

test.264                 ........H.264 coded bitstream    需要解码的码流文件
test_dec.yuv             ........Output file, YUV 4:2:0 format    输出的文件
test_rec.yuv             ........Ref sequence (for SNR)           参考帧
10                       ........Decoded Picture Buffer size
0                        ........NAL mode (0=Annex B, 1: RTP packets)
0                        ........SNR computation offset
1                        ........Poc Scale (1 or 2)
500000                   ........Rate_Decoder
104000                   ........B_decoder
73000                    ........F_decoder
leakybucketparam.cfg     ........LeakyBucket Params

需要将此配置文件填写到,ldecod属性->调试->命令参数中:decoder.cfg。
之后直接运行程序,即可得到解码的文件,运行过程cmd页面:
技术分享图片
工作目录中test_dec.yuv即为解码后输出文件,此文件应与源文件相同。

至此,JM工程下载,以及简单编解码配置、运行完成。











以上是关于视频编解码·学习笔记3. H.264视频编解码工程JM的下载与编解码的主要内容,如果未能解决你的问题,请参考以下文章

视频编解码·学习笔记6. H.264码流分析工程创建

视频编解码·学习笔记12. 图像参数集(PPS)介绍

视频编解码·学习笔记4. H.264的码流封装格式 & 提取NAL有效数据

视频编解码·学习笔记5. NAL Unit 结构分析

视频编解码·学习笔记8. 熵编码算法:基本算法列举 & 指数哥伦布编码

视频编解码·学习笔记1. 视频压缩编码初步认知