- 一.下载安装VTM
H.266/VCC 参考软件VTM下载网址:https://vcgit.hhi.fraunhofer.de/jvet/VVCSoftware_VTM
这里我选择的Tags是VTM-9.0(根据自己想用的VTM版本进行选择)然后点击右边的下载键下载压缩包
下载后得到一个压缩包并将其解压到一个文件夹(比如我的解压路径是D:\VTM-Analyzer\VVCSoftware_VTM-VTM-9.0)
- 二.下载安装Cmake
CMake的用途是能通过一系列的源码和相关的配置来生成需要的编译器平台上的项目文件。刚刚我们下载的VTM-9.0可以理解为源码和配置,现在我们需要通过这些源码和配置在VS中(对于windows系统)生成项目文件。
Cmake下载网址可参考:https://cmake.org/download/
根据自己的需要下载相应的Cmake版本然后解压即可,解压后在bin文件中找到cmake-gui应用程序并打开 - 三.配置VTM
打开cmake-gui应用程序之后出现以下界面并输入相关路径:
点击Configure进行配置:
点击finish之后稍等一会儿,配置完成之后出现以下界面后再点击generate即可,然后VTM的配置就到此结束,可以发现在VTM9.0的文件夹中会出现一个build文件夹
四.使用VTM进行编解码
打开刚刚生成的build文件夹->NextSoftware.sln,打开这个解决方案,之后选中ALL_BUILD右击鼠标点击“生成”后等上一段时间
等生成进度条满了之后并出现
这个结果说明一切就还顺利,这个时候发现自己VTM9.0文件夹下又出现了一个bin文件如下图:
bin文件中包含了我们所要用到的encoder编码器和decoder解码器,接下来我们可以快乐地进行编解码了!(先别急着点击这些应用程序,往下看)
1.编码
(1)在对YUV文件中的帧进行编码之前,首先确保自己电脑里有YUV格式的文件,我这里的YUV文件是视频编码里比较常用的BasketballDrill_832x480_50.yuv(为了后续操作方便,我在VTM9.0文件夹下建了一个test文件夹以便存放各种编解码之后的码流和其他文件)。
我将BasketballDrill_832x480_50.yuv放在了我建的test文件夹下(路径为D:\VTM-Analyzer\VVCSoftware_VTM-VTM-9.0\test\BasketballDrill_832x480_50.yuv)。
同时将VTM9.0文件夹下的cfg文件夹打开,找到自己要编码的序列的配置文件(我选择的是per-sequence文件夹下的BasketballDrill.cfg)将其复制到test文件夹下(路径为D:\VTM-Analyzer\VVCSoftware_VTM-VTM-9.0\test\BasketballDrill.cfg),并使用文本编辑器打开它根据情况看修改配置参数与否
然后在cfg文件夹下找到encoder_intra_vtm.cfg配置文件并将其复制到test文件夹下(因为我主要利用帧内工具进行编码),使用文本编辑器打开它根据情况看是否修改帧内编码的配置参数(我这没进行修改)。
到这差不多可以真正快乐地进行编码了~
(2)打开刚刚build文件夹下的NextSoftware.sln解决方案,鼠标右击EncoderApp将其设为启动项目
再点击EncoderApp下的属性->配置为“所有配置”->调试->工作目录则是test文件所在的路径D:\VTM-Analyzer\VVCSoftware_VTM-VTM-9.0\test; 命令参数为-c BasketballDrill.cfg -c encoder_intra_vtm.cfg>enc.txt,其中-c是读入配置信息(前面为序列配置信息,后面为编码工具配置信息),>enc.txt的作用是可以将编码的一些信息比如编码所需的时间和YUV分量的PSNR以txt文件的方式显示出来。
设置完这些参数后点击"应用"并确定,点击“本地windows调试器”出现以下界面,这时候静等编码结果~大概编一帧需要个1分钟左右吧
接下来test中就又有新成员啦~
其中enc里存放的是编码时间和YUV分量的PSNR如下图
rec.yuv是通过编码之后的重建帧,str.bin是编码后的码流(都是一些01二进制数),至此,编码过程就完成啦~接下来是解码过程
2.解码
鼠标右击DecoderApp将其设为启动项目
再点击DecoderApp下的属性->配置为“所有配置”->调试->工作目录则是test文件所在的路径D:\VTM-Analyzer\VVCSoftware_VTM-VTM-9.0\test; 命令参数为-b str.bin -o dec.yuv>dec.txt,其中-b是读入码流,-o是输出解码之后的yuv文件,>dec.txt的作用是可以将解码的一些信息比如解码所需的时间以txt文件的方式显示出来。
设置完这些参数后点击"应用"并确定,点击“本地windows调试器”出现以下界面,这时候静等解码结果~大概只需要秒级的时间哈哈,所以很快test文件中就又有新成员了
其中dec里存放的是解码时间如下图,而dec.yuv是通过解码之后的恢复帧(按理来说要和前面的rec.yuv互相匹配一致)
至此,就顺利地完成了对YUV中一帧的编码和解码了~