# video_render_pipeline > スライド画像とナレーション音声から動画を自動生成するパイプラインです。 - Author: e-ld2020 - Repository: SAKAINO-KAORU/Kit-slide-TamaTama - Version: 20260127122211 - Stars: 0 - Forks: 0 - Last Updated: 2026-02-07 - Source: https://github.com/SAKAINO-KAORU/Kit-slide-TamaTama - Web: https://mule.run/skillshub/@@SAKAINO-KAORU/Kit-slide-TamaTama~video_render_pipeline:20260127122211 --- # Video Render Pipeline スライド画像とナレーション音声から動画を自動生成するパイプラインです。 ## 前提条件 1. **環境変数**: `.env` ファイルに `AIRTABLE_TOKEN` を設定 ```bash echo "AIRTABLE_TOKEN=patXXXXX..." > .env ``` 2. **依存関係**: - Python 3.9+ - ffmpeg(ffprobe含む) - requests, pyyaml --- ## ワークフロー(新規プロジェクト) ### Step 1: 素材取得 ```bash # Airtableからレコード名で素材を取得 source .env && python3 .claude/skills/html_slide_pipeline/scripts/fetch_airtable.py \ --record "tamatama 佐藤瞳" \ --output projects/YYYYMMDD_name_recXXX/ ``` **取得されるもの:** - `10_script.txt` - 台本 - `srt/script_subtitles.srt` - 漢字版SRT(SRT_allフィールドから) - `20_srt/v*.srt` - 個別SRT(フォールバック用) - `assets/images/` - スライド用画像 - `assets/audio/` - 音声ファイル ### Step 2: スライド生成 ```bash # HTMLスライド生成(別スキル) # → exports/resolve/DR/png/*.png ``` ### Step 3: タイムライン設定 `20_timeline.json` を作成(または自動生成): ```json { "slides": [ {"file": "path/to/01.png", "duration": 30}, {"file": "path/to/02.png", "duration": 45} ] } ``` ### Step 4: BGMタイムライン設定(オプション) `bgm_timeline.json` でシーン別BGMを配置: ```json { "segments": [ {"name": "opening", "bgm": "opening.mp3", "start": 0, "end": 54, "volume": 0.6}, {"name": "main", "bgm": "main.mp3", "start": 54, "end": 400, "volume": 0.5} ] } ``` ### Step 5: 動画レンダリング ```bash source .env && python3 .claude/skills/video_render_pipeline/scripts/render_video.py \ --project projects/YYYYMMDD_name_recXXX/ \ --bgm-volume 0.8 \ --with-subtitles ``` **出力:** - `exports/final/{name}_final.mp4` - 最終動画 - `exports/final/{name}_final_字幕付き.mp4` - 字幕版 --- ## SRT処理フロー ``` Airtable SRT_all フィールドあり → srt/script_subtitles.srt(漢字版) → fix_subtitles.py スキップ Airtable SRT_all フィールドなし → 20_srt/v*.srt(読み仮名版) → fix_subtitles.py で reading_map.json 変換 → srt/script_subtitles.srt 生成 ``` --- ## オプション一覧 | オプション | 説明 | デフォルト | |-----------|------|-----------| | `--project` | プロジェクトディレクトリ | 必須 | | `--bgm-volume` | BGM音量 (0.0-1.0) | 0.8 | | `--with-subtitles` | 字幕を焼き込む | false | | `--skip-fetch` | 音声取得をスキップ | false | | `--skip-timeline` | タイムライン生成をスキップ | false | | `--skip-subtitles` | 字幕修正をスキップ | false | | `--skip-render` | レンダリングをスキップ | false | --- ## 個別スクリプト ```bash # 音声ダウンロードのみ python3 {path}/scripts/fetch_audio.py --project /path/to/project # タイムライン生成のみ(既存保護) python3 {path}/scripts/create_timeline.py --project /path/to/project python3 {path}/scripts/create_timeline.py --project /path/to/project --force # 上書き # 字幕修正のみ python3 {path}/scripts/fix_subtitles.py --project /path/to/project --offsets "0,183.25,374.62" # BGMミックスのみ python3 {path}/scripts/mix_bgm.py --project /path/to/project --volume 0.8 ``` --- ## プロジェクト構造 ``` project/ ├── .env # AIRTABLE_TOKEN ├── 10_script.txt # 台本 ├── 20_timeline.json # スライドタイムライン ├── bgm_timeline.json # BGM配置(オプション) ├── srt/ │ └── script_subtitles.srt # 最終SRT(漢字版・SRT_allから) ├── 20_srt/ │ └── v*.srt # 個別SRT(読み仮名版・フォールバック用) ├── exports/ │ └── resolve/ │ └── DR/ │ ├── png/ # スライド画像 │ └── audio/ # 音声・BGMファイル └── exports/final/ ├── narration.wav # 結合済みナレーション ├── bgm.wav # 処理済みBGM ├── {name}_final.mp4 # 最終動画 └── {name}_final_字幕付き.mp4 ``` --- ## 読み仮名マッピング `config/reading_map.json` で変換ルールを定義(SRT_allがない場合のフォールバック): ```json { "人名_日本": { "さとうひとみ": "佐藤瞳", "はやたひな": "早田ひな" } } ``` --- ## トラブルシューティング ### AIRTABLE_TOKENエラー ``` AIRTABLE_TOKEN環境変数が設定されていません ``` → `.env` ファイルを確認、`source .env` を実行 ### 403 Forbidden → base_id が正しいか確認(`appA1kriPqw3IhvwE`) ### タイムラインが上書きされた → `--force` なしで実行すると既存タイムラインを保護 ### 字幕が読み仮名のまま 1. `SRT_all` フィールドがAirtableにあるか確認 2. なければ `reading_map.json` に追加 ### BGMがシーンに合わない → `bgm_timeline.json` を作成してシーン別に配置 --- ## 設定ファイル | ファイル | 説明 | |---------|------| | `.env` | AIRTABLE_TOKEN | | `config/reading_map.json` | 読み仮名→漢字マッピング | | `20_timeline.json` | スライドタイムライン | | `bgm_timeline.json` | BGMタイムライン | --- ## 関連ドキュメント - [IMPROVEMENTS.md](IMPROVEMENTS.md) - 改善履歴・課題