十六科技视频速读拆解台(video-deconstruct-viewer)
你没有视频输入;这个技能给你一双眼睛。一条 Python 管线先拿字幕(平台原生字幕优先,用户字幕文件次之,通用转写接口兜底),按需下载视频,按场景抽帧并去重,把「画面帧 + 时间戳台词」双通道证据交给你,由你对齐时间轴、产出结构化分析。
解析 SKILL_DIR(任何命令前先做)
下文所有 python 命令都运行 SKILL_DIR/scripts/ 下的脚本。SKILL_DIR = 本 SKILL.md 所在目录的绝对路径。开跑前守卫一次:
SKILL_DIR="<本 SKILL.md 所在目录绝对路径>"
test -f "$SKILL_DIR/scripts/watch.py" || echo "ERROR: 找不到 scripts/watch.py,请核对 SKILL_DIR"
Windows 下命令用 python(托管解释器绝对路径优先),不是 python3。
第 0 步 — 环境预检(每次会话首轮跑一次,成功即静默)
python "$SKILL_DIR/scripts/setup_check.py"
- 返回
"can_proceed": true→ 环境就绪,直接进第 1 步,不要向用户播报「环境就绪」。 - 退出码 2 /
"needs_install"→ 自装失败(多为网络中断),原样重跑一次即可(pip 已带--no-cache-dir --target,装进技能内_lib,不污染全局)。 - 依赖全部装进
scripts/_lib/,zip 包本身零二进制。
何时使用
- 用户给一个本地视频文件(.mp4/.mov/.mkv/.webm 等)让分析、拆解、提问
- 用户给一个视频链接(主流视频平台的公开视频)让看内容
- 用户说「拆解这个视频」「提取口播」「这个视频讲了什么」
细节档位(成本拨盘,默认 balanced)
| 档位 | 行为 | 帧上限 | 适用 |
|---|---|---|---|
transcript |
只出字幕不抽帧,有原生字幕时不下视频 | 0 | 先摸内容结构 / 只要口播稿 |
efficient |
快速关键帧 | 30 | 粗看画面结构 |
balanced(默认) |
场景感知抽帧 + 去重 | 60 | 大多数拆解任务 |
deep |
场景感知不设上限(超 150 帧软警告) | 无 | 逐帧级精细分析 |
全片帧预算按时长自动缩放(≤30s 约 30 帧 → 3-10 分钟约 80 帧 → 10 分钟以上稀疏扫描并警告);硬上限 2fps;帧宽默认 512px,需要读屏上文字才升 1024。
调用流程
第 1 步 — 解析输入。 分离视频源与问题:拆解一下这个视频 <路径或链接> → source = 路径/链接,任务 = 拆解。
第 2 步 — 跑管线:
python "$SKILL_DIR/scripts/watch.py" "<source>" --detail balanced
可选参数:
- --detail transcript|efficient|balanced|deep — 成本拨盘(见上表)
- --start T / --end T — 聚焦片段(接受 SS/MM:SS/HH:MM:SS),片段预算自动加密采样;长视频用户只问某一段时,聚焦远胜全片稀扫
- --timestamps 4:32,7:10 — 指示语补帧(见下)
- --max-frames N — 压帧数上限
- --subtitle-file path.srt — 用户自备字幕(SRT/VTT)
- --width 512 — 帧宽
- --no-dedup — 保留近重复帧(仅当用户要判断逐帧微动)
- --work-dir DIR — 指定工作目录(默认临时目录)
第 3 步 — 读帧。 用宿主的图片读取能力把报告里列出的每一帧路径都读进来(并行读,帧按时间序带 MM:SS 时间戳),与字幕行按时间对齐。
第 4 步 — 产出交付。 两类任务两种产出:
问答题(用户带了具体问题):直接回答,引用时间戳。
拆解任务(默认产出结构化报告):
【基础信息】时长 / 分辨率 / 来源 / 转写来源
【钩子段 0-10s】逐 3 秒切一刀:画面是什么、说了什么、留人的钩子是什么类型
【节奏表】每 3-5 秒一个刺激点:时间戳 | 画面变化 | 台词动作 | 刺激类型
【五段结构映射】钩子→痛点→方案→纠偏→金句 各段对应的时间轴区间
【口播还原】按一句一行整理台词(对齐提词器格式),无台词则省略
【可复用手法】3-6 条本视频可迁移的具体手法
即使 transcript 档没有帧,也交结构化综述(结构/关键时刻/台词要点 + 时间戳),不要把全文转写原样贴进对话——用户明确要才给原文。
指示语补帧(transcript-cue frames)
场景抽帧会漏掉讲者用手指着屏幕说的「看这里」「注意」「重点来了」——指向动作往往是画面低变化时刻。做法:
- 先跑一遍拿到时间戳字幕(
--detail transcript最省) - 扫台词里的指示语——中文(看这里/注意看/重点来了/注意/看到没有)与英文(look here/as you can see/notice this),是否算指示语是判断题,不要用正则硬套
- 拿到媒体路径后补一刀:
--timestamps 4:32,7:10(绝对时间)。指示语帧先于档位帧预留名额,不会被均匀采样挤掉
转写降级梯(如实告知,不装能)
- 平台原生字幕(免费,首选)——拉到就用
- 用户自备字幕——
--subtitle-file直接读 SRT/VTT - 通用转写接口(可选)——环境变量配置,不绑定服务商:
TRANSCRIBE_API_BASE(如https://xxx/v1)、TRANSCRIBE_API_KEY、TRANSCRIBE_MODEL。兼容业界通用的/audio/transcriptions路径即可 - 都没有 → 纯画面流模式,报告里写清「本视频无可用台词」,不要编台词
失败模式
| 症状 | 处置 |
|---|---|
| 预检失败(退出码 2) | 原样重跑一次 setup_check.py;仍失败则如实告知网络问题 |
| 链接下载失败(登录墙/地区锁) | 直说原因,不反复重试;建议用户提供本地文件 |
| 无字幕且未配置转写接口 | 纯画面流 + 明确告知;提示可用 --subtitle-file 或配置转写接口 |
| 长视频警告 | 在回答里确认,主动建议 --start/--end 聚焦 |
| 场景帧太少(画面近乎静止) | 脚本已自动回退均匀采样,无需处理 |
Token 纪律
- 帧是大头:60 帧 512px 约合数万图像 token;升 1024px 约翻四倍,仅读屏上文字时用
- 本会话已看过这个视频,用户追问时不要重跑——上下文里已有帧和台词,直接答
- 转写全文只进工作目录,对话里只给结构化产出
安全与边界
本技能做什么:本地运行 yt-dlp(仅请求公开数据,不登录不带 cookie)下载视频与拉取原生字幕;本地运行 ffmpeg 抽帧与提取音频;仅在用户配置了转写接口时把提取的音频发往该接口;帧与中间产物写在工作目录。
本技能不做什么:不上传视频本体;不访问任何平台账号;不在输出中打印密钥;不在公开字段提及任何具体服务商名。
收尾:报告里会给出工作目录路径。用户不再追问该视频时删掉它;可能追问就留着。
脚本清单
scripts/watch.py(编排入口)· scripts/frames.py(抽帧+去重)· scripts/captions.py(字幕解析+通用转写)· scripts/setup_check.py(预检+自装依赖)
首次使用前建议过一遍脚本内容确认行为。