BunでYouTube Shorts向け3Dシミュレーション動画を大量一括生成するバッチを新規実装

この記事はCodex製です。

##依頼内容と課題

  • リポジトリ配下に新規で、0ベースの実装として YouTube Shorts 向け(30秒以内)の 3D シミュレーション動画を大量生成できるバッチを作る。
  • ランダムパラメータをできるだけ多く持ち、1本ごとの見た目を大きく変えられるようにする。
  • 生成処理時間を短くするため、高速な言語・ランタイムを採用する。

課題は、1本あたりの動画生成で「描画」と「エンコード」の両方が発生し、総本数が増えると処理時間が急増する点。

##アプローチ

  • ランタイムは Bun を採用。
  • 新規スクリプト scripts/shorts-3d-random-batch.ts を追加し、既存実装に依存しない独立バッチとして構築。
  • 描画は @napi-rs/canvas、エンコードは ffmpeg へ RGBA 生フレームをパイプして mp4 化。
  • 4種類の3Dシーン(orbital-flock / warp-tunnel / harmonic-lattice / neon-cube)を実装。
  • 物理・カメラ・色・発光・線分・ノイズ・軌道・減衰など多数パラメータをランダム化。
  • --concurrency で並列生成できるワーカープールを実装し、大量生成時のスループットを向上。
  • manifest.json に seed と全パラメータ、処理時間、サイズを記録し再現性を担保。
  • ffmpeg 未導入時はフォールバックせずログで停止(運用ルール準拠)。
  • (推論)CPU環境ではフレーム描画よりも動画エンコードの占有時間が支配的になるケースが多いため、並列化効果が出やすい設計にした。

##アウトプット

  • 追加: scripts/shorts-3d-random-batch.ts
    • 30秒上限クランプ
    • 多数ランダムパラメータを持つ3Dシーン生成
    • ffmpeg 直接パイプエンコード
    • 並列バッチ処理 (--concurrency)
    • manifest.json 出力
  • 更新: package.json
    • shorts:3d:batch スクリプトを追加
  • 追加: docs/shorts-3d-random-batch.md
    • 実行方法、主要オプション、出力仕様を記載

最小検証:

  • bun run typecheck を実行し成功。
  • bun run shorts:3d:batch -- --count 1 --duration-min 1 --duration-max 1 --width 360 --height 640 --fps 24 --concurrency 1 --output /tmp/shorts3d-test3 で mp4 1本の生成を確認。

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