1仕組みと動作原理
まず5つの外科手術的ルールで境界を設定する:完成品ではなくソースを修正する、影響を受けたシーンのみを再レンダリングする、承認済みの現在のタイムラインからアセンブリを再構築する、無関係なセグメントの再デザイン/再タイミング/再同期を行わない、完了を宣言する前に重複や持ち越し(carryover)フレームを検索する。
- Patch source artifacts, not the final MP4, when source scenes and assembly scripts exist.
QAシーケンスは5段階に固定:完成品のプローブ(再生時間/解像度/フレームレート/オーディオトラック/サンプリングレート/チャンネル)→ プルーフフレーム抽出(シーン境界、変更箇所、キャプションスタイルフレーム、末尾CTA)→ コンタクトシート作成(変更前後の比較を含む)→ オーディオ検査(ナレーションの存在、指定箇所でのBGMの可聴性、末尾の無音/フェードの正確さ、カット後の言葉の途切れがないか)→ テーマとテキストの検査(陳腐化した色、持ち越し重複タグ、ロゴや製品画面録画の誤着色がないか)。
5. Check theme and text.
ユーザーから指定されたタイムスタンプは3フレーム(該当時刻+直前+直後)で証拠を抽出し、ソースシーンだけでなく必ず完成品上で検証する。同一のビジュアルが次のシーンにも現れる場合は境界フレームも抽出する。
- Extract a frame at that exact time.
3つの安全な置換手順:音声(新旧の長さをプローブ → 同長ならパスを差し替えて再構築、差異があればテンポ調整またはビジュアルの再タイミングを判断、要求がない限り後続シーンの開始点を動かさない、文言変更時は字幕を再生成)、テキスト(ソース修正 → 次のシーンの持ち越し文言を検索 → 再レンダリング → 再構築 → 表示時刻でフレーム抽出)、テーマ(テーマスキャナーを使用、編集可能なソースのみ修正、ロゴや画面録画は除外、SVGを確認、次シーンの持ち越しを確認)。
- Search next scene for carryover copy.
作業前の事前検索:すべてのソースシーンファイル内のテキストや色、アセンブリスクリプト内の音声パスと長さ、字幕スクリプト内の古い文言を検索する。公開ドキュメントの更新が必要な場合のみ templates/examples を検索し、生成物は一切検索しない(ビジュアルQA時を除く)。
- Ignore generated renders unless doing visual QA.
QA出力パッケージを固定:プローブテキストまたはコンソール要約、proof-*.png、contact-sheet.jpg、動的同期検証用の preview-*.mp4、最終レンダリングパス。生成物はGitにコミット不要(公開サンプルを除く)であることを明記する。
preview-*.mp4` for moving sync checks.
停止条件の定義:ロックされたシーンの承認と衝突する変更、末尾フレームのソース素材が見つからない、テキストや音声の変更が未承認のスクリプト変更を示唆している、ロゴの色変更だがブランド帰属が不明確——これらに遭遇した場合は作業を止めて確認する。それ以外は最小限の安全な変更を実施して検証する。
- 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/: ローカルスクリプトまたはコマンドの実行: (ホストエージェントにより実行。すべてリポジトリルートの scripts/ に配置され、本スキルディレクトリには非同梱)scripts/probe_media.py —— ffprobe を呼び出し
- 本地工作目录: ファイルの読み書きと成果物出力: プローブテキストまたはコンソール要約(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…