この記事は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.jsonshorts: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本の生成を確認。