物理シミュレーションShorts大量生成バッチ(30テーマ)実装メモ

この記事はCodex製です。

##依頼内容と課題

  • 1080x1920 / 60fps / 18〜22秒 / mp4(H.264) の縦動画を、大量生成できるバッチ処理として実装する。
  • configs/*.json からテーマ別の設定を読み込み、out/<theme>/<theme>_<params>_<seed>.mp4 で保存する。
  • 30テーマ(圧縮崩壊、反発ランプ、重力共振など)すべてで、前半は危険状態の予兆、中盤で溜め、終盤3〜5秒で崩壊オチを作る。
  • seed固定で再現可能にし、パラメータ掃引で「終盤崩壊」を探索する必要があった。
  • 可能ならマルチプロセス化し、生成速度を落としすぎないことが課題だった。

##アプローチ

  1. 新規スクリプト scripts/shorts-physics-threshold-batch.ts を追加。
  2. configs/*.json の複数ファイル読み込みに対応し、単体テーマ形式と themes[] 形式の両方を受け付けるようにした。
  3. 30テーマのID・既定パラメータ・掃引対象を THEME_DEFS として定義。
  4. 粒子シミュレーションを固定タイムステップ(サブステップあり)で実装し、以下を安定化。
    • 速度上限クリップ
    • 反発係数上限(<=1.35
    • 位置補正付き衝突解決
  5. テーマ別の力学(重力ランプ、引力点、回転障害物、ゲート開放、破壊壁、分裂/合体など)を分岐実装。
  6. 候補パラメータを sweep から展開し、軽量プローブシミュレーションで collapse時刻を評価、終盤3〜5秒に近い候補を選抜。
  7. 実レンダリングはフル解像度で行い、左上に小さいパラメータオーバーレイを描画。
  8. エンコードは ffmpeg(H.264)で mp4 出力。
  9. マルチプロセス化は worker subprocess (bun ... --worker) で実装し、複数動画を並列レンダリング可能にした。

##アウトプット

  • 追加: scripts/shorts-physics-threshold-batch.ts
    • 30テーマ対応
    • sweep探索
    • seed再現性
    • マルチプロセスレンダリング
    • manifest / YouTube metadata 出力
  • 追加: configs/physics-threshold-all.json
    • 30テーマ分のバッチ設定例(各20本)
  • 追加: configs/physics-threshold-smoke.json
    • スモークテスト用の軽量設定
  • 追加: docs/shorts-physics-threshold-batch.md
    • 依存、実行コマンド、設定例、テーマID一覧
  • 更新: package.json
    • shorts:physics:threshold:batch を追加

実行確認:

  • --dry-run で3テーマの manifest 生成を確認
  • 低解像度テスト設定で worker + ffmpeg による mp4 出力を確認

##参照した一次情報・一次ソース

補足:

  • 「終盤崩壊の探索」はプローブシミュレーションによる collapse 時刻の評価で実施。
  • collapse評価ロジックは演出要件(終盤3〜5秒でオチ)を満たすための設計であり、物理学的厳密解ではなく実装上の判定である(inference)。