1实现原理 · 为什么它能做到
五条外科规则先立边界:改源不改成片、只重渲受影响场景、从当前批准时间线重建装配、不重设计/不重定时/不重同步无关段、宣布完成前搜索重复与 carryover 帧。
- Patch source artifacts, not the final MP4, when source scenes and assembly scripts exist.
QA 序列固定五段:探针成片(时长/分辨率/帧率/音轨/采样率/声道)→ 抽证明帧(场景边界、改动时刻、字幕样式帧、结尾 CTA)→ 做接触表(含改动前后对比)→ 查音频(旁白在、音乐该响处可听、结尾静音或淡出正确、裁剪后无吞词)→ 查主题与文本(过期颜色、carryover 重复标签、logo 与产品录屏未被误改色)。
5. Check theme and text.
用户点名时间戳要三帧取证(该时刻 + 略前 + 略后),且必须在成片上验、不能只验源场景;若同一视觉出现在下一场景,还要抽边界帧。
- Extract a frame at that exact time.
三类安全替换各有程序:音频(探旧新时长→同长则换路径重建、略差则决定 tempo 适配或重定时视觉、确认下游场景起点不动除非要求、措辞变了要重生成字幕)、文本(改源→搜下一场景 carryover 文案→重渲→重建→在可见时刻抽帧)、主题(用主题扫描器、只改可编辑源、不染 logo 与录屏、查 SVG、查下一场景 carryover)。
- Search next scene for carryover copy.
先搜索再动手:搜索所有源场景文件里的文本或颜色、装配脚本里的音频路径与时长、字幕脚本里的旧措辞;只在需要更新公开文档时才搜 templates/examples;生成物一律不搜(除非做视觉 QA)。
- Ignore generated renders unless doing visual QA.
QA 输出包固定:probe 文本或控制台摘要、proof-*.png、contact-sheet.jpg、moving sync 用的 preview-*.mp4、最终渲染路径;并注明生成物不必入库(除非是公开示例)。
preview-*.mp4` for moving sync checks.
定义停止条件:改动与已锁场景批准冲突、可见末帧的源资产找不到、文本或音频改动隐含未批准的脚本变更、logo 改色但品牌归属不明——遇到就停下来问,否则做最小安全改动并验证。
- A text/audio change implies a script change the user has not approved.
2核心能力
3外部依赖
| Kind | Dependency / Endpoint |
|---|---|
| cli | ffprobe / ffmpeg(经仓库脚本间接依赖:探针与抽帧、接触表合成;缺失即 SystemExit) |
| package | 仓库根脚本 scripts/probe_media.py(ffprobe JSON 封装:时长/体积/码率/视频编码与分辨率/帧率/像素格式/音频编码/采样率/声道) |
| package | 仓库根脚本 scripts/extract_proof_frames.py(按 -ss 精确抽帧并可拼接触表)与 scripts/make_contact_sheet.py |
| package | 仓库根脚本 scripts/scan_theme_colors.py(按允许色白名单扫文本源文件,跳过 node_modules/.git/renders/snapshots/assembly/dist/build,发现 review 项时退出码 1) |
| package | 仓库根脚本 scripts/build_ass_captions.py(字幕)与 scripts/timeline_manifest_to_ffmpeg.py(清单转装配计划) |
| package | 模板 templates/change-request.md(收尾小改动前必须先填:改动内容、保留项、实现规则、证明表、验收标准) |
4管控建议与判定依据
- scripts/: 执行本地脚本或命令: (由宿主 agent 执行,均位于仓库根 scripts/,非本 skill 目录自带)scripts/probe_media.py —— 调 ffp
- 本地工作目录: 文件读写与工件输出: probe 文本或控制台摘要(QA 输出包)
5第二遍独立确认
- [ok] 本 skill 的执行面「无网络」是否成立(逐个脚本核对) — 六个脚本的 import 只有 argparse/csv/json/re/shutil/subprocess/pathlib(scan_theme_colors 另用 re/pathlib),无 urllib/requests/socket/http;子进程调用仅 ffprobe/ffmpeg,参数为本地路径。故无素材外发、无端点查询,不构成黄档或橙档。
- [ok] SKILL.md 点名的六个脚本是否都真实存在 — pin 内 scripts/ 下有 build_ass_captions.py、extract_proof_frames.py、make_contact_sheet.py、probe_media.py、scan_theme_colors.py、timeline_manifest_to_ffmpeg.py——与 SKILL.md 的 Use repo scripts when available 清单逐项对应。
- [ok] 「抽该时刻 + 略前 + 略后」是否可用脚本实现 — extract_proof_frames.py 接受可重复的 --time(label=timestamp 形式),每个时刻用 ffmpeg -ss 精确抽一帧并按序号与标签命名,可直接表达 0.05s 级的前后帧;--contact-sheet 可一次拼出对比表。
- [discrepancy] 本 skill 是否点名了 ffmpeg/ffprobe 本身 — SKILL.md 全文只点名仓库脚本(含名字里带 ffmpeg 的 timeline_manifest_to_ffmpeg.py),未直接写 ffprobe/ffmpeg 命令;CLI 依赖由脚本内部承担(probe_media.py 的 shutil.which("ffprobe")、extract_proof_frames.py 的 shutil.which("ffmpeg") 缺失即报错退出)。使用者需知道脚本依赖 PATH 上的 ffmpeg/ffprobe。
- [ok] 「生成物不入库」与仓库实际忽略规则是否一致 — SKILL.md 的 Generated QA files do not need to be committed unless they are public examples. 与仓库 .gitignore(忽略 renders/、snapshots/、assembly/、captions/*.ass、captions/*.json 与各类视频扩展名)一致。
- [ok] QA 输出包的五个产物是否都有生成路径 — probe 摘要来自 probe_media.py;proof-*.png 来自 extract_proof_frames.py;contact-sheet.jpg 来自 extract_proof_frames.py 的 --contact-sheet 或 make_contact_sheet.py;preview-*.mp4 由宿主用 ffmpeg 生成(文档未点名脚本,属流程项);最终渲染路径由项目输出。除 preview 外均有随包工具。
6结论
47a9915a5d91b665…