Windows下VVC参考软件VTM10.0编译和运行

1. 预备工作

①VTM软件下载:

链接https://vcgit.hhi.fraunhofer.de/jvet/VVCSoftware_VTM/-/tree/masterhttps://vcgit.hhi.fraunhofer.de/jvet/VVCSoftware_VTM/-/tree/master

 ②cmake下载:

链接https://cmake.org/download/https://cmake.org/download/

 cmake安装:链接https://blog.youkuaiyun.com/qq_42951560/article/details/115905723https://blog.youkuaiyun.com/qq_42951560/article/details/115905723

请下载该文件,然后按照上述博客进行安装

 然后安装好之后文件如下图所示(正常来说,环境变量是不需要手动配置的,软件提供了自动配置选项,请参考上述博客)

③visual studio 2017下载

 首先下载安装器 链接https://my.visualstudio.com/Downloads?q=visual%20studio%202017&wt.mc_id=o~msft~vscom~older-downloadshttps://my.visualstudio.com/Downloads?q=visual%20studio%202017&wt.mc_id=o~msft~vscom~older-downloads

然后安装visual studio 2017 社区版(建议这个地方将自己的安装目录、缓存目录、插件目录配置好,以免后期出现问题 )

推荐安装模块:

 至此,准备工作完成。

 2. 使用cmake编译VTM

 在这个地方有两种方案进行编译,既然已经下载了cmake-gui,那直接使用cmake-gui会更加方便。

打开cmake-gui,其主界面如图所示(两张图)

序号说明:

1:这里应填入VTM的主目录,例如F:/VVCSoftware_VTM-master/VVCSoftware_VTM-master

2:这里应该填入VTM的编译结果目录(一般为build),例如F:/VVCSoftware_VTM-master/VVCSoftware_VTM-master/build

3:上述过程配置完之后,点击configure,此时应该会弹出来一个窗口,

 

 第一行是选择visual studio版本(下图是版本对应的,按需选择即可。注意不要选择过旧版本)

 <2017版本测试通过>

 第二行是选择generate平台(默认为32,此处应选择x64!!!)

如果这个地方不选,就会在visual studio里面生成时出现x64与x86冲突"

 问题是如果没有弹出这个选择版本的窗口,在cmake主界面file--delete cache(清除缓存),然后重新配置上述信息即可。

 4:点击generate

此时,VTM文件夹中出现了build子文件夹

3. 使用visual studio生成

 打开build子文件夹中的该文件

 1:配置release/debug(release编码速度更快)

2:配置win32/x64(这里应该是x64,因为cmake那里设置的是x64)

3、4、5:右键EncoderApp属性--调试--设置工作目录(这个地方是生成EncoderApp.exe的目录)

6:点击”应用“

然后将EncoderApp设置为启动项目

 ctrl + F5(或者点击本地Windows调试器)以生成所需文件

然后等待生成完成后在对应的工作目录下可以看到所生成的EncoderApp.exe文件

4. 视频编码

  1.  新建一个文件夹A中
  2. 将生成的EncoderApp.exe和DecoderApp.exe拷贝到A中,然后将对应的cfg文件拷贝到文件夹A 
  3. 将对应视频文件拷贝到文件夹A

 两个文件分别为:BasketBallDrill.cfg和encoder_intra_vtm.cfg

 将视频序列对应的cfg文件内容复制粘贴到encoder_intra_vtm.cfg文件中(注意位置)

(额外修改FramesToBeEncoded,将500修改为30,减少编码时间)

 然后cmd至文件夹A路径下,执行

EncoderApp.exe -c encoder_intra_vtm.cfg >Enc.txt

 这个过程大概3-5分钟。

然后在文件夹A下会出现rec.yuv、str.bin等文件

 进阶修改:

将encoder_intra_vtm.cfg中的TemporalSubsampleRatio对应数值修改为1

建议将编码帧数进一步减小

 参考博客

链接1https://blog.youkuaiyun.com/Peter_Red_Boy/article/details/90321778https://blog.youkuaiyun.com/Peter_Red_Boy/article/details/90321778

链接2https://blog.youkuaiyun.com/zhang2039/article/details/105624481?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.no_search_link&spm=1001.2101.3001.4242https://blog.youkuaiyun.com/zhang2039/article/details/105624481?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.no_search_link&spm=1001.2101.3001.4242

链接3https://blog.youkuaiyun.com/sundy_ywz/article/details/107457957?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-2.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-2.no_search_linkhttps://blog.youkuaiyun.com/sundy_ywz/article/details/107457957?utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-2.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-2.no_search_link

链接4https://blog.youkuaiyun.com/Zzhaoyongbo/article/details/109136642?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-1.no_search_link&spm=1001.2101.3001.4242https://blog.youkuaiyun.com/Zzhaoyongbo/article/details/109136642?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-1.no_search_link&spm=1001.2101.3001.4242

链接5https://blog.youkuaiyun.com/shmilyforyq/article/details/70903070https://blog.youkuaiyun.com/shmilyforyq/article/details/70903070

链接6https://blog.youkuaiyun.com/Peter_Red_Boy/article/details/90321778https://blog.youkuaiyun.com/Peter_Red_Boy/article/details/90321778

链接7https://blog.youkuaiyun.com/diaodaa/article/details/106122943https://blog.youkuaiyun.com/diaodaa/article/details/106122943

链接8https://blog.youkuaiyun.com/Zzhaoyongbo/article/details/109136642https://blog.youkuaiyun.com/Zzhaoyongbo/article/details/109136642

链接9https://blog.youkuaiyun.com/qq_37950762/article/details/102722205?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-1.no_search_link&spm=1001.2101.3001.4242https://blog.youkuaiyun.com/qq_37950762/article/details/102722205?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-1.no_search_link&spm=1001.2101.3001.4242

 链接10https://blog.youkuaiyun.com/jiamenghu/article/details/106296844https://blog.youkuaiyun.com/jiamenghu/article/details/106296844

链接11 https://blog.youkuaiyun.com/weixin_45615071/article/details/108754261?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7Edefault-1.no_search_linkicon-default.png?t=M85Bhttps://blog.youkuaiyun.com/weixin_45615071/article/details/108754261?utm_medium=distribute.pc_relevant.none-task-blog-2~default~OPENSEARCH~default-1.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~OPENSEARCH~default-1.no_search_link

 ------------------------------------------------------------------------

暂时写这些吧,没有写之前以为能用比较少的字把流程描述清楚。但是实际上开始写,才发现里面细节还是比较多的。

动手之前多看,动手的时候细心。

### VTM 编码器解码器源代码解析 #### 解析框架结构 VTM (VVC Test Model) 是用于实现 Versatile Video Coding (VVC) 标准的测试模型。其源代码主要由多个模块组成,这些模块协同工作来完成视频编码解码的任务。 - **主程序入口** 主要分为 `EncApp` `DecApp` 两个应用程序,分别负责编码解码操作。其中 `EncApp_encode()` 函数作为编码过程的核心函数[^4],而 `DecApp_decode()` 则是解码流程的关键部分[^3]。 - **核心处理单元** 对于编码而言,涉及到了帧内预测、运动估计/补偿、变换量化等多个环节;对于解码,则侧重于逆量化、逆变换成重建图像等内容。具体来说,在编码过程中会调用诸如 `TComPrediction::motionCompensation()` 进行运动补偿计算,而在解码侧则有对应的 `TComLoopFilter::xReconPicBufferInit()` 来初始化重构图片缓冲区。 #### 关键数据结构 在整个项目里定义了许多重要的类用来表示不同的概念对象: - `TComYuv`: 表示 YUV 图像的数据容器; - `TComPic`: 描述了一张完整的图片信息及其属性; - `TEncCu`, `TDecCu`: 分别代表编码端与解码端的基本处理单元(Coding Unit),即CU节点; - `TComSlice`, `TComPicSym`: 存储切片级以及画面级别的符号表等元数据信息。 ```cpp class TComDataCU { public: Void init( UInt uiDepth ); ... }; ``` 上述 C++ 类展示了 CU 节点的部分接口方法声明,通过此类可以访问并操控当前 CU 的各种特性参数。 #### 配置管理机制 为了方便调整算法行为以适应不同应用场景的需求,VTM 提供了一系列预设好的配置文件(如 `encoder_intra_main.cfg` 或者 `encoder_randomaccess_main.cfg`),允许用户自定义输入输出路径以及其他必要的选项设置[^2]。当启动编码或解码应用时,可以通过命令行参数指定加载特定的 .cfg 文件来进行个性化定制。 #### 构建环境搭建 考虑到跨平台兼容性的需求,官方推荐采用 CMake 工具链辅助构建整个工程。无论是 Windows 平台还是 Linux 发行版上都能顺利执行如下指令序列完成编译链接步骤: ```bash mkdir build && cd build cmake .. make -j$(nproc) ``` 以上就是关于 VTM 编码器解码器的一些基本介绍技术要点分析。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值