Gemini 现在能原生嵌入视频,我用它构建了亚秒级视频搜索
文章摘要
SentrySearch 是一个语义搜索工具,让用户能够使用自然语言查询视频内容。与其浏览数小时的录像,用户只需输入想要查找的内容,系统就会返回匹配的剪辑片段。
核心技术方面,系统支持两种嵌入方式:一是 Google 的 Gemini Embedding API,可以直接将原始视频像素处理为向量空间,与文本查询对齐。索引 1 小时的录像大约花费 2.84 美元(默认设置:30 秒分块,5 秒重叠)。二是本地 Qwen3-VL 模型,完全在设备上运行,适合注重隐私的工作流。系统会自动检测硬件能力,在 18GB+ VRAM/RAM 的系统上选择 8B 模型,在受限系统上选择 2B 模型。
工作流程分为三个阶段:首先是分块与预处理,视频被分割成重叠的 30 秒片段(可自定义),每个分块通过 FFmpeg 降采样到 480p、5fps,将约 19MB 的行车记录仪文件压缩到约 1MB。其次是向量存储,嵌入向量存储在 ChromaDB(一个本地向量数据库)中,系统为每个后端/模型组合维护独立索引。最后是搜索与检索,文本查询嵌入到同一向量空间中,与存储的视频嵌入进行匹配,排名靠前的匹配结果自动裁剪并保存为剪辑。
关键特性包括:静态帧跳过功能,通过 JPEG 文件大小比较检测静态内容,跳过冗余嵌入以降低 API 成本;MRL 维度截断,仅保留嵌入向量的前 768 维,减少存储和计算开销;Tesla 元数据叠加功能,对兼容的 Tesla 行车记录仪录像,可将遥测数据(速度、GPS、时间戳)直接烧录到裁剪片段上;以及智能预处理和跳过策略,减少长时间录制中空闲时段的处理开销。
使用方式非常简洁:sentrysearch init 初始化配置,sentrysearch index /path/to/footage 索引视频,sentrysearch search "red truck running a stop sign" 进行搜索。系统需要 Python 3.11+、FFmpeg、Gemini API 密钥(云端)或 GPU/Apple Metal(本地模型)。
性能方面,本地模型推理时间与像素数量成正比,而非视频时长。在 NVIDIA A100 上每个分块预计 2-5 秒,在 RTX 4090 上单个分块推理在个位数秒内完成。系统会在 8-16GB VRAM 的 NVIDIA GPU 上自动应用 4-bit 量化,将内存需求从约 18GB 降至 6-8GB,精度损失极小。
HN 评论精华
隐私与监控担忧:这是讨论中最大的焦点。macNchz 提出,虽然摄像头已经无处不在,但 AI 驱动的索引会创造”全景监狱”般的风险——自然语言参数可以实现对人员和活动的”高度具体”监控。citruscomputing 指出这已经在发生,描述了 Fusus 这个整合了摄像系统和车牌识别的仪表板,支持自然语言查询,还计划集成民用摄像头。robertlagrant 提到在牛津看到警车使用”自动面部识别”。
成本与可行性:作者 sohamrj 承认了隐私担忧,但指出当前的成本和延迟使得持续索引不太实际,并倡导使用开源本地模型。然而 mpalmer 反驳说,国家级行为者可以低成本嵌入,使全年覆盖”仅需 21,900 美元”——对政府来说微不足道。
费用争议:jimmySixDOF 质疑了每小时 2.50 美元的数据。jjwiseman 计算出按 18,000 帧、每帧 0.00079 美元算实际是每小时 14.22 美元。sohamrj 澄清说 API 无论输入帧率如何都只处理 1fps,这是降低成本的关键。
实际应用场景:有人想用它浏览行车记录仪录像而不用取出 SD 卡;有人建议将其集成到视频编辑中,通过 EDL 导出删除特定场景(如”删除所有包含猫的场景”);还有人描述了花数小时翻看安全录像找猫的经历。
有趣的幕后动机:novoreorx 开玩笑说,那个特定的搜索查询——”一辆带自行车架的车在夜间别我”——完全揭示了作者构建这个项目的动机。作者 sohamrj 坦率地确认:”你说得没错。”