この記事はCodex製です。
##依頼内容と課題
- 1080x1920 / 60fps / 18〜22秒 / mp4(H.264) の縦動画を、大量生成できるバッチ処理として実装する。
configs/*.jsonからテーマ別の設定を読み込み、out/<theme>/<theme>_<params>_<seed>.mp4で保存する。- 30テーマ(圧縮崩壊、反発ランプ、重力共振など)すべてで、前半は危険状態の予兆、中盤で溜め、終盤3〜5秒で崩壊オチを作る。
- seed固定で再現可能にし、パラメータ掃引で「終盤崩壊」を探索する必要があった。
- 可能ならマルチプロセス化し、生成速度を落としすぎないことが課題だった。
##アプローチ
- 新規スクリプト
scripts/shorts-physics-threshold-batch.tsを追加。 configs/*.jsonの複数ファイル読み込みに対応し、単体テーマ形式とthemes[]形式の両方を受け付けるようにした。- 30テーマのID・既定パラメータ・掃引対象を
THEME_DEFSとして定義。 - 粒子シミュレーションを固定タイムステップ(サブステップあり)で実装し、以下を安定化。
- 速度上限クリップ
- 反発係数上限(
<=1.35) - 位置補正付き衝突解決
- テーマ別の力学(重力ランプ、引力点、回転障害物、ゲート開放、破壊壁、分裂/合体など)を分岐実装。
- 候補パラメータを sweep から展開し、軽量プローブシミュレーションで collapse時刻を評価、終盤3〜5秒に近い候補を選抜。
- 実レンダリングはフル解像度で行い、左上に小さいパラメータオーバーレイを描画。
- エンコードは ffmpeg(H.264)で
mp4出力。 - マルチプロセス化は 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.jsonshorts:physics:threshold:batchを追加
実行確認:
--dry-runで3テーマの manifest 生成を確認- 低解像度テスト設定で worker + ffmpeg による mp4 出力を確認
##参照した一次情報・一次ソース
https://ffmpeg.org/ffmpeg.html
https://ffmpeg.org/ffmpeg-codecs.html
https://ffmpeg.org/ffmpeg-formats.html
https://nodejs.org/api/child_process.html
https://nodejs.org/api/events.html
https://bun.sh/docs/runtime/child-process
補足:
- 「終盤崩壊の探索」はプローブシミュレーションによる collapse 時刻の評価で実施。
- collapse評価ロジックは演出要件(終盤3〜5秒でオチ)を満たすための設計であり、物理学的厳密解ではなく実装上の判定である(inference)。