VTM的安装配置
VTM是H.266/VVC的参考软件,需要在Visual Studio环境下运行
VTM(H.266)安装配置
安装
1.下载,我选了16.0版本
地址:https://vcgit.hhi.fraunhofer.de/jvet/VVCSoftware_VTM/-/tree/VTM-16.0
2.解压并阅读readme文件
3.在VTM根目录创建build文件夹
4.下载CMake
地址:https://cmake.org/download/
5.安装
参考:https://blog.csdn.net/qq_37112826/article/details/108869737?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163486929316780271540375%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=163486929316780271540375&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-2-108869737.pc_search_result_cache&utm_term=window10%20cmake&spm=1018.2226.3001.4187
选择路径
6.打开命令行检查是否安装成功
7.双击桌面图标
8.左下角Configue
finish-->Generate
9.编译成功后在build文件夹里查看
10.打开.sln文件
11.右键EncoderApp设为启动项,右键解决方案并重新生成
教程说release模式编码快,我用release模式重新生成一直卡住,生成不了,debug模式一下就好,暂时不知道什么问题
后来解决:我在release模式生成解决方案等了十多分钟才成功,可能是单纯太慢了
注意的是:我后面的截图可能debug和release模式不一致,是因为我不断调bug,截图有点乱,配置的时候前后保持一致就可以
12.ctrl+F5运行
13.打开VTM的bin文件夹相应位置可以看到相应可执行文件
测试
1.在VTM根目录下新建测试文件夹,标明日期时间
2.找一个视频序列的配置文件复制到测试文件夹下面(这里复制错了,是BasketballDrill.cfg)
3.在cfg目录下把编码器的配置文件复制到测试文件夹下面
4.把DecoderApp.exe和EncoderApp.exe复制到测试文件夹
5.把相应的待测试yuv视频文件加入到测试文件夹
视频文件通过教程博主公众号领取,文件夹很大,50个G
6.修改编码器配置文件
在测试文件夹中打开编码器配置文件encoder_intra_vtm.cfg和序列配置文件BasketballDrill.cfg
将BasketballDrill.cfg的内容复制到encoder_intra_vtm.cfg对应位置
7.FramesToBeEncoded是需要编码的帧数,将其改为50,减少编码时间
8.保存
9.在vs中的EncoderApp中,属性-->调试,修改命令参数和工作目录
这里面属性页的Debug和Release模式要和前面设置的对应
命令参数的格式为: -c 编码器配置文件名 -c 待测试序列的配置文件名
工作目录为我们建立的测试文件夹的路径
10.修改DecoderApp命令参数和工作目录
11.在测试文件夹建立批处理文件test.bat,输入以下内容
EncoderApp.exe -c F:\video_Codeing_Environment\VVCSoftware_VTM-VTM-16.0\220308_Test\encoder_intra_vtm.cfg > Enc_Out.txt
DecoderApp.exe -b str.bin -o dec.yuv
pause
其中 -c 表示编码指令,-b表示解码指令,-o表示输出指令:
解释一下:
第一行首先执行编码.exe文件,然后读取对应VTM文件目录下的cfg文件,按其中的配置进行编码,并输出编码结果的相关数据到Enc_Out.txt文件中。
第二行首先执行解码的.exe文件,然后把编码后得到的二进制码流(bin文件)进行解码。最后输出解码后的重建YUV文件。
最后一行的pause是为了不让cmd在执行完后自动退出,便于及时发现bug。
11.双击执行,最后结果显示在命令行中,编码数据写入Enc_Out.txt中
结果:
162.999是编码时间,我改成了FramesToBeEncoded=2,编2帧
0.137是解码时间,不懂看最后的问题1
12.解码后的yuv视频
yuv播放器:https://sourceforge.net/projects/raw-yuvplayer/
调整设置
最终
遇到的问题
-
编码286MB的BasketballDrill_832x480_50.yuv,在Release模式下我用了69分钟,教程里面五分钟结束,不知道什么原因,即使是在配置文件里设置编码1帧也要一分钟多
分析:经过询问,帧内编码一分钟一帧还算正常,教程里面完成时用的Totaltime很少是因为bat文件中写了解码的命令,最后只显示了解码的时间,我为了测试编码就只写了第一行编码命令,显示的是编码时间。
至于我用了69分钟,好像也正常,问别人才知道,人家好像就编前四五帧,我是把500帧按8间隔都编完了时间才那么长
-
在测试文件夹中的配置文件encoder_intra_vtm.cfg中设置编码帧数为1之后,bat文件编码了1帧,在vs里,运行EncoderApp仍然编码整个文件500帧,清理解决方案并重新生成无效,解码正常(未解决)
-
解码时报错
参考了这个链接进行设置:https://blog.csdn.net/dengx1018/article/details/77619908?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
然后出现了这个情况:
原因:DecoderApp的属性配置错了,-b str.bin -o dec.yuv我写成-t str.bin -o dec.yuv,改过来就好使了
参考链接
-
https://blog.csdn.net/magic_show_time/article/details/120508040?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164836592116782094813360%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164836592116782094813360&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~hot_rank-9-120508040.142^v5^control,143^v6^control&utm_term=VTM%E9%85%8D%E7%BD%AE%E8%BF%90%E8%A1%8C&spm=1018.2226.3001.4187
-
https://blog.csdn.net/YouLan999/article/details/108028359?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&utm_relevant_index=1
-
https://blog.csdn.net/weixin_45615071/article/details/108754261
-
https://blog.csdn.net/jiamenghu/article/details/106279845
-
https://blog.csdn.net/jiamenghu/article/details/106296844
-
https://blog.csdn.net/zzhaoyongbo/article/details/109136642?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.pc_relevant_aa&spm=1001.2101.3001.4242.1&utm_relevant_index=3
-
https://www.freesion.com/article/8857624016/