VideoSceneMaster项目实战:基于Qt + ONNX Runtime + FAISS 的本地视频智能检索工具
一、为什么需要这样一款工具?
在影视混剪、短视频制作或素材库管理中,我们经常遇到这样的场景:
有一段成片或混剪,想找到它出自哪部电影/哪段采访;
有一张截图或剧照,想知道它来自仓库里的哪一部长视频;
脑子里有画面描述(比如“一个女子在酒店前台办理入住”),却完全记不住文件名和存放位置。
传统做法是:打开播放器 → 逐个拖进度条 → 肉眼比对 → 反复确认。一部 2 小时的电影,找 1 个镜头可能就要花 10 分钟。如果素材库里有几十上百部视频,工作量几乎不可接受。
VideoSceneMaster(小黄蜂·场景大师)正是为了解决这个问题而开发的。它是一款运行于 Windows 平台的本地视频智能检索工具,通过短视频、图片或文字描述,就能在本地视频仓库中快速定位目标素材。
二、三大核心检索功能
🔹 功能一:视频找视频
使用场景:你有一段混剪片段或短视频,想知道它来源于哪部长视频。
工作流程:
将长视频加入视频仓库,建立画面特征索引;
加载查询短视频;
系统自动检测短视频中的镜头和场景;
在仓库中搜索匹配的原始片段。
技术特点:匹配不仅比较单帧相似度,还会综合连续帧序列、场景归属和时间连续性,因此对裁切、变速、混剪片段都有较好的鲁棒性。
适用任务:
混剪视频溯源
二次剪辑内容查重
多部长视频中定位短片段位置
查找重复或轻度变换后的镜头
🔹 功能二:图片找视频
使用场景:你有一张剧照、截图或播放器暂停画面,想知道它来自哪部视频的哪个时间点。
操作方式:加载一张图片 → 点击搜索 → 返回候选场景列表 → 双击直接播放原视频对应位置。
亮点:结果支持保存为视频片段,方便直接用于后续剪辑。
🔹 功能三:文本找视频
使用场景:没有参考图片,也没有参考视频,只有一段文字描述。
示例:输入“一名女子在酒店前台办理入住”,系统利用CLIP 跨模态模型将文本与视频语义特征对齐,返回最相关的候选镜头。
适用人群:素材量大、文件名不规范、依赖“记忆中的画面”来检索的创作者。
三、技术架构总览
VideoSceneMaster 采用C++20 + Qt 6构建桌面界面,核心处理链路如下:
FFmpeg(硬件/软件解码) ↓ 镜头与场景检测(硬切/黑场/光流/SSIM) ↓ ONNX Runtime(GPU 加速)特征提取 ↓ FAISS 向量索引构建与相似度检索 ↓ 场景连续性整理与结果画廊展示 ↓ 视频片段 / Premiere XML / 剪映草稿导出主要模型:ResNet(画面特征)、SSCD(紧凑视觉描述子)、CLIP(跨模态语义)、OmniShotCut(场景边界检测)。
硬件加速:支持 CUDA / NVENC 硬件编解码,同时提供软件解码回退机制,兼容性较好。
四、场景检测:不止是“切一刀”
场景检测并非简单依赖某一项指标,而是综合以下维度进行判断:
| 指标 | 作用 |
|---|---|
| 像素差异 | 快速感知画面突变 |
| 亮度变化 | 检测黑场/淡入淡出 |
| HSV 直方图 | 色彩分布变化 |
| 边缘差异 | 构图结构变化 |
| SSIM | 结构相似度 |
| 光流 | 运动幅度变化 |
针对动作片、体育赛事等快速运动素材,软件提供“动作片模式”,可适当降低运动剧烈时的误切率。
检测完成后,每个镜头/场景会形成独立的场景卡片,记录:
视频来源
起止帧 / 时间范围
映射范围
匹配置信度
五、结果确认与剪辑联动
播放器功能
选中场景卡片后,中央播放器支持:
播放 / 暂停 / 停止
进度跳转
逐帧查看
0.1 倍 ~ 32 倍变速播放
范围循环
当前帧截图
这些功能方便用户人工复核每一个检索结果,避免漏判或误判。
导出能力
确认结果后,你可以:
保存单个场景
批量保存碎片片段
合并连续场景并输出
导出Premiere XML
通过小黄蜂扩展将场景直接发送到Premiere 轨道
生成剪映 / CapCut 草稿
这意味着从“找到素材”到“进入剪辑时间线”,可以在工具内一次性完成,无需二次导入导出。
六、安装部署注意事项(必看)
⚠️ 为什么不能只复制 EXE?
VideoSceneMaster 采用完整目录运行方式,必须解压整个文件夹,不能只提取单个 EXE 文件。主要目录包括:
VideoSceneMaster/ ├── models/ # 场景检测、视觉特征、语义模型 ├── image/ # 界面资源(LOGO、按钮等) ├── 小黄蜂/ # Premiere 扩展文件 ├── licenses/ # 第三方组件许可 ├── *.dll # Qt、FFmpeg、ONNX Runtime 等运行库 └── VideoSceneMaster.exe如果只移动 EXE,可能出现:
DLL 缺失导致无法启动
图标/资源丢失
模型加载失败
建议解压到固定目录,通过快捷方式启动。
显卡驱动要求
V1.8 内置CUDA 13 运行库,推荐使用NVIDIA R580 或更新版本驱动。
普通用户不需要额外安装 CUDA Toolkit,但必须确保显卡驱动正常。RTX 3060 / 4060 / 4070 等型号均可使用,实际性能取决于:
显存容量
视频长度
批处理等级
七、CUDA 环境诊断与高 DPI 适配
诊断机制
软件启动时会自动检测 CUDA 环境,并记录详细错误信息:
int deviceCount = 0; cudaError_t err = cudaGetDeviceCount(&deviceCount); if (err != cudaSuccess) { qDebug() << static_cast<int>(err) << cudaGetErrorName(err) << cudaGetErrorString(err); }同时调用nvidia-smi读取:
真实显卡型号
驱动版本
显存容量
从而区分驱动过旧、CUDA 初始化失败、驱动组件不一致、显卡不可见等不同问题,方便用户定位。
高 DPI 屏幕适配
Windows 150% / 200% 缩放下,固定尺寸 Qt 界面容易超出屏幕。V1.8 在创建QApplication之前读取屏幕工作区和系统 DPI,并动态计算补偿倍率:
double targetScale = std::min( workWidth / 1680.0, workHeight / 920.0) * 0.98; double qtFactor = std::clamp( targetScale / windowsScale, 0.5, 1.0); qputenv("QT_SCALE_FACTOR", QByteArray::number(qtFactor, 'f', 3));该调整仅影响软件显示尺寸,不会改变视频分辨率、模型精度或导出画质。
八、适用人群与总结
| 适合人群 | 原因 |
|---|---|
| 影视混剪创作者 | 快速查找混剪片段来源 |
| 短视频团队 | 高效管理大量拍摄素材 |
| 广告制作人员 | 按画面/语义精准定位镜头 |
| 素材管理员 | 建立可检索的视频库 |
| 技术爱好者 | 研究本地 AI 视频分析工程实践 |
VideoSceneMaster 从视频建库 → 特征提取 → 智能检索 → 场景确认 → 剪辑导出,尝试建立一条完整的本地视频素材处理链路。素材越多,这套索引+检索机制的效率提升就越明显。
后续预告
后续文章将继续深入介绍:
界面各区域功能详解
视频仓库的建立与管理
特征提取参数调优
三种检索模式的实操演示
Premiere / 剪映导出的完整流程
欢迎持续关注 👋
如果这篇文章对你有帮助,欢迎点赞、收藏、评论三连~🙌
