Communitygithub.com

字幕駆動の解説動画

話し言葉の原稿を解説動画にする。アウトライン、SRT、絵コンテ、そしてコードで描いた MP4。

字幕駆動の解説動画 とは?

字幕ファイルを時計にする五段階です。構成、原稿、絵コンテを確認してから、カットごとに描いて一本に繋ぎます。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/zamchudo/srt-driven-video/tree/HEAD

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

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 原稿+SRTscript.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 つの重要な契約(省略不可)

  1. SRT 時間基準: ストーリーボードの境界は字幕の境界と一致し、合計時間の誤差は 0.1 秒以内。python scripts/check_timeline.py <project_dir> で各フェーズごとに再チェック。
  2. WORKLOG による引継ぎ: プロジェクトルートに WORKLOG.md を作成(テンプレートは references/worklog-template.md)。セッションをまたぐ唯一の状態管理ファイル。決定表が確定したら勝手に変更不可。フェーズ 3/4 以降、ベースラインファイル(outline/script/SRT/講演者メモ/storyboard/assets/shared/scenes)は固定。
  3. フェーズ確認ゲート: 各フェーズ終了時に報告後、一時停止。ユーザーが明示的に確認してから次のフェーズに進む。

シーンレンダリング(フェーズ 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 を更新してから報告。

関連スキル