FrameDex: 本地 AI 视频索引的范式

> 一篇 HN ⭐322 热帖的技术拆解

核心洞察: AI 视频编辑工具都解决错了问题。真正的瓶颈不是"不会剪",而是"找不到"。把非结构化视频转为可搜索的纯文本索引,剩下的编辑只是薄薄一层。

背景

作者是在肯尼亚马赛马拉保护区的野生动物摄影师/工程师。一年一半时间拍素材(iPhone、DJI Pocket、无人机、Nikon Z8、Ray-Ban Meta),一半时间写代码(KaribuKit 酒店 SaaS + SimbaStack 咨询)。

积累了一整年未处理的原始视频——文件名全是 IMG_1103.MOV,文件夹名全是 Mara june 2024 backup final FINAL。剪一条 Instagram Reel 需要人肉翻几个小时。

解题路径

❌ 第一次试错:SaaS 方案

Eddie AI + Higgsfield MCP + Submagic + Buffer → $140/月

为什么不行:

🤔 第二次:挖掘已有工具

DaVinci Resolve 21 自带的 IntelliSearch(语义搜索)+ Smart Bins(自动归类)+ 字幕功能已经覆盖了 Eddie AI 70% 的能力。成本降到 $22/月

✅ 第三次:做对了——先建索引

> "AI 编辑器解决的是第二个问题。第一个问题是指数。"

如果编辑器不知道素材里有什么,再好的 AI 也没用。所以作者跳过了编辑器,直接做了索引系统

技术架构

四个约束

#约束理由
1**本地优先**不上传几千 GB 到云端,隐私 + 成本
2**Sidecar 文件**`.description.md` 跟视频文件走,纯文本可 grep,不依赖数据库
3**一次视觉推理全覆盖**一次调用提取所有信息(评分、画质、光线、色调、人脸、关键词、位置、转录、描述)
4**三种后端可选**Claude CLI(免费额度)、Anthropic API(更快)、LM Studio(本地批量)

单视频处理管线


原始视频 (.MOV / .MP4)
    │
    ├── ffprobe ────────────── 元数据(时长、编码、码率)
    ├── exiftool ───────────── GPS 坐标(纬度/经度/海拔)
    ├── Nominatim ──────────── 逆地理编码(GPS → 地点名称)
    ├── ffmpeg ─────────────── 抽帧(5 帧均匀分布,1920px)
    ├── WhisperX ───────────── 语音转录(97 种语言,时间对齐)
    ├── insightface ────────── 人脸检测 + 512 维 ArcFace 嵌入 → SQLite
    └── Gemma 4-31B ────────── 视觉分析 → YAML + 描述 → .description.md

输出示例

文件名:IMG_1103.MOV

生成的 .description.md


rating: 8/10
quality: good
lighting: golden_hour
time_of_day: sunset
colors: [warm, amber, gold]
people_count: 1
faces: [cluster_42]
location: "Mara Hilltop Lodge, Kenya"
gps: [-1.45, 34.95]
transcript: "Look at that elephant... amazing..."
keywords: [elephant, savanna, sunset, safari]
## Description
Wide shot of an elephant on a hill at golden hour. Camera pans from lodge deck to the savanna. Suitable for marketing reels and travel B-roll.

Sidecar 旁边的文件夹还会自动生成 _INDEX.md_INDEX.json 做汇总。

硬件配置

项目规格
笔记本2021 MacBook (Apple Silicon)
模型Gemma 4-31B (4-bit, ~19GB)
实际内存未透露(含 Electron/Claude Code VM/杂项 → 需要 50GB swap)
索引规模>1 年素材,数千条视频

> Apple Silicon 的高内存带宽是 50GB swap 还能跑推理的关键前提。x86 上同样配置会慢到不可用。

应用场景

🎬 剪辑师秒找素材


grep -r "golden_hour" . → 找到所有黄金时刻镜头
grep -r "elephant" .    → 找到所有大象镜头

一条 Instagram Reel 从 1-2 小时降到 15-20 分钟

🌍 远距离协作

作者在马赛马拉(信号有限),远程剪辑师在海外。

🤖 AI 驱动自动化剪辑

Claude Code + DaVinci Resolve MCP:

> "给我剪一条 60 秒 TikTok:狮子喝水 + 日落航拍 + 帐篷内饰,配 BGM"

AI 读 _INDEX.json → 匹配素材 → MCP 操控 Resolve → 出片。

🏨 酒店营销自动化

作者在做 KaribuKit(马赛马拉 lodge PMS):

> "今天天晴 + 有角马迁徙 → 自动找最近一周的角马镜头 + 配文案 + 发 Instagram"

🖼️ 拓展到照片

Roadmap 下一步:从视频拓展到 RAW 照片,结合已有的人脸识别库和 GPS 轨迹,成为本地版 Google Photos——所有元数据都在 plain text sidecar 中。

评论区争议

Confiks 的质疑

> "Gemma 4 31B 4-bit 量化只要 ~19GB,为什么需要 28.4GB + 50GB swap?50GB swap 对 SSD 磨损很大,而且 swap 的时候 Electron apps 全卡死"

作者实情:本地同时跑着 Claude Code(虚拟机)、多个 Electron 应用、模型服务等,系统杂项吃掉很多内存。模型本身不是唯一占用。

carpo 的竞品实现

> "用 Sonnet 4.6 分析 + Haiku 打标签,一小时素材成本 ~$1。用场景检测抽多帧而不是固定 5 帧。"

开源

FrameDex(MIT 协议):https://github.com/Simbastack-hq/framedex

作者正在:

1. 把索引结果接入 DaVinci Resolve 自动化剪辑

2. 拓展到静态照片索引

为什么这很重要

这篇文章的本质是一个 「AI 做对了上游,下游自然变简单」 的经典案例:

从像素提炼到文字 → plain text 万能接口 → UNIX 哲学 + AI 自动化

这不是一个视频工具的故事。这是一个数据管线的设计哲学:先让数据可搜索,再去想怎么用它。

原文: https://blog.simbastack.com/indexed-a-year-of-video-locally/

HN 讨论: https://news.ycombinator.com/item?id=48222733

GitHub: https://github.com/Simbastack-hq/framedex

报告生成:2026-05-22