一、安装H.266/VVC
测试软件VTM
VTM
目前为止最新版本为VVCSoftware_VTM-VTM-10.0
,下载的地址为:
https://vcgit.hhi.fraunhofer.de/jvet/VVCSoftware_VTM
- 找到
VTM
所有更新版本
- 下载最新版本
VTM10.0
的压缩包到本地
- 在本地对下载的压缩包进行解压
此时第一步VTM
的下载工作就完成,若要直接获得VTM10.0
压缩包的同学,可以在公众号直接回复“VTM10
”即可,公众号二维码见文章末尾
二、安装工程编译工具Cmake
-
在软件管家中下载
Cmake
编译工具
如果不想自己下载的同学,可以直接在我的公众号后台,回复“Cmake
”关键字,即可获取Cmake
压缩文件,公众号二维码间文章最后。 -
Cmake
的本地安装
点击开始安装
在“开始”通过cmd
命令调出命令提示符,检验Cmake
在本地是否安装成功
三、生成VTM
工程文件
- 在
VTM10.0
文件夹下建立一个批处理文件,文件名为test.bat
,名称随便起,只要文件以.bat
结尾即可,下面建立批处理文件,根据自己电脑安装的VS版本自行选择
VS 2015
mkdir build
cd build
cmake .. -G "Visual Studio 14 2015 Win64"
VS 2017
mkdir build
cd build
cmake .. -G "Visual Studio 15 2017 Win64"
VS 2019
mkdir build
cd build
cmake .. -G "Visual Studio 16 2019"
- 具体操作
打开记事本,根据VS版本,把上面的命令粘贴进去
保存到VTM10.0
文件夹下,并以.bat
结尾命令文件名
四、用VS对生成的VTM
工程文件NextSoftware.sln
进行编译
在build目录下找到NextSoftware.sln
文件,并用VS打开
执行完上述操作后,打开VTM10.0
文件夹中的bin文件下相应的位置,可以看到生成的编码器和解码器的可执行文件,如下:
至此,项目编译工作结束
五、视频序列的编码
1、首先,我们在VTM10.0
的文件夹下面创建一个测试文件,每次我们对视频进行编码测试时,都需要建立一个单独的文件,最好以时间和日期加以标识,以示区分
2、在创建的文件夹下面添加以下文件
-
所用到的测试序列的配置文件,路径为
VTM10.0
文件夹下面的子文件cfg
中的子文件per-sequence
,在该文件夹下面,找到对应测试视频序列的配置文件,并将其复制到创建的测试文件夹下面
-
把编码器的配置文件加入到测试文件夹中,这里我们采用全帧AI编码方式,在cfg文件夹下面选择对应的编码器配置文件
-
把之前VS编译生成的编码器和解码器的可执行文件复制到测试文件夹中
-
把待编解码测试的测试序列添加到测试文件夹当中,VVC测试序列可以在我的公众号后台,回复“VVC测试序列”,即可获取,公众号二维码,见文中末尾
-
测试文件夹,所添加的所有内容如下
- 对编码器的配置文件进行修改
在测试文件夹中,打开编码器配置文件encoder_intra_vtm.cfg
和序列配置文件BasketballDrill.cfg
,建议使用Notepad++软件打开,可以自己在网上找该软件的资源
将BasketballDrill.cfg
中下面这段内容复制到encoder_intra_vtm.cfg
中相应的位置,具体如下图所示:
注意:这里有个FramesToBeEncoded
是需要编码的帧数,因为我们只是做测试,所以我们把这个值改为50
粘贴完成后,点击保存
因为在该文件中,有一个参数TemporalSubsampleRatio
我们设置为8,表示我们需要编码的50帧中,每隔开8帧,我们编码一帧,所以最后编码的帧数为 50 / 8 ~= 7帧,只有不等于整数,就向前取整。
4、接下来,用VS在工程文件中的Encoder.app
属性也调试栏中添加编码命令参数和工作目录
- 其中命令参数的格式为: -c 编码器配置文件名 -c 待测试序列的配置文件名
- 工作目录为我们建立的测试文件夹的路径
5、在测试文件夹下面新建一个批处理文件test.bat
,内容如下,按照之前建立批处理文件的方式,保存后就点击运行即开始编码
批处理文件的内容
EncoderApp.exe -c E:\VVCSoftware_VTM-VTM-10.0\0922Test\encoder_intra_vtm.cfg >
Enc_Out.txt
DecoderApp.exe -b str.bin -o dec.yuv
pause
编码后的输出结果:
用BeyondCompare
软件去比较dec.yuv
和rec.yuv
是否编解码一致,如果一致,则说明测试方案正确无误。直到这一步才能最终确定自己的测试方案是否正确。比较后,如果文件二进制相同,则显示二进制相同,如果二进制不同,则说明自己的测试方案有误,这时候就需要我们对代码进行调试,找到问题所在。
检查编码性能,打开日志文件Enc_Out.txt
,在这个文件里面记录了每一帧的码率、以及各YUV
三个分量的PSNR
指标,最后还有平均性能指标。将自己测试方案的性能和Anchorde
的性能相比较,如果码率上升并且PSNR
降低,说明方案不行;如果码率下降同时PSNR
降低,说明方案性能良好,可以接受。但是如果码率上升,PSNR
下降或者码率下降,PSNR
上升,则就无法判断性能的好坏,这种情况下,就需要使用性能更好的计算机去测试小序列(C、D)的全帧编解码情况,来进一步根据结果进行方案性能的判断。
六、一些补充说明
编码器配置文件的一些参数说明:
InputFile
:存放测试序列的路径FramesToBeEncoded
:测试总共的编码帧数QP
:当前序列是在什么量化参数下进行编码的,这里设置为37,这样编码速度比较快TemporalSbusampleRatio
:指的是编码的间隔数,就是每间隔多少帧编码一帧,AI的默认值是8
一些编解码指令
- -c :表示编码指令
- -b :表示解码指令
- -o :表示输出指令
【说明】:文章参考自wD、路人
博主的博客
更多关于视频编码知识和资源的分享,更精致的文章排版,欢迎关注博主微信公众号,一起交流、学习、进步!!!