SRT-Driven Video(SRT 駆動動画パイプライン)
音声原稿をコード生成されたビジュアル動画に変換します。SRT を唯一の時間基準とし、5 つのフェーズで進行します。各フェーズ終了時に一時停止し、ユーザーの確認を待ちます。
環境と依存関係
- Windows: Playwright(
channel="msedge"、ローカル Edge を使用して Chromium のインストールを省略)+ imageio-ffmpeg(ffmpeg を提供。ffprobe は含まず、ffmpeg -iの stderr から仕様を解析)。 - 依存関係のインストール:
pip install playwright imageio-ffmpeg(スクリプト内で ffmpeg のパスを自動設定)。 - 本スキルの scripts/ はすべて Windows で実証済み。Linux/macOS では
channel="msedge"を削除し、システムの ffmpeg を使用してください。
5 フェーズ概要
| フェーズ | 成果物 | 確認ゲート |
|---|---|---|
| 0 アウトライン | outline.md + 決定表 | ユーザーがアウトラインと決定を確認 |
| 1 原稿+SRT | script.md / subtitles.srt / 講演者メモ.md | ユーザーが原稿を確認 |
| 2 ストーリーボード | storyboard.json(check_timeline.py 必須通過) | ユーザーがストーリーボードを確認 |
| 3a 最初のシーン+コンポーネントライブラリ | assets/shared/ + scene-001 低解像度サンプル | ユーザーがスタイルを決定してから一括処理 |
| 3b シーンごとの一括レンダリング | scenes/scene-NNN/scene.mp4 × N | ユーザーが重要なシーンをレビュー |
| 4 結合・最終出力 | output/final.mp4 + cover.png | ユーザーが最終動画を確認 |
詳細なフロー、決定表のフィールド、よくある落とし穴(imageio-ffmpeg の filter_complex_script 非対応、alimiter の level トラップなど)については references/pipeline.md を参照してください。
3 つの重要な契約(省略不可)
- SRT 時間基準: ストーリーボードの境界は字幕の境界と一致し、合計時間の誤差は 0.1 秒以内。
python scripts/check_timeline.py <project_dir>で各フェーズごとに再チェック。 - WORKLOG による引継ぎ: プロジェクトルートに
WORKLOG.mdを作成(テンプレートは references/worklog-template.md)。セッションをまたぐ唯一の状態管理ファイル。決定表が確定したら勝手に変更不可。フェーズ 3/4 以降、ベースラインファイル(outline/script/SRT/講演者メモ/storyboard/assets/shared/scenes)は固定。 - フェーズ確認ゲート: 各フェーズ終了時に報告後、一時停止。ユーザーが明示的に確認してから次のフェーズに進む。
シーンレンダリング(フェーズ 3)
各シーンは独立した HTML ページで、window.setTime(t) による決定論的レンダリングを実装(すべてのアニメーションは t の純関数)。字幕の焼き込みは統一契約要素 div#subtitle を使用。完全な開発契約、品質チェックフロー(check_frames.py によるキーフレーム結合)、デザインのガイドラインについては references/visual-authoring.md を参照してください。
スターターテンプレート: assets/neon-theme/(すでに確定済みのサイバーネオン風 theme.css + components.js。パーティクル、文字単位のフライイン、データカード、比較バー、リスクカラーフラグ、トランジション、字幕コンポーネントを含む)——同じスタイルを希望する場合は、プロジェクトの assets/shared/ にコピーして使用。他のスタイルはこれを構造の雛形としてください。
python scripts/render_scene.py scenes/scene-001 --duration 10.5 --fps 30 --size 960x540 # 低解像度サンプル
python scripts/check_frames.py scenes/scene-NNN --times 0.5,3,6,9.2 # レンダリング前品質チェック
python scripts/render_all.py . # 一括全レンダリング
python scripts/render_all.py . --no-subtitle --outdir output/nosub # 字幕なしバリエーション
python scripts/concat_final.py . # 結合 + カバー画像
オプションの効果音モジュール(デフォルト OFF)
ユーザーが明示的にカンペに合わせた効果音を希望する場合のみ有効化。その場合、フェーズ 0 の決定表でロックします。素材は Freesound CC0(一つ一つライセンス確認)から取得。タイムラインは assets/sfx/mix_timeline.json に記録し、事前にユーザーにレビューを依頼。納品は次の 2 つのうち 1 つを選択: FFmpeg 自動ミックス(mix_sfx.py)、または剪映(CapCut)用ポイントリストのエクスポート(make_cue_sheet.py)でユーザーが手動追加——後者の方が実用的に安定。完全なフローは references/sound.md を参照してください。
参考外部スキル/ツール
- vibe-motion/sound(GitHub、プロジェクト tools/sound/ にクローン): Freesound 検索/ダウンロード CLI。リポジトリにライセンスなし、内部ダウンロードツールとしてのみ使用。ライセンスは Freesound 各効果音の CC0 宣言に準拠。
納品仕様
final.mp4: 1920×1080 / 30fps / h264 / yuv420p、再生時間は SRT の合計と正確に一致。cover.png はクライマックスの静止フレーム(実測によるフレーム抽出で位置特定)。再生時間、フレーム数、仕様、音声トラックのレベルを検証後、WORKLOG を更新してから報告。