用途:让无法直接播放视频的 Claude 通过抽帧加字幕的方式“观看”视频,并输出结构化笔记。仅在用户显式输入字面量 /watch-video 斜杠命令时触发;不会因“看这个视频”之类自然语言或单独的 YouTube 链接自动触发。若想要自动触发,需自行修改 description 行匹配关键词。
主要能力:下载视频、用 ffmpeg 抽取自动缩放 JPEG 帧、拉取带时间戳字幕(优先原生字幕,缺失时回退 Whisper API)、输出列出每帧路径的 Markdown 报告;Claude 读取全部帧并与口播文本对齐后写出笔记。抽帧预算按时长自动缩放,硬上限 100 帧 / 2fps。
依赖:PATH 中需有 ffmpeg、ffprobe、yt-dlp;Python 3.9+。无原生字幕时可选用 Whisper API,在 ~/.config/watch/.env 设置 GROQ_API_KEY(优先,跑 whisper-large-v3)或 OPENAI_API_KEY。
使用方式:先运行 python scripts/setup.py --check 校验依赖,或 python scripts/setup.py 生成 .env 并检查二进制(macOS 经 Homebrew 自动安装,Linux/Windows 打印安装命令)。管线执行:python scripts/watch.py "<youtube-url-or-local-path>"。常用参数:--start T / --end T 聚焦片段(自动在区间内加密 fps);--max-frames N(默认 80,硬上限 100);--resolution W(默认 512);--whisper groq|openai;--no-whisper 跳过转写;--out-dir DIR。脚本打印 Markdown 报告(含标题、上传者、时长、字幕来源、Frames 与 Transcript 分段、Work dir 路径)。随后在单条消息中并行 Read 所有帧路径,对齐时间戳,写出 <work-dir>/<slug>-notes.md,结构含一句话摘要、TL;DR、时间线、关键引语、视觉备注、可选要点。完成后删除工作目录(含完整视频与帧,体积大);若指定了非 tmp 的 --out-dir 需先询问。
限制与注意:YouTube Shorts、年龄限制或会员专享视频 yt-dlp 可能失败,应原样展示其 stderr,不要静默重试。无字幕且无 Whisper 密钥时报告 Transcript: none available,可用 --no-whisper 仅输出帧。本地文件无音轨时 Whisper 抽取会干净报错。超过 30 分钟的视频运行前应与用户确认,建议改用 --start/--end 聚焦。Groq 遇 Cloudflare 403 是已知失败模式,脚本已设自定义 User-Agent。无 Groq→OpenAI 自动回退,需显式传 --whisper openai。禁止凭标题或缩略图编造内容,管线失败要如实说明;不要未读帧就写摘要,也不要跳过清理。管线脚本 vendored 自 bradautomates/claude-video(MIT)。