ブランドプロモ(スタジオショーリール)
このスキルは、単一の設定ファイル promo.json から1本の完成されたプロモーションビデオを生成します。キャンバスシーンはヘッドレスChromeで全フレームを描画するため、テンプレートやストック映像を使用しない、ピュアなモーションデザインビデオです。
- 映像: ブランド自身のクリップ、ロゴアニメーション、テキスト。
- 楽曲: コードで生成されたオリジナルシンセトラック(128 bpm)。すべてのカット、ドロップ、インパクトが小節に合わせて配置されます。
- ナレーション: VoxCPM2、ローカル実行。
- サウンド: 各作品の独自のオーディオがそのスポットライトで再生されます。
構造は固定されており、あらゆるブランド規模で機能します。変更されるのはコンテンツのみです。
| 時間 | セクション |
|---|---|
| 0-3.4 秒 | { Every story } がタイプライター調で表示され、続けて「deserves to move.」 |
| 3.2-7.6 秒 | 3Dカードのリング(全作品のスチル):「Here are five of ours.」 |
| 7.6 秒(小節4) | ドロップ:アイブロウ、ブランド名(グリッチアクセントボックス内)、サブライン |
| 9.5 秒 + 各5.6 秒 | 作品ごとに1つのスポットライト:タイトルブロック+傾いたカード(16:9)またはスマートフォン(9:16)上の作品、「Full video · m:ss」チップ、ライブレベルバー付きの独自サウンド |
| ブレーク | 「Your story」、続いてナレーション行の最後の単語に合わせた大きな「next.」 |
| ラッシュ | すべてのクリップが3Dで高速通過し、ナレーターのフレーズに合わせて3つの単語(Written · Voiced · Animated)が表示 |
| エンド | リキッドロゴが最後のビートで着地、左にスライド、名前がワイプイン、続いてチップとURLが表示 |
長さは5作品で51.5秒、4作品で45.9秒、3作品で40.2秒です。
必要条件:
- ffmpeg、Node 22+、Google Chrome または Chromium(
CHROME_PATH)。 - numpy と scipy がインストールされたPython(
PROMO_PY)。 - ナレーション用の VoxCPM2(
VOX_PY、scripts/voices.pyを参照)。これがない場合、プロモにはナレーターが含まれないか、build/vox/<id>.wavに独自の録音を配置できます。
ワークフロー
1. プロモに必要なものを集める
-
3〜5作品: ブランドの完成済み動画(任意の長さ)。縦型動画はスマートフォン、横型動画はカードで再生されます。以下の点に注意:
- 各作品に適したサウンドモーメント(文の始まりやパンチラインなど)があること。その中の4秒間がスポットライトで再生されます。開始時間を
soundとして指定するか、省略すると動画の35%付近の静かなギャップの開始が使用されます。 - サウンドを再生したくない作品には
"mute": trueを設定します。
- 各作品に適したサウンドモーメント(文の始まりやパンチラインなど)があること。その中の4秒間がスポットライトで再生されます。開始時間を
-
ロゴアニメーション(透過あり)。最適なソースは
/generate-logoをリキッドスタイルで使用することです:generate-logo/scripts/animate.sh logo.png --styles liquid --proresこれにより
<name>-5s-liquid-alpha.movとその-sfx.wavが生成されます。透過-alpha.webmまたは透過PNGも使用できます。 -
ブランド情報:
- ブランド名(2つのカラー部分に分割、例:
["KumNit", " Studio"])。 - カラー:名前に2つのグラデーション、アクセントカラー、セカンドアクセント、ウォームアクセント。ロゴから読み取ります。
- ウェブサイト。
- ブランドが手掛けるもの:4つのチップ。
- ブランド名(2つのカラー部分に分割、例:
-
言語:
"lang": "en"または"km"。クメール語の場合、すべてのテキストとナレーション行を自然なクメール語で記述します。Kantumruy Pro と Koulen はバンドルされています。
2. プロジェクトを作成する
プロジェクト用のフォルダを作成し、examples/kumnit-showreel.json を promo.json としてその中にコピーし、編集します。すべてのキーは references/config.md に説明されています。テキストは短く保ちます:タイトルは1〜3語、行は最大6語にします。長い行は縮小表示されますが、読みにくくなります。
ナレーションは voice.lines に、各モーメントごとに1つの短い文として記述します:
nextは大きく表示される単語で終わるようにします。例:「Your story could be next。」rushは3つのフレーズをカンマで区切って記述します(ラッシュの3単語に対応、例:「We write it, voice it, and animate every frame。」)。
3. プレビュー(約30秒)
<skill>/scripts/promo.sh <project>/promo.json --preview
これにより、アセットがカットされ、タイミングが計画され、12枚のスチルが out/<name>-preview.png にレンダリングされます。これを確認し、以下をチェックします:
- カードに適切なモーメントが表示されているか。
- タイトルがつぶれていないか。
- ロゴがフレーム内に収まっているか(マークはボックスの約60%を占めるべき)。
- スポットライトが交互に表示されているか。
画像を修正するには、該当作品の sound 開始時間を変更します。その後、assets/clips/p<k>、assets/bites/p<k>.wav、assets/manifest.json を削除し、再度プレビューを実行します。
4. レンダリング(初回約10分)
<skill>/scripts/promo.sh <project>/promo.json # バックグラウンドで実行
ステージは次の順序で実行されます:assets、voices、plan、music、mix、render、encode。
- Voices: 初回実行はモデルのロードに約2分かかり、その後1行あたり10〜60秒かかります。既に存在する行は保持されるため、
build/vox/<id>.wavを削除して再実行します。 - Rendering: 2つのChromeプロセスで約4分。
- Resuming:
--from mix(またはrender、encode)でそのステージからのみ再実行します。
出力: out/<name>-1080p60.mp4 と out/<name>-contact.png(1秒あたり1フレーム)。
5. 引き渡し前の確認
- コンタクトシートを確認します。
ffprobeで期待される長さ(5作品で51.5秒)が表示されることを確認します。- ミックスは -14 LUFS にノーマライズされています。
- 結果を聴くことはできないので、確認した内容(タイミング、レベル、フレーム)をユーザーに伝え、聴いてもらうよう依頼します。特に、各作品のサウンドに対するナレーターのバランスに最も注意します。
チューニング
- サウンドエフェクト:
sfxDirをユーザーの独自サウンドエフェクトフォルダに設定すると、scripts/audio.py(SFX)にリストされたファイル名が最初に試されます。不足しているものは合成されるため、ライブラリがなくてもスキルは機能します。 - タイミング:
scripts/plan.pyのナレーションから計測されます。各作品のサウンドは、そのナレーション行の後に開始し、次のスポットライトの前に停止します。ルールを変更するには、シーンではなくplan.pyを編集します。 - 見た目: カラーは
brandから取得し、すべてのモーションはscripts/scene.mjsにあり、楽譜はscripts/music.pyにあり、その小節レイアウトはファイルの先頭に記載されています。