HM编解码

目前还没有学会用批处理的方法编译HM,这里仅介绍使用visual studio直接对HM进行编码的过程,后面批处理的方法学会了再更新。

1.仅使用visual studio进行编码

我使用的编译器是visual studio2019

1.1首先是下载HM,我直接在官网上下载最新版本的HM

HM官网:https://hevc.hhi.fraunhofer.de/

在官网中点击“HM software repository (source browser)”

HM编解码_第1张图片

branches是分支版本,tags是过去的版本,trunk是最新的版本,点击“trunk”

HM编解码_第2张图片

点击网页最下方的“Zip归档即可完成下载”

HM编解码_第3张图片

1.2编码

使用HM进行编码需要有几个文件:待编码的序列,该序列的cfg文件,以及一个通用的cfg文件,下面将分几个步骤进行介绍

1.2.1首先将刚才下载好的HM解压并打开,在TAppEncoder上右击,将其设置为启动项目,该项目的名字会加粗变亮。

HM编解码_第4张图片

1.2.2然后在TAppEncoder这个项目上右击,点击“属性”,点击“调试”,修改工作目录,工作目录是存放待编码序列和cfg文件的目录,也是产生的码流和重建序列的目录,这个目录可以任意设置成自己方便的目录,只要是真实有效的目录就可以。我这里就把工作目录设置为原本工作目录下的一个“test”文件夹下,方便自己寻找,当然,得自己在原本的工作目录中新建这个test文件夹。修改了原本的工作目录后,点击“应用”,再点击“确定”即可。

HM编解码_第5张图片

1.2.3现在将需要的几个文件放在刚才新建的test文件夹中,当程序在运行的时候就会自动调用这几个文件。

首先是待编码的序列,自己任选一个就好,我这里使用“BQMall_832x480_60.yuv”。该序列对应的cfg文件可在主文件夹下的“cfg”文件夹下的“per-sequence”文件夹中找到,我这里必须使用“BQMall.cfg”来与刚才选择的序列对应。通用的cfg文件可以在主文件夹的“cfg”文件夹中找到,任选一个就好,我这里选择“encoder_intra_main.cfg”。这时,“test”文件夹中就有三个需要的文件了。

HM编解码_第6张图片

1.2.4修改一下cfg中的内容

首先,双击打开“test”文件夹中与视频序列对应的cfg文件,我这边就是打开“BQMall.cfg”,InputFile后面的内容必须要与视频序列的名字一样!我这里将FramesToBeEncoded后面的内容修改为10,即只编码10帧,当然也可以不改,但是编码时间就会很长很长。

HM编解码_第7张图片

打开“test”文件夹中的通用cfg文件,我这里就是打开“encoder_intra_main.cfg”,BitstreamFile和ReconFile分别是生成的二进制码流和重建视频序列的名字,可以根据自己喜好修改,我这里不修改。

HM编解码_第8张图片

1.2.5向visual studio中输入命令参数

在“TAppEncoder”项目上右击,选择“属性”,点击“调试”,修改命令参数如图,将两个cfg文件作为命令参数写进去,每个cfg文件前面要有"-c"(我暂时还不知道为什么要这样写),每个参数之间用空格隔开,然后点击“应用”,再点击“确定”。如果再加上“>xxx.txt”,大于号和“xxx.txt”之间没有空格,就可以将命令行窗口的信息保存到文本文档中。

HM编解码_第9张图片

1.2.6以上准备工作都做好之后,直接运行程序就可以了,耐心等待,如果编码帧数比较少的话几分钟就可以完成(根据电脑配置决定),编码帧数多的话就要等很久了。编码完成后,命令行会出现“按任意键关闭此窗口”(否则就是还没有编码完成)。关闭命令行窗口,这时候,“test”文件夹中会多出两个文件,如图,分别是二进制码流文件和重建的视频序列文件。

HM编解码_第10张图片

至此,编码过程完成。

2.使用visual studio进行解码

2.1首先将TAppDecoder设置为启动项目

2.2在该项目上右击,选择“属性”,选择“调试”,修改命令参数,如图,-b表示输入的bin文件,-o表示输出的yuv文件,我们这里把刚才编码产生的bin文件的名字复制进来(同理可以加上“>xxx.txt”),同时将该bin文件所在的目录写入工作目录这一栏,我这里就直接使用刚才编码时的工作目录,修改完后,点击“应用”,点击“确定”

HM编解码_第11张图片

2.3直接运行即可,命令行结束后就可以在工作目录中看到生成的解码后的yuv文件

你可能感兴趣的:(C++,视频编码)