VVC编码程序入门超详细教程——VTM从源码下载到编码CU划分结果可视化
1.源码下载
- 源码下载网址:https://vcgit.hhi.fraunhofer.de/jvet/VVCSoftware_VTM
VTM-10.0一般是稳定版,VTM-10.0rc1一般是最新版(个人理解)
- 视频序列下载地址:https://media.xiph.org/video/derf/
- 下载的文件很多可能都是.y4m文件,可以使用mencoder.exe工具进行格式转换
教程:https://blog.csdn.net/shmilyforyq/article/details/70903070
2.源码编译
下载的源码在压缩包中,将其解压到一个路径,编译完成之后改变这个路径会项目一定会出错。
编译方法的讲解下面这篇博客讲的挺好,感谢老铁:
https://blog.csdn.net/Peter_Red_Boy/article/details/90321778
3.VTM的使用
3.1打开VTM工程
使用Visual Studio打开build中的xxxx.sln
最常用的是下面的三个软件:
EncoderApp:编码软件
DecoderApp:解码软件
DecoderAnalyserApp:编码分析软件
每个软件在lib中都有自己的库函数,其中做实验中使用到的EncoderLib最多,而每个软件中很少有功能型函数,大部分都是配置文件。
3.2调试用到的软件项目
上面说到了三个常用的软件项目,
步骤:选择调试模式:release和x64——右键要调试的软件——属性——(属性页)配置属性:调试——工作目录(可自定义)——应用——确定——右键要调试软件——调试——启动新实例。
注:1.要先选择调试模式再进行后面步骤,更改调试模式后需要重新配置属性页;
2.一般默认工作目录是:项目目录\bin\vs14\msvc-19.0\x86_64\release;
3.release 模式会比debug模式编码时快很多。一般建议 使用release模式。
经过调试之后会在工作目录下生成相应的.exe文件
3.3 编码
3.3.1配置cfg文件
VTM使用是需要配置参数的,参数包括cfg和输入参数。VTM目录下cfg文件夹中存储了公共测试的配置文件,分为4种
下面就以encoder_intra_vtm.cfg为例,打开encoder_intra_vtm.cfg。在File I/O部分设置编码视频序列和输出序列名等信息。
3.3.2 配置编解码软件
**第一步:**将上面配置好的.cfg文件跟3.2中生成的.exe文件放在同一个文件夹中。
**第二步:**使用3.2中的方式打开软件的属性——调试界面,设置命令参数
编码时: EncoderApp的命令参数为 -c encoder_intra_vtm.cfg >out.txt
注:-c 后面的就是3.3.1中设置好的配置文件
>out.txt 是将编码过程中的在控制台界面输出的信息,写入到out.txt中
也可以同时使用多个配置文件写法:-c xxxx.cfg –c xxxx2.cfg
**第三步:**运行,开始编码,右键EncoderApp——调试——启动新实例
编码结束后会在工作目录中生成.bin和.yuv文件
(若擅长使用VS的控制台界面或者Windows的控制台界面,也可使用控制台界面控制编码,进入到EncoderApp所在的路径,命令为:EncoderApp.exe -c encoder_intra_vtm.cfg >out.txt)
编码结束会在命令行下输出编码后的bit数、YUV、编码时间等信息,为记录方便,生成单独的文件>out.txt。编码结束找到输出文件打开可以看到相关信息,如果没有>out.txt编码时会看到下图:
3.3.3 编码输出信息
上图是VTM输出在命令行窗口的信息,很多新手都会想知道编码质量在哪看,就在这里,下面大概介绍下 编码输出的信息。
编码结束后输出的信息中给出了编码质量、时间,这也是就是为什么强调用>out.txt保存这些信息。
在当前的工作文件夹生成的.bin文件是码流,在作为解码器的输入文件之一。
首先会输出一些编码的输入参数:
然后就是在每编完一帧后,会输出一个该帧的编码信息,其中重要的是:POC(对应图像编码顺序的序号,这里POC 0 就是编码第一帧)、TId(对应播放顺序的索引,这里TId 0即播放的第一帧),总比特数,YUV各自的PSNR值。注意因为存在分层B帧结构,因此编码顺序和播放顺序可能不同。
最后就是在编完要求的帧数后输出的总的编码信息,包括全部帧的总bit数、YUV各自及总的PSNR值,以及I、P、B帧的帧数、bit数、YUV各自及总的PSNR值,还有编码时间。I帧、P帧、B帧的概念这里不再赘述。
论文中在说编码性能时一般会提到BD-rate和编码时间,时间就是这里Total Time,而BD-rate是根据总的bitrate和YUV三通道的PSNR计算得到的,但一般要使用4个QP的测试结果来进行比较,如下图。这里就不再详细介绍BD-rate的具体计算方法。
3.4解码
在进行如上配置后,正常情况下编码器就能将你指定的yuv测试文件编码为二进制码流文件了。
解码时会用到DecoderApp软件,跟编码时一样先调试生成DecoderApp.exe(可以设置生成文件目录)
在软件属性——调试 命令参数输入**-b xxx.bin -o deco.yuv**
-b指定输入的二进制码流,即编码输出码流文件,-o指定输出的yuv文件。
设置完毕之后,运行解码器,应该能够解码出deco.yuv文件来了。
解码时一定要将编码时生成的.bin和.yuv文件与DecoderAPP.exe放在同一个目录中
3.5获取编码结果
解码时会用到DecoderAnalyserApp软件,跟编码时一样先调试生成DecoderAnalyserApp.exe(可以设置生成文件目录)
补充内容(2020.11.6): 要使用块统计扩展,需要在编译时将宏ENABLE_TRACING和K0149_BLOCK_STATISTICS设置为1。(在VS中搜索全部文档可以搜索到)统计信息在编码段和解码端都可以获取到。 此扩展为测试软件在“dtrace”功能中添加了额外的跟踪通道,主要是以下两个:
D_BLOCK_STATISTICS_ALL:所有的语法元素都将被记录,无论他们是实际编码的还是获得的。
D_BLOCK_STATISTICS_CODED:仅记录将进行编码的语法元素。
在软件属性——调试 命令参数输入-b intra_akiyo_cif.bin --TraceFile=“De_VTM7_intra_akiyo_cif.vtmbmsstats” --TraceRule=“D_BLOCK_STATISTICS_ALL:poc>=0”
–TraceFile=“De_VTM7_intra_akiyo_cif.vtmbmsstats” --TraceRule="D_BLOCK_STATISTICS_ALL:poc>=0"为配置信息,初学阶段先固定这样用。
Analyse时一定要将编码时生成的.bin文件与DecoderAnalyserApp.exe放在同一个目录中
运行之后会生成文件:De_VTM7_intra_akiyo_cif.vtmbmsstats
4.编码结果可视化查看
1.下载并安装YUView软件,下载地址:https://github.com/IENT/YUView
2.添加文件步骤
2.1.在软件的右上角Item里右键新建Ovelay Item
3.2将编码生成的.yuv文件和AnalyseserApp生成的.vtmbmsstats文件添加到Ovelay Item里,拖动调整使得.yuv在上,.vtmbmsstats在下
3.3点击Item窗口中的.yuv文件,在YUV File Properties窗口内设置 YUV Format设置.yuv显示格式,如果使用默认cfg配置文件,选择YUV 4:2:0 10-bit LE
4.点击Overlay Item,在Overlay Properties窗口将Overlay打钩。下面一列打钩的可选择查看的信息
5.结束
至此,从下载代码到可视化查看CU划分情况和查看编码信息全部结束了。
OVER!!!