{"id":"video-understanding","name":"video-understanding","summary":"ビデオ解析は理解インデックスとして構成されており、シーン検出、ASR転写、シナリオごとのVLM観察、ミュートウィンドウ、統合されたタイムライン、執筆ブリーフなどが含まれます。","body":"## 1. 定位\n\n本技能把源视频转成 Agent 与下游阶段可读取的理解索引。它的创作角色是**素材观察员 / 场记**，不是导演：\n\n- 先观察，再解释；事实与推断分开。\n- 除了“发生了什么”，还要让下游看见知识、权力、目标、关系或情绪在哪一刻变化。\n- 标出由谁的 POV 承载变化、哪个反应或表演不可替代，以及哪里存在完整台词/动作的自然剪辑边界。\n- 证据不足时保留不确定性，不制造戏剧结论。\n\n## 2. 处理阶段\n\n1. **场景检测**：写 `scenes.json`，包含切点、时长和废片段过滤结果。\n2. **抽帧**：为视觉分析提取代表帧。\n3. **ASR**：通过 `mimo-v2.5-asr` 写时间戳对白 `asr_result.json`。\n4. **静音检测**：写 `silence_periods.json`，标注安静窗口与 `has_speech`。\n5. **VLM 观察**：写 `vlm_analysis.json`，包含场景描述、深层分析和 `frame_facts`。\n6. **时间线融合与创作 brief**：写 `timeline_fusion.json`、`asr_writing_chunks.json` 和 `agent_narration_brief.md`。\n\n各阶段只有在输出产物与 provenance sidecar 同时匹配当前视频及影响结果的设置时才会复用；`--force` 强制重算。\n\n## 3. 环境要求\n\n```bash\n# ffmpeg: brew install ffmpeg | apt install ffmpeg | choco install ffmpeg\nexport MIMO_API_KEY=***\n```\n\nASR 使用 `mimo-v2.5-asr`；VLM 使用 `mimo-v2.5`。`--skip-asr` 可跳过对白转写，但完整理解仍需要 `MIMO_API_KEY` 运行 VLM。`--mimo-video-overview` 可开启按场景块的视频概览。\n\n若 `work_dir/background_research.json` 存在，本技能会把剧情梗概和角色名折入 VLM 上下文；`--context` 可补充一条简短提示。\n\n下面的 `scripts/...` 均相对于本技能目录。若执行器从仓库根目录启动，请给脚本路径加上本技能的绝对目录。脚本不从其他技能目录读取文件；外部输入仅限命令显式传入的视频、参数与 `work_dir` 产物。\n\n## 4. 运行命令\n\n```bash\npython3 scripts/understand.py <video> --work-dir <work_dir> \\\n  [--context \"节目名/角色名\"] [--scene-threshold 0.1] [--skip-asr] [--mimo-video-overview] [--force]\n```\n\n## 5. 输出契约\n\n| 文件 | 内容 |\n|------|------|\n| `scenes.json` | 场景切点、起止时间与时长 |\n| `asr_result.json` | `[{start, end, text}]` 时间戳对白 |\n| `vlm_analysis.json` | 逐场景描述、深层分析与 `frame_facts` |\n| `silence_periods.json` | `[{start, end, duration, has_speech}]` 安静窗口 |\n| `timeline_fusion.json` | VLM、ASR 与静音信息的统一时间线 |\n| `asr_writing_chunks.json` | 按句界和场景切分的 ASR 写作块 |\n| `agent_narration_brief.md` | Agent 首先阅读的创作简报 |\n\n后续写作阶段根据创作简报与索引制定方案并写 `narration.json`。\n\n## 6. 参考资料\n\n- 背景调研：`references/research-guide.md`，产出 `background_research.json`。\n- JSON 结构：`references/data-schema.md`。\n\n## 7. 能力边界\n\n- 不写解说词，也不做解说评分；只负责生成理解索引与创作简报。\n- 不剪辑、不配音、不合成视频。\n- 不编造信号无法支持的剧情；当 ASR / VLM 过薄时输出素材警告。\n- 不发布、不调度，只向 `work_dir` 写产物并停止。","author":"@worldwonderer","ownerProfile":null,"authorContacts":null,"sourceUrl":"https://github.com/worldwonderer/video-recap-skills/tree/main/skills/video-understanding","license":"MIT","category":null,"lang":"multi","tokens":999,"stars":0,"calls30d":1,"claimed":false,"visibility":"public","origin":"crawler","version":"0.1.0","createdAt":"2026-08-22","updatedAt":"2026-08-22","files":[{"path":"references/data-schema.md","size":11327,"sha256":"6d55e6132c11463a80163c4c0940546302637f1df6fedfc630d21ad45318e66d"},{"path":"references/prompt-templates.md","size":1708,"sha256":"3bcf521946ae2edb9b3ea305390813a4c2a8bc69923557068e1b193e1cf45772"},{"path":"references/research-guide.md","size":2833,"sha256":"adb44c43a19310ebe1a735832c4d66a816dcda35e98efb478c482f695ab2d9a2"},{"path":"scripts/agent_brief.py","size":24621,"sha256":"e55084231b06aabb9cfd05b7f8bd7e13b594783e7a76403cc96268155fab2b1f"},{"path":"scripts/agent_text.py","size":15030,"sha256":"47bc223d9c063438d1eae6c95512fa19e5cce2ec63ea340f974fd5064661f0d9"},{"path":"scripts/asr.py","size":10474,"sha256":"a8c54f219fa1eee88b08f5367b6147cd0f740844cb1b2698e2855b84ccb8a23f"},{"path":"scripts/brief_context.py","size":16342,"sha256":"4c373ce5ba45cd0283b8adf316f9245c430889da6d61d0ea6c4554df45559f27"},{"path":"scripts/brief_inputs.py","size":10856,"sha256":"904a7423b6b9886176791c2aa2c3d9d88b574bc622879d3bcc51e8fad82dc293"},{"path":"scripts/brief.py","size":370,"sha256":"2a562a02de57fec1a772d411c2e30379e275972c0787e45d49cbed4cab69f49d"},{"path":"scripts/brief_timeline.py","size":17836,"sha256":"1951db6820d8cd0780bb9f86612446e6cf1ec2314b5ab0949d2f17ef0fd1ef90"},{"path":"scripts/consolidate.py","size":24951,"sha256":"e73bb740352d3cb5bdfcd412439897a47c641a1ccd39b64870c02a1e67438e5c"},{"path":"scripts/deslop_qc.py","size":11108,"sha256":"424e0f80859858fce7d499950a8217879a44015dbafeaff35e21030db6c51a93"},{"path":"scripts/detect.py","size":21996,"sha256":"bf639b522c7f01d42430576bbfff44e145f45b2c05f1c61b8124fda6cf564123"},{"path":"scripts/extract.py","size":2559,"sha256":"f13913a7db47a5ce2b8ae9b0bbb526c3ba94b98a8a76975b858685e2a8638d63"},{"path":"scripts/lib.py","size":24517,"sha256":"5b789877c2ea4b6ed1bc95f8d8f11c846cbf7c330168bdcd4e508e26b670e468"},{"path":"scripts/narration_lint.py","size":27712,"sha256":"4fce3fd020783889461b3a4d9b78e30d49234d454c001cc4617266a9547b06c9"},{"path":"scripts/speech_ownership.py","size":7068,"sha256":"0c30e0468b81b5947387f38be1f293357cb9cde2eaab2ecab577958ad26943b6"},{"path":"scripts/storyboard.py","size":21080,"sha256":"5e2f2ca56d0e1c99174ae857f271a57980cead6d4c260688c20dfbffe2e157f1"},{"path":"scripts/timeline_fusion.py","size":7401,"sha256":"cb9389877be260b28777c77b8bd9a34b49bbcf93ee376bd61798f5070a197d69"},{"path":"scripts/understanding_brief.py","size":8286,"sha256":"c95fe9cdf60a9b6647a1b769eb955f440c3fdeef3cd425ea4fcef546c1a895e2"},{"path":"scripts/understanding_cache.py","size":11339,"sha256":"02e06fd7adaf4bf88860aa77162af62ec454ab3cb5ccf4549c6d12a27e2d0b9d"},{"path":"scripts/understanding_runner.py","size":14404,"sha256":"1feea70d1a866591a3d43bbb73fc9f0cbc59bb552a703621b17249ead84b3865"},{"path":"scripts/understanding_storyboard.py","size":6929,"sha256":"da8dbe988303756758a09c78afa4d8e7c36ea574dde6c0093f8db1bd2bdb793c"},{"path":"scripts/understand.py","size":192,"sha256":"b892f6ff9ffd2bf086fbefc97fbd5879b1fe976f430957ffb9a1103f1af54746"}],"requires":{"mcp":[],"tools":[]},"safety":{"flags":[{"code":"net.endpoints","kind":"exfiltration","excerpt":"api.xiaomimimo.com, token-plan-ams.xiaomimimo.com, token-plan-cn.xiaomimimo.com, token-plan-sgp.xiaomimimo.com","message":"bundled scripts reach 4 external host(s)","severity":"warn"}],"scannedAt":"2026-08-22","hasScripts":true,"networkEndpoints":["api.xiaomimimo.com","token-plan-ams.xiaomimimo.com","token-plan-cn.xiaomimimo.com","token-plan-sgp.xiaomimimo.com"]}}