引言
"Claude 能读代码、能分析图片,唯独看不了视频——直到这个工具出现。"
这是「每日一个开源项目」系列的第 190 篇。今天的项目是 claude-video —— Brad Bonanno(Solaris Automation)开源的 Claude 技能插件,核心命令是 /watch,让 Claude 真正能"看"视频并回答关于视频内容的任何问题。
/watch https://youtube.com/watch?v=xxx 这个演讲的核心论点是什么?
/watch bug-repro.mov 视频里发生了什么错误?
/watch 产品Demo.mp4 提取所有功能点并整理成列表15,200 颗 Star,MIT 许可。
你会学到什么
- 7 步视频分析流水线的技术设计
- 字幕优先策略:为什么这个设计决策大幅降低成本
- 帧去重的 MAD 算法:16×16 缩略图如何捕捉慢速渐变
- Token 预算自动管理:按视频时长动态调整帧数
- 四档精度模式和参数控制
- 在 Claude Code 和其他 Agent 宿主上的安装方式
前提知识
- 用过 Claude Code 或类似 AI 编程 Agent
- 了解基本的视频概念(帧、转录)
- 不需要了解 Python 或 ffmpeg
问题背景
Claude 支持图片输入,但原生不支持视频。视频文件太大,不能直接塞进上下文;就算能塞,没有转录文本的纯帧序列也会损失大量信息。
现有的"让 AI 看视频"方案通常是:全量下载 → 固定 fps 均匀采样 → 全部帧送给模型。这种方案有三个问题:
- 浪费 Token:一段静止画面会产生大量重复帧,每帧都占 Token
- 忽略音频:没有转录文本,演讲内容、对白、说明全部丢失
- 成本不可控:50 分钟视频固定 fps 采样可能产生数百张图片
claude-video 的方案在每个环节都有针对性的优化。
7 步流水线
视频 URL / 本地路径
↓ [1] yt-dlp 尝试获取字幕
↓ [2] 有字幕?直接用,跳过下载
↓ [3] 无字幕?下载视频,ffmpeg 提取帧
↓ [4] MAD 算法去重,场景变化感知
↓ [5] Whisper 转录音频(Groq 优先)
↓ [6] 帧 + 转录文本送入 Claude 上下文
↓ [7] Claude 回答,清理临时文件关键优化 1:字幕优先,零下载
很多视频平台(YouTube 尤其如此)有原生字幕或 CC 字幕。yt-dlp 在下载视频之前会先尝试获取字幕文件。
如果获取到了字幕:
- 不下载视频,不提取帧,不调用 Whisper
- 解析 VTT 字幕文件,直接作为转录文本
- 整个流程从 37 秒(下载 76MB 视频)缩短到 4.5 秒
一段 49 分钟的 YouTube 视频,transcript 模式只需 4.5 秒,Token 消耗接近零。
关键优化 2:场景感知帧提取
不是按固定 fps 均匀采样,而是检测场景变化——只在画面内容真正发生变化时才取帧。
技术实现:
- ffmpeg 先输出原始帧序列
- 每帧缩至 16×16 灰度缩略图(标准库实现,不需要 Pillow 等额外依赖)
- 计算当前帧与上一个被保留帧的平均绝对差值(MAD,0~255)
- MAD ≤ 2.0:认为是近重复帧,丢弃
- 帧预算上限在去重之后才生效
有一个设计细节值得注意:和"上一个保留帧"比,而不是和"上一帧"比。
这个区别处理的是慢速渐变:
帧A → 帧B → 帧C → 帧D(场景完全切换)
帧A vs 帧B:MAD = 0.5(很相似,B 丢弃)
帧A vs 帧C:MAD = 1.0(还是相似,C 丢弃)
帧A vs 帧D:MAD = 8.0(变化显著,D 保留)如果和"上一帧"比,帧 B、C、D 每帧只和前一帧比较,慢速淡出每步差值都很小,直到最后一帧才超阈值。和"上一个保留帧"比,累计差值会随时间增大,最终正确捕捉到场景切换。
Token 预算自动管理
帧数不是固定的,按视频时长自动调整:
| 视频时长 | 默认帧预算 |
|---|---|
| ≤ 30 秒 | ~30 帧 |
| 30 秒 ~ 1 分钟 | ~40 帧 |
| 1 ~ 3 分钟 | ~60 帧 |
| 3 ~ 10 分钟 | ~80 帧 |
| > 10 分钟 | 100 帧(上限模式) |
每帧的 Token 估算公式:(宽 × 高) / 750。默认 512px 宽的图片,每帧约 197 个 Token。100 帧 ≈ 约 20,000 Token 的视觉输入,加上转录文本,在可控范围内。
超过 10 分钟的视频触发"稀疏扫描"警告,提示用户用 --start/--end 聚焦到感兴趣的时间段。
四档精度模式
通过 --detail 参数控制:
| 模式 | 帧数上限 | 速度 | 适合场景 |
|---|---|---|---|
transcript | 0 帧 | ~4.5 秒 | 演讲、播客、纯语音内容 |
efficient | 50 帧 | ~0.5 秒 | 快速预览,了解大概 |
balanced(默认) | 100 帧 | ~21 秒 | 日常使用均衡点 |
token-burner | 无上限 | ~21 秒 | 完整覆盖,不在乎成本 |
# 快速摘要一个演讲(只要字幕,不要帧)
/watch talk.mp4 --detail transcript 总结核心论点
# 快速扫一眼一个视频
/watch demo.mp4 --detail efficient 有什么功能?
# 分析 bug 录屏,需要完整帧信息
/watch bug.mov --detail token-burner 发生了什么错误?聚焦模式
对长视频,可以只分析某个时间段,帧密度更高,成本更低:
# 只看 5:30 到 8:00 之间的内容
/watch lecture.mp4 --start 5:30 --end 8:00 这段讲了什么?
# 精确时间戳抓帧(适合分析特定截图)
/watch product.mp4 --timestamps 1:20,3:45,6:10 这三个时刻各显示了什么?
# 提高分辨率(读屏幕上的文字时需要)
/watch screen-recording.mov --resolution 1024 读取代码内容支持的视频来源
通过 yt-dlp,支持 50+ 平台:YouTube、Loom、TikTok、X(Twitter)、Instagram、Bilibili、Vimeo 等。
也支持本地文件:.mp4、.mov、.mkv、.webm。
安装
Claude Code(最简单):
/plugin marketplace add bradautomates/claude-video
/plugin install watch@claude-videoCodex / Cursor / GitHub Copilot / Gemini CLI 等:
npx skills add bradautomates/claude-video -gclaude.ai 网页版:
下载 watch.skill 文件,在设置 → 功能 → 技能里上传。
首次运行自动检测并安装系统依赖:
- macOS:通过
brew自动安装 yt-dlp 和 ffmpeg - Linux:打印对应的
apt/dnf命令 - Windows:打印
winget命令
API Key 配置
| 能力 | 需要 | 费用 |
|---|---|---|
| 下载 + 原生字幕 | 无需 API key | 免费 |
| Whisper 转录(首选) | Groq API Key | 极低价,极快 |
| Whisper 转录(备选) | OpenAI API Key | 标准定价 |
| 禁用转录 | --no-whisper | 免费,仅帧 |
没有 Groq / OpenAI key 的情况下,用 --no-whisper 仍然可以分析视频画面内容,只是没有语音转录。
典型使用场景
竞品分析:
/watch 竞品产品Demo.mp4 列出所有功能点和界面设计特点Bug 诊断:
/watch bug-repro.mov 描述错误发生的完整过程,界面上显示了什么视频笔记:
/watch 培训视频.mp4 --detail balanced 提取关键知识点,整理成带时间戳的笔记内容去水分:
/watch 广告视频.mp4 --detail transcript 去掉营销用语,提取实质信息项目地址与资源
- GitHub: bradautomates/claude-video
- 作者: Brad Bonanno,@bradbonanno
- 公司: Solaris Automation
总结
claude-video 的技术设计体现了一个好的工程判断:在每个环节找到最低成本的路径,而不是暴力解决问题。
字幕优先把最常见场景(有字幕的 YouTube 视频)的成本压到接近零;MAD 帧去重消除了静止画面的冗余 Token;按时长动态调整帧预算让短视频密集覆盖、长视频不超限。这三个优化叠加起来,使得它的实际 Token 消耗比"固定 fps 采样"方案低一个数量级。
15,200 Stars 的增长速度说明"让 AI 看视频"是一个真实需求,而不是 demo 项目。支持 50+ Agent 宿主的多平台设计,也说明作者认真考虑过生态兼容性。
探索 PrimeSkills —— 精选 AI Agent 与技能的市场,每一个都经过真实企业工作流验证,去掉浮夸,留下真正有用的。
欢迎访问我的个人主页,发现更多有价值的见解和有趣的产品。