1仕組みと動作原理
タイミングの真実のソース(Source of Truth)は「最新の承認済みナレーション音声+シーンレンダリング」に厳格に固定され、古い完成品からのタイミング逆算は明示的に禁止されています。これは、全工程におけるすべてのリタイミング、字幕、音楽の決定における共通の基準となります。
- Use the latest approved narration audio as timing source.
「最小限の介入」を徹底:全体の一律速度変更をデフォルトとせず、シーンの特性に応じた段階別戦略(全区間 setpts / 区間リタイミング / 無音+静止フレーム挿入 / わずかな atempo 調整 / プロダクトモーメント直前のみのリタイミング)を適用します。
Choose the smallest timing intervention:
いかなる決定の前にもプローブを実施:ffprobe またはリポジトリ備え付けのプローブスクリプトを使用し、各クリップの尺、フレームレート、解像度、音声トラックの有無、サンプリングレート、チャンネル数を事前に測定します。
- Duration. - Frame rate. - Resolution. - Audio stream presence.
アセンブリ順序において、字幕を「BGMなしナレーションマスター」に固定:narration-only master を先に組み立て、そこから字幕生成・焼き込み、BGMトラック構築、音声ミキシングを行い、最終出力およびプレビューを出力します。
3. Generate captions from narration-only master.
セグメントの分割点はセマンティックイベントに従って決定し、均等時間分割を明確に禁止:シーン転換、プロダクトモーメント、課題の提示、グラフの節目、タイトル表示、末尾の静止、ナレーションの休止に合わせます。
Avoid splitting on arbitrary equal chunks.
プレビュー動画は全編再レンダリングしない:今回の変更の影響を受けるセンシティブな箇所(ナレーション更新箇所、デモ転換、課題タイミング、字幕スタイル確認区間、ラスト10秒、変更されたシーン境界)のみを断片として出力します。
Generate preview clips for:
2コア機能
3外部依存関係
| Kind | Dependency / Endpoint |
|---|---|
| cli | ffmpeg(setpts / trim / tpad / atempo / apad / atrim / concat / fps / scale / setsar),走 filter_complex 显式拼装 |
| cli | ffprobe(探测时长/帧率/分辨率/音轨/采样率与声道) |
| package | 仓库根确定性脚本 scripts/probe_media.py 与 scripts/timeline_manifest_to_ffmpeg.py(本 skill 以「this repo's media probe script」泛指,非自身目录自带) |
| package | 模板 templates/timeline-manifest.example.json(记录目标时序的 JSON 结构) |
| package | 输入素材:最新批准的旁白音频与场景渲染(用户/项目本地提供,非外部服务) |
4推奨統制措置と判定根拠
- scripts/: ローカルスクリプトまたはコマンドの実行: (ホストエージェントにより実行)ffmpeg コマンドライン:setpts / trim / tpad / atempo / apad / atrim / concat
- 本地工作目录: ファイル読み書きとアーティファクト出力: プロジェクト内 renders/ のシーンおよび最終 MP4、assembly/ のアセンブリスクリプトまたはコマンドプラン、captions/ の字幕ファイル
5二重目の独立検証
- [ok] 「外部依赖只有本地 CLI」是否成立(决定蓝档还是黄/橙档) — 本目录正则扫描无 http(s)://、无 fetch/requests、无 token/env/cookie;SKILL.md 只出现 ffprobe 与 this repo's media probe script,references 只出现 ffmpeg filter 片段。不存在素材外发或端点查询,故落蓝档。
- [ok] ffmpeg 命令模板是否真能跑(不是示意伪代码) — references/ffmpeg-retiming.md 给的是标准 filtergraph 语法(setpts=factor*(PTS-STARTPTS)、tpad=stop_mode=clone:stop_duration、atempo、concat=n=...),可原样接进 -filter_complex;缩放/fps/format 同段给出,属可执行模板。
- [discrepancy] SKILL.md 的时间线清单字段与 templates/timeline-manifest.example.json 是否一一对应 — SKILL.md 列了扁平 11 项(Scene ID / Source render path / Source duration / Target duration / Audio path / Audio trim start-end / Inserted silence / Hold frames / Segment retime ratios / Global scene start / Proof timestamps),模板 JSON 却是嵌套结构:project{name,width,height,fps,output} + segments[{id,video,source_duration,target_duration,audio,strategy,maps}] + captions{} + music{} + proofs[]。差异在于「插入静音/保持帧/分段重定比」被折叠进 strategy+maps(maps 里用 hold_source_time 表达保持帧),「全局场景起点」由脚本按目标时长累加算出而非显式字段,「证明时间戳」在 proofs[] 而非 segment 内。按 SKILL.md 的字段名手写 JSON 不会与模板同构,照抄者需以模板为准。
- [discrepancy] 「this repo's media probe script once available」是否说明探测脚本当前不存在 — 措辞(once available)把探测脚本当成「将来可能有」,但 pin 内仓库根已存在 scripts/probe_media.py(ffprobe -print_format json 的封装,输出时长/体积/码率/视频编码与分辨率/帧率/像素格式/音频编码/采样率/声道),且 render-qa-and-surgical-changes 明确点名它。属文档措辞落后于仓库状态,不影响行为,但会让读者低估可用工具。
- [ok] 与 captions-and-music-bed 的职责是否重叠冲突 — 本 skill 只把「生成字幕/建音乐床」写进组装顺序的第 3-6 步(顺序约束),字幕规则与 ducking 判据全部留给 captions-and-music-bed,无重复定义。
6結論
099bc62047c52f2e…