很久之前我发过一篇VideoSeek的初版介绍——那时候它还是「抽帧 + CLIP + 向量索引,能把截图对应到本地视频」的小工具。
那篇文章里的动机我至今还记得:
领导甩来一张截图,让我在硬盘里找原片;网上搜不到,记忆也靠不住,只能自己写。
那个痛点没变。变的是:VideoSeek 不再只是「搜一下试试」,而是慢慢长成了我日常真的会打开的本地视频素材库。
这篇不重写旧文,只聊聊:从「能跑」到「能长期用」,走了那些路。
一、初版解决了什么
最早那版,核心就四件事:
- 文本描述 → 找相似画面
- 上传图片 → 以图搜视频
- 维护多个本地视频目录
- 命中后预览片段
很直白:FFmpeg 抽帧 → ONNX 跑 CLIP → 建向量索引 → 相似度搜索。
当时能跑、能演示、能救命,就已经值了。
二、用着用着,问题也来了
自己用 + 给朋友用之后,现实很快教育人:
「搜到了」不够,还要「搜得准、搜得快、库大了也不崩」。
陆续遇到的真实需求:
- 库里有几千个文件,只想在某几个文件夹里搜
- 领导给的是裁剪过的截图,不是整帧,普通图搜经常飘
- 同一套素材,有人想用中文 CLIP,有人更习惯SigLIP
- 索引更新到一半被打断,不能悄悄坏掉
- 视频改名、换文件夹,不想整片重算向量
- 删库之后磁盘占用还在,得真的释放空间
- 除了自己点 UI,还想让Cursor / 其它 Agent调本地搜索
这些都不是「再加一个按钮」能糊弄过去的,得动架构。
三、怎么解决这些问题
1. 索引与搜索:从 FAISS 实验栈,到 Lance 主线
早期为了快,向量检索走FAISS + 全局索引那条路,写 demo 很爽;库一大、要分库搜、要删库回收,维护成本就上来了。
现在本地搜索主线已经收敛到Lance 向量库:
- 同步视频库 → 抽帧、embedding、直接写 Lance
- 搜索 → 从 Lance 加载,在内存里做检索
- 删库 → 删向量行 + 压缩存储,占用会下来
对用户来说,界面还是「同步 / 搜索」;对开发者来说,少了很多「全局索引要不要重建」的心智负担。
(老用户从旧版升级时,应用内会自动做迁移,不用手搓。)
2. 搜索:从「全库一把梭」到「可控、可精、可预设」
现在搜索页比初版多了不少「真干活」的能力:
- 搜索范围:全库 / 指定库 / 指定视频
- frame / chunk:按帧命中,或按语义时间段聚合
- 以图搜 + 截图定位:裁剪截图可以走定位链路,不是简单整图相似度
- 搜索预设:常用条件存成 preset,下次一键复用
「毫秒级搜索」在中小库上依然成立;库特别大时,先收窄范围往往比硬全库扫更实用——这也是后面做 scope 的原因。
3. 模型:从「一套 CLIP 走天下」到多 Profile
不再绑死单一 CLIP 了。现在可以在设置里切换不同模型 Profile(例如 CLIP、SigLIP、Chinese-CLIP 等),各自有独立的向量资产目录。
这意味着:
- 你可以按素材类型选更合适的 embedding
- 换模型 ≠ 覆盖旧库,各 profile 各管各的
4. 视频库:从「能加文件夹」到「能长期维护」
库管理也成熟不少:
- 库内改名 / 搬家,会尽量对齐路径,不重算向量(内容没变就不浪费算力)
- 同步失败有本次问题视频列表,不用翻日志猜
- 删库后会清理对应向量并压缩,不是删了 UI 条目但磁盘不动
- 设置里可以看本地向量索引详情(帧数、块数、占用估算)
这些不 flashy,但决定了:你是偶尔玩一下,还是真的把几百 G 素材扔进去。
5. 预览:从「导出小段看看」到「搜完就能播」
命中结果现在更适合「确认是不是这一镜」:
- 预览走VLC 直接播源片,到点自动停
- 导出片段仍走FFmpeg,从原片裁 mp4
搜 → 看 → 导出,链路更顺了。
6. 新长出来的两条「可选胳膊」
核心仍是:本地库 + 语义搜索 + 预览导出。
在此基础上又加了两个不挡主链路的扩展:
理解笔录
对已同步视频,按需生成 chunk 级 YOLO 检测 + 画面描述 + 整片总结。要配描述服务,不做也能正常搜。
本机 Agent API(可选)
在127.0.0.1开 HTTP 接口,让 Cursor 等外部 Agent 调搜索、列库、导出、读/生成理解笔录。
详见仓库docs/for-agents.md,适合「人在 UI 里看,Agent 在后台帮找片」的玩法。
四、现在 VideoSeek 是什么
一句话:
本地视频素材库:用文字或截图找片段时间,预览后导出片段;数据在本地,不上传你的视频。
适合:
- 硬盘 / NAS 堆了大量自己拍的、网上搜不到的素材
- 剪辑前粗定位,再进 PR / 达芬奇精剪
- 想本地跑模型,又 optionally 让 Agent 帮忙调搜索
和初版比,灵魂没变(语义找画面),骨架更结实(Lance、多模型、范围搜索、库维护、Agent)。
五、技术栈
- PySide6— 桌面 UI
- ONNX Runtime— 多 provider 视觉/文本 embedding
- Lance— 本地向量存储与检索主路径
- FFmpeg— 抽帧、导出
- VLC— 预览播放
实现细节、模块划分、数据流:全在 GitHub 开源,比文章里贴代码实在。
初版文章里的代码示例已过时,以仓库为准。
六、给还在做本地 AI 工具的人
如果你也在做桌面端 + 本地模型的小工具,几条亲身感受:
- 先让「一个场景跑通」,再谈架构;VideoSeek 第一版就值回票价。
- 索引/存储会咬人——库一大、要删要迁要分 scope,越早想清越好。
- 用户要的是「找对了」,不是「向量检索原理」;截图定位、chunk、预览比再快 10ms 重要。
VideoSeek 还会继续成长。欢迎试用、提 issue、或者在群里反馈。
链接
| GitHub | https://github.com/6v17/VideoSeek |
| Windows 安装包 | https://www.lv17.top/ |