name: ig-reel-create description: 過去問パックのカルーセル PNG をベースに 1080×1920 縦型 IG Reels mp4 を生成。Satori で reels サイズの PNG 10 枚再生成 → VOICEVOX TTS → ffmpeg 連結まで自動化。 allowed-tools: Bash, Read, Write
Instagram Reels 自動生成スキル
docs/sns/instagram/{exam}/exam-packs/<year>/pack-<NN>/slide-data.json を入力に、1080×1920 縦型 60-120 秒の IG Reels 動画を完全機械生成する。
前提
- ffmpeg / ffprobe が PATH にある
ffmpeg -version - VOICEVOX エンジンがローカル起動している
docker run --rm -p 50021:50021 voicevox/voicevox_engine:cpu-latest curl http://localhost:50021/version - 対象パックの slide-data.json が新スキーマ(optionExplanations + pointText 必須)
使い方
# 技術士総監(既定)
node .claude/skills/social/ig-reel-create/scripts/ig-reel-create.mjs \
--exam r07-pack-01
# 1級土木(令和7年度)
node .claude/skills/social/ig-reel-create/scripts/ig-reel-create.mjs \
--exam-dir 1級土木 --exam r07-pack-01 --skip-png
# 2級土木(令和7年度 後期=k / 前期=z)
node .claude/skills/social/ig-reel-create/scripts/ig-reel-create.mjs \
--exam-dir 2級土木 --exam r07k-pack-01 --skip-png
引数
| 引数 | 必須 | 既定 | 説明 |
|---|---|---|---|
--exam |
✅ | - | パック ID(例: r07-pack-01)。2級土木は年度に前期/後期の接尾辞が付く(r07z=前期 / r07k=後期、例: r07k-pack-01) |
--exam-dir |
- | 技術士総監 | 試験軸ディレクトリ(1級土木 / 2級土木 等)。docs/sns/instagram/cem/exam-packs/<exam-dir>/<year>/ を参照 |
--speaker |
- | 1(四国めたん) | VOICEVOX speaker ID |
--skip-png |
- | false | PNG 再生成をスキップ(既存 reels/img/*.png を使う)。既存 PNG が 1080×1920 ならこれを付けて Satori 再生成を回避 |
--problem-pause |
- | 3 | problem スライド読み上げ後に挿入する無音秒数(考える間)。0 で無効 |
[!warning] カバー/テンプレ刷新時は
--skip-pngを付けない。 カバーPNGテンプレ(exam-cover-ig)や 09-cta テンプレを更新した後は、PNG から再生成しないと旧テンプレが動画に残る。--skip-pngは「PNG が現行テンプレと一致している」と確信できる時だけ使う。カバーPNGだけ別途更新して動画を再生成しない運用は desync を生むため禁止(yt-shorts-createのassertCoverInSyncガードが派生時に SSIM<0.90 で検知・中断する)。
コミット方針:
reels/script.txtとcaption.txtのみコミット。video.mp4/wav//slide-NN.mp4/_combined.mp4/_empty.ass/concat.txtは再生成可能な派生物で.gitignore済み。wav は R2 退避(npm run upload-sns-r2)、手元に無ければ script.txt から VOICEVOX で再生成(真実源docs/reference/sns-archive-policy.md)。
出力
docs/sns/instagram/{exam}/exam-packs/<year>/pack-<NN>/reels/
├ video.mp4 最終動画(IG Reels として upload 可能)
├ img/{00..09}.png 1080×1920 各スライド PNG(中間ファイル)
├ wav/slide-NN.wav 各スライドの TTS 音声(中間ファイル)
└ script.txt 読み上げ台本(デバッグ用)
工程
- VOICEVOX / ffmpeg の利用可能チェック
- slide-data.json 読み込み(10 slides: cover/problem×4/answer×4/cta)
- PNG 10 枚を
--size reelsで再生成(既存 ig-post-create.mjs 流用) - 各スライドの台本生成(cover/problem/answer/cta 型別)
- VOICEVOX で WAV 10 個生成
- ffmpeg で連結 → mp4
台本テンプレート
| スライド | 台本 |
|---|---|
| cover | 技術士総監:「令和{年度}年度の択一式過去問、{N}番です。全 4 問、答えは動画内で発表します」/土木:「{令和|平成}{年度}年度{前期|後期}の第一次検定 過去問、{N}番です。全 4 問、答えは動画内で発表します」(Reels は自動再生のため「スワイプ」表現は使わない → ig-reels-policy.md) |
| problem | 「問題{N}。{bodyLines}」 |
| answer | 「正答は{N}番。{correctText}。{pointText}」 |
| cta | 「フォローすると毎週、過去問解説が届きます。全問解説はドボクノートでチェック」(Reels はリーチ獲得器のため保存より新規フォロー誘導を主にする → ig-reels-policy.md) |
選択肢は読み上げない(時間制約のため、視聴者は画面で読む)。
時間目安
- cover: 約 6 秒
- problem: 約 12-15 秒(問題文の長さによる)
- answer: 約 10-12 秒(pointText の長さによる)
- cta: 約 6 秒
- 合計: 約 90-110 秒(IG Reels の理想範囲 60-90 秒に近い)
関連スキル
ig-post-create(カルーセル PNG 生成、本スキルが内部で利用)yt-shorts-create(YouTube Shorts、共通基盤 sns-common を共有)
担当外
- IG への自動投稿(手動アップロード前提。将来
ig-reel-publish.mjsで対応) - BGM / 効果音(サイレント + TTS のみ)
- 字幕焼き込み(PNG にテキスト既存のため不要)