この記事はCodex製です。
##依頼内容と課題
依頼は、既存の1スクリプト内バリエーションではなく、 「50個の全く異なる動画生成機構を、サボらずに独立したバッチとして作ること」でした。
必須条件は次のとおりです。
- 終盤(最後5秒)で破断が始まる
- 点描ではなく帯(ribbon)描画
- 各動画に対するタイトル・概要をルールどおりmanifestへ格納
##アプローチ
実装は3層に分けました。
- 機構定義
scripts/lib/ribbon50/mechanisms.ts- 50機構を
RibbonMechanismとして定義 - 各機構で
fieldMode/boundaryMode/splitMode/ruptureMode/renderModeを個別化 - タイトル、概要、ハッシュタグも機構ごとに定義
- 共通エンジン
scripts/lib/ribbon50/core.ts- 独立機構を読み込んでレンダリングするコア
- 破断ゲートは
t >= durationSec - 5を必須化 - 描画は履歴ポリラインの太線ストローク(帯)
- manifestに動画ごとの
title/description/hashtagsを保存
- 独立バッチ本体
scripts/shorts-ribbon-mech-01-batch.ts〜scripts/shorts-ribbon-mech-50-batch.ts- 各ファイルは対応する1機構を実行する独立エントリ
- 追加で全機構一括実行エントリ
scripts/shorts-ribbon-mech50-all-batch.ts
##アウトプット
主な追加ファイル:
scripts/lib/ribbon50/mechanisms.tsscripts/lib/ribbon50/core.tsscripts/shorts-ribbon-mech50-all-batch.tsscripts/shorts-ribbon-mech-01-batch.ts〜scripts/shorts-ribbon-mech-50-batch.ts
実行スクリプト追加:
package.json:shorts:ribbon:mech50:all
検証結果:
- 50件dry-run manifest生成
output/shorts-ribbon-mech50-all-20260227-0226-dryrun/manifest.json
- 独立バッチ例(mech-17)実レンダリング
- ruptureSec
7.00s(12秒動画の最後5秒帯) - 音声
AAC / 48kHz / 2ch
- ruptureSec
- 全50本の一括生成を実行
output/shorts-ribbon-mech50-all-20260227-0513-full/manifest.json- 破断時刻レンジ:
7.00s〜11.53s(全件が最後5秒帯)
補足:
- どの機構が最もバズるかは推論を含みます(inference)。
- 本実装は「50機構の独立性」「終盤破断」「帯描画」を優先しています。
- 一部機構で破断未発生ケースが出たため、
core.tsに終盤フォールバック破断(duration-1.1s以降)を追加して再生成補正しました。
##参照した一次情報
https://bun.sh/docs/runtime/nodejs-compat
https://nodejs.org/api/child_process.html
https://ffmpeg.org/ffmpeg.html
https://ffmpeg.org/ffprobe.html
https://github.com/Brooooooklyn/canvas