在 Windows 上从源码构建 Video2X Qt6 图形界面:完整编译与部署指南
在 Windows 上从源码构建 Video2X Qt6 图形界面完整编译与部署指南【免费下载链接】video2xA machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018.项目地址: https://gitcode.com/GitHub_Trending/vi/video2x本文以 Video2X 官方构建文档 docs/book/src/building/windows-qt6.md 为骨架完整讲解在 Windows 上从源码编译 Video2X Qt6 图形界面GUI的每一步环境准备、克隆仓库、预构建libvideo2x共享库、获取 FFmpeg 运行库、使用 Qt Creator 构建以及用windeployqt部署运行时依赖并成功启动video2x-qt6.exe。读完本文你将能够在一台干净的 Windows 机器上独立复现整个构建链路并理解每一步背后的构建系统原理以仓库根目录 CMakeLists.txt 中的实现为准。一、构建前须知Video2X 6.x 的组件构成Video2X 6.0.0 起项目被完全重写为 C/C 实现见 README.md。在 6.x 架构下项目被拆分为多个可独立构建的组件libvideo2x核心 C/C 处理库负责视频解码、滤镜超分辨率、帧插值与编码封装了 FFmpeg、ncnnVulkan、Real-ESRGAN、Real-CUGAN、RIFE 等能力video2x CLI命令行前端源码位于 tools/video2x/src/video2x.cppVideo2X Qt6 GUI图形界面前端由独立的video2x-qt6仓库维护通过链接libvideo2x共享库工作。也就是说Qt6 GUI 并不是一个完全独立的程序它本质上是libvideo2x的一个图形化调用端。因此构建 GUI 前必须先把libvideo2x编译成共享库DLL这正是本文第 3 节要解决的问题。二、环境准备Prerequisites官方构建文档假设 Qt6 已安装到默认位置C:\Qt以下工具需要预先手动安装依赖说明Visual Studio 2022必须勾选Desktop development with C桌面 C 开发工作负载提供 MSVC 编译器工具链winget-cliWindows 包管理器命令行工具用于安装 Git 等辅助软件Qt6安装时勾选Qt6 with MSVC 2022 64-bit组件编译器套件必须与 MSVC 2022 匹配并勾选Qt Creator集成开发环境此外结合 README.md 中列出的硬件要求你的机器还需满足CPU预编译二进制要求支持 AVX2Intel Haswell 及更新、AMD Excavator 及更新从源码构建时同样建议选择带 AVX2 指令集的 CPUGPU必须支持 VulkanNVIDIA Kepler/GTX 600 系列及以上、AMD GCN 1.0/Radeon HD 7000 系列及以上、Intel HD Graphics 4000 及以上因为 ncnn 推理与 libplacebo 渲染均走 Vulkan 硬件管线。提示构建仅需要 MSVC 工具链 CMake Qt6Vulkan SDK 在构建 GUI 时并非必需项CLI 的构建才显式find_package(Vulkan)见下文源码分析但运行超分辨率/插值功能时必须有可用的 Vulkan 驱动。三、克隆仓库首先用 winget 安装 Git如尚未安装winget install -e --idGit.Git然后克隆video2x-qt6仓库。务必使用--recurse-submodules参数因为该项目通过 Git 子模块托管了大量第三方依赖ncnn、spdlog、Boost 以及 Real-ESRGAN/Real-CUGAN/RIFE 的 ncnn-Vulkan 封装库对应本仓库中的 third_party/ 目录结构缺少该参数会导致依赖缺失、构建失败git clone --recurse-submodules video2x-qt6 仓库地址 cd video2x-qt6克隆完成后进入仓库目录接下来需要为 GUI 准备其运行所依赖的库。四、准备依赖一先构建 libvideo2x 共享库Qt6 GUI 编译时需要libvideo2x的头文件与导入库.lib运行时需要其 DLL。官方构建文档明确要求在构建 GUI 之前先把 libvideo2x 构建为共享库并将产物放到third_party/libvideo2x-shared目录。libvideo2x的构建方式记录在 docs/book/src/building/windows.md 中其给出的核心命令如下在video2x主仓库根目录执行cmake -S . -B build -DUSE_SYSTEM_NCNNOFF -DUSE_SYSTEM_SPDLOGOFF -DUSE_SYSTEM_BOOSTOFF -DCMAKE_BUILD_TYPERelease -DCMAKE_INSTALL_PREFIXbuild/libvideo2x-shared cmake --build build --config Release --parallel --target install理解这条命令需要对照 CMakeLists.txt 中的实际构建逻辑共享库开关BUILD_SHARED_LIBS默认即为ONCMakeLists.txtlibvideo2x默认以动态库形式产出依赖开关顶层实际使用的选项名是VIDEO2X_USE_EXTERNAL_NCNN / VIDEO2X_USE_EXTERNAL_SPDLOG / VIDEO2X_USE_EXTERNAL_BOOSTCMakeLists.txt三者默认均为ON即优先使用系统提供的第三方库上面的命令将其关闭改为使用third_party下随子模块引入的源码ncnn、spdlog、Boost在本地构建适合不想额外安装系统级依赖的场景FFmpeg 的处理在 Windows 上libvideo2x直接从third_party/ffmpeg-shared目录链接avcodec、avfilter、avformat、avutil、swscale五个库CMakeLists.txt这正是下一步要手动下载 FFmpeg 共享包并重命名目录的原因模型文件安装install规则会把 models/ 下的全部模型Anime4K GLSL 着色器、Real-ESRGAN/Real-CUGAN/RIFE 的.param/.bin文件一并安装到数据目录CMakeLists.txt确保运行时能加载对应算法。命令执行完毕后libvideo2x的头文件、导入库与 DLL 会集中出现在build/libvideo2x-shared下。将整个目录内容复制到 GUI 仓库的third_party/libvideo2x-shared目录不存在则新建即完成 GUI 对核心库的依赖准备。五、准备依赖二获取 FFmpeg 共享运行库libvideo2x的解码、编码与像素格式转换全部依赖 FFmpegWindows 上以共享库DLL形式链接。构建文档给出的获取方式是下载 FFmpeg 官方 Windows 共享构建包full build shared 版本由 GyanD 维护发布版本号以变量形式管理以便升级# Versions of manually installed dependencies $ffmpegVersion 7.1 # Download and extract FFmpeg curl -Lo ffmpeg-shared.zip FFmpeg 7.1 full build shared 下载地址 Expand-Archive -Path ffmpeg-shared.zip -DestinationPath third_party Rename-Item -Path third_party/ffmpeg-$ffmpegVersion-full_build-shared -NewName ffmpeg-shared注意最后一步解压后必须把目录重命名为ffmpeg-shared。这是因为 CMakeLists.txt 中硬编码了third_party/ffmpeg-shared作为 FFmpeg 查找基准路径其下的include/头文件与lib/*.lib导入库会被用于编译链接。如果你使用其他版本如 7.0、7.1 之后的版本只需修改$ffmpegVersion变量并保持目录重命名规则一致即可。下载时请选择shared共享构建而非 static静态构建因为构建脚本按共享库方式链接并依赖 DLL 运行。六、在 Qt Creator 中构建 GUI 项目依赖准备就绪后进入构建阶段官方文档给出的流程极简但有效打开项目在 Qt Creator 中选择“打开项目”Open Project将 GUI 仓库根目录下的CMakeLists.txt文件作为项目文件打开。Qt Creator 会自动读取 CMake 配置并提示选择构建套件Kit选择正确的 Kit务必选择与安装的 Qt 版本匹配的MSVC 2022 64-bit套件例如Desktop Qt 6.8.0 MSVC2022 64bit否则会因编译器/Qt 架构不匹配而配置失败执行构建点击窗口左下角的锤子图标Build即可开始编译。CMake 会先重新生成配置再调用 MSVC 编译器编译 GUI 源码并链接libvideo2x与 Qt6 库产物位置构建完成后可执行文件位于build目录下典型路径形如build\Desktop_Qt_6_8_0_MSVC2022_64bit-Release\video2x-qt6.exe该路径同时被后续部署命令引用需保持一致。从源码结构看GUI 通过 CMake 的target_link_libraries与libvideo2x建立链接关系因此第 4 节中third_party/libvideo2x-shared目录的完备性头文件 导入库 DLL 三者齐备直接决定此步能否成功。七、部署运行时依赖并启动应用video2x-qt6.exe编译成功后并不能直接双击运行因为它的运行还依赖大量 DLLQt6 核心模块Core、Gui、Widgets 等、libvideo2x.dll、FFmpeg DLL 以及 ncnn 的 Vulkan 运行时。官方构建文档给出了两条部署步骤。7.1 清理发布目录在复制依赖之前先进入build目录下对应的 Release 子目录即video2x-qt6.exe所在目录删除其中除video2x-qt6.exe和.qm文件以外的所有内容。.qm是 Qt 的翻译文件必须保留——Video2X Qt6 GUI 内置了英语、简体中文、日语、葡萄牙语、法语、德语等多语言支持见 README.md删除后界面将失去本地化能力。7.2 使用 windeployqt 部署 Qt 运行时windeployqt是 Qt 官方提供的部署工具会自动分析可执行文件的依赖并拷贝所需的 Qt DLL、插件与翻译文件。官方文档给出的命令以 Qt 6.8.0 为例C:\Qt\6.8.0\msvc2022_64\bin\windeployqt.exe --release --compiler-runtime .\build\Desktop_Qt_6_8_0_MSVC2022_64bit-Release\video2x-qt6.exe参数说明--release按 Release 模式部署与构建配置一致避免混入 Debug 运行库--compiler-runtime同时拷贝 MSVC 运行时vcruntime、msvcp等保证在没有安装 Visual Studio 运行库的机器上也能运行路径中的Desktop_Qt_6_8_0_MSVC2022_64bit-Release需与你实际构建输出目录一致若安装的 Qt 版本不同如 6.7、6.9请同步修改C:\Qt\版本\msvc2022_64\bin前缀。7.3 部署 libvideo2x 共享库最后把第 4 节准备好的third_party/libvideo2x-shared目录内容复制到video2x-qt6.exe所在的发布目录但需要排除三个项目include目录头文件仅编译期需要运行时不需要libvideo2x.lib导入库仅链接期需要运行时不需要video2x.exe这是 CLI 命令行程序属于另一个前端GUI 场景下不需要。需要一并复制的是libvideo2x.dll及其依赖的 FFmpeg DLL、ncnn DLL 等libvideo2x的 install 规则本身也会把ffmpeg_base_path/bin/*.dll与ncnn.dll拷贝到 bin 目录见 CMakeLists.txt。你可以通过 libvideo2x.h 了解该库对外暴露的 C API进一步确认 GUI 与核心库的交互边界。7.4 启动验证完成以上步骤后双击video2x-qt6.exe即可启动 GUI。若启动失败优先检查是否缺少某个 DLL可用进程监控工具或直接观察报错信息回到 7.2/7.3 补全对应文件。八、备选路径直接使用官方安装包如果你不需要定制源码只是想快速获得可用的 GUI则完全不必走上述编译流程。docs/book/src/installing/windows-qt6.md 提供了更简单的方案直接下载官方发布的安装程序video2x-qt6-windows-amd64-installer.exe双击运行跟随向导选择安装目录与是否创建桌面快捷方式完成后双击桌面快捷方式即可使用。从源码构建更适合需要二次开发、调试或定制构建选项的开发者。九、常见问题与排查Q1Qt Creator 配置时报找不到libvideo2x检查third_party/libvideo2x-shared目录是否完整存在且包含头文件、libvideo2x.lib与libvideo2x.dll确认构建 libvideo2x 时使用的 MSVC 版本与 Qt 套件的 MSVC 版本一致均为 MSVC 2022 x64。Q2运行提示缺少avcodec-*.dll等 FFmpeg 库确认 FFmpeg 共享包已正确重命名为third_party/ffmpeg-shared且其bin目录下的全部 DLL 已随libvideo2x-shared一起复制到发布目录。若仍然缺失可直接从 FFmpeg 共享包的bin目录手动补拷。Q3构建时找不到ncnn相关依赖--recurse-submodules克隆是否完整。本仓库对应的third_party/ncnn、third_party/librealesrgan_ncnn_vulkan、third_party/librealcugan_ncnn_vulkan、third_party/librife_ncnn_vulkan等子模块缺一不可缺少时执行git submodule update --init --recursive补齐后重新配置。Q4程序启动后无法进行超分辨率/插值处理确认 GPU 支持 Vulkan 且驱动已更新libvideo2x的 ncnn 推理路径依赖 Vulkan 设备对应本仓库中的filter_realcugan、filter_realesrgan、interpolator_rife等实现见 src/filter_realcugan.cpp 等文件。总结从源码构建 Video2X Qt6 GUI 的本质是一条“先库后壳”的依赖链先编译libvideo2x共享库并安放至third_party/libvideo2x-shared再获取 FFmpeg 共享包并重命名为third_party/ffmpeg-shared随后在 Qt Creator 中以 MSVC 2022 64-bit 套件构建 GUI最后用windeployqt部署 Qt 运行时、复制 libvideo2x 及 FFmpeg DLL 完成收尾。理解 CMakeLists.txt 中BUILD_SHARED_LIBS、VIDEO2X_USE_EXTERNAL_*等选项的语义与third_party/ffmpeg-shared硬编码路径能帮助你在版本升级、路径变更等场景下快速定位并解决问题。【免费下载链接】video2xA machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018.项目地址: https://gitcode.com/GitHub_Trending/vi/video2x创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

轻量IDE不是删功能,而是重定义Java开发工具边界

轻量IDE不是删功能,而是重定义Java开发工具边界

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/13 16:50:54 阅读更多 →
marimo Agents 接入指南:通过 Agent Client Protocol 在聊天面板中内嵌 AI 编程助手

marimo Agents 接入指南:通过 Agent Client Protocol 在聊天面板中内嵌 AI 编程助手

marimo Agents 接入指南:通过 Agent Client Protocol 在聊天面板中内嵌 AI 编程助手 【免费下载链接】marimo A reactive notebook for Python — run reproducible experiments, query with SQL, execute as a script, deploy as an app, and version with git. St…

2026/9/13 16:49:54 阅读更多 →
构建Async/await优先的CQRS+ES框架实践指南

构建Async/await优先的CQRS+ES框架实践指南

1. 项目概述:为什么需要Async/await优先的CQRSES框架?在.NET生态中构建复杂业务系统时,开发团队常面临几个核心痛点:传统分层架构导致的代码臃肿、同步阻塞调用引发的性能瓶颈、业务逻辑与基础设施代码的耦合。这正是CQRS&#xf…

2026/9/13 16:49:54 阅读更多 →

最新新闻

WebLLM Subgroups 能力路由实战:在 Web 应用中按 WebGPU 子组特性动态切换 WASM 模型库

WebLLM Subgroups 能力路由实战:在 Web 应用中按 WebGPU 子组特性动态切换 WASM 模型库

WebLLM Subgroups 能力路由实战:在 Web 应用中按 WebGPU 子组特性动态切换 WASM 模型库 【免费下载链接】web-llm High-performance In-browser LLM Inference Engine 项目地址: https://gitcode.com/GitHub_Trending/we/web-llm 导读:本文基于 …

2026/9/13 17:38:15 阅读更多 →
STM32CubeProgrammer:嵌入式AI编程的硬件可信锚点

STM32CubeProgrammer:嵌入式AI编程的硬件可信锚点

1. 为什么STM32CubeProgrammer不是“装个软件”那么简单——嵌入式AI编程链路上的关键卡点在嵌入式软件AI编程的实操现场,我见过太多人卡在第一步:STM32CubeProgrammer装不上、连不了设备、烧不进固件。他们以为这只是个“下载工具”,随手点开…

2026/9/13 17:38:15 阅读更多 →
STM32寄存器语义提示工程:让Claude精准生成可烧录代码

STM32寄存器语义提示工程:让Claude精准生成可烧录代码

1. 这不是“用AI写Hello World”,而是让Claude真正理解STM32寄存器级语义你有没有试过把“初始化PA5为推挽输出,50MHz,高电平”直接扔给通用大模型?它大概率会返回一段语法正确但根本跑不通的代码:GPIOA->MODER | G…

2026/9/13 17:38:15 阅读更多 →
Python无人机集群编队仿真:从一致性控制到工程实现

Python无人机集群编队仿真:从一致性控制到工程实现

简介:这份基于 Python 的无人机集群编队飞行项目资料,面向毕业设计、课程设计与项目开发场景。项目围绕多机器人群体控制展开,系统梳理了集中式、分布式与混合式三种控制结构的原理与适用场景,配合源码讲解和设计思路,…

2026/9/13 17:38:15 阅读更多 →
鸿蒙人脸识别门禁对接业务系统:API与MQTT工程规范实战

鸿蒙人脸识别门禁对接业务系统:API与MQTT工程规范实战

鸿蒙人脸识别门禁这东西,单机跑起来不难,真正让人头疼的是怎么跟业务系统打通。前阵子我正好在做一个园区项目,设备端基于鸿蒙系统做人脸识别门禁,后端要对接一套现成的综合管理平台。刚开始我天真地以为不就是调几个接口嘛&#…

2026/9/13 17:38:15 阅读更多 →
olmOCR Elo 评分体系:基于人工成对评审的 OCR 工具排名与显著性检验

olmOCR Elo 评分体系:基于人工成对评审的 OCR 工具排名与显著性检验

olmOCR Elo 评分体系:基于人工成对评审的 OCR 工具排名与显著性检验 【免费下载链接】olmocr Toolkit for linearizing PDFs for LLM datasets/training 项目地址: https://gitcode.com/GitHub_Trending/ol/olmocr 导读 本文系统讲解 olmOCR 仓库中用于衡量…

2026/9/13 17:37:14 阅读更多 →

日新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/13 0:00:24 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/13 0:00:24 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/13 0:00:24 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/13 0:00:24 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/13 0:00:24 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/13 0:00:24 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/13 16:51:11 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/12 18:29:34 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/12 19:02:44 阅读更多 →