ミュージックプロモーションビデオ
縦型(デフォルト1080×1920)のプロモーションビデオを作成します。全体がひと続きのプレミアムな作品のように感じられるものに仕上げます。ロゴで始まり、アプリのページ、カバー、プレイヤーがスムーズなカメラワークで次々と流れ込み、曲が映像に合わせてビートに乗って流れます。最後は冒頭に対応するエンドカードで締めくくられ、ビデオがループします。
このスキルは、実際のユーザーフィードバックを何度も繰り返して練り上げられたワークフローをパッケージ化したものです。references/direction.md のルールは、そのフィードバックを原則にまとめたものです。何かをデザインする前に必ず読んでください。それが「いいね」と「これが欲しかったんだ」の違いを生みます。
0. イントーク:まずはリファレンスを尋ねる
計画や構築を始める前に、まずユーザーに出力を形作るための 3〜4個のリファレンス を尋ねてください。リファレンスがルックを決めるので、ビデオはそれに依存します。以下のアセットチェックリストと一緒に、フレンドリーなメッセージで一度に尋ね、ユーザーが一度で回答できるようにします。
次のものを尋ねてください:
- 3〜4個のリファレンス:動画(動きとテンポ感が最も分かるので推奨)、リール、画像、またはそれらへのリンク。それぞれについて、どこが好きなのか(ルック、色、タイポグラフィ、トランジション、テンポ、サウンド)を尋ねます。ユーザーが開けないリンク(Instagram、Pinterest、TikTok)だけを送ってきた場合は、ダウンロードしたファイルかスクリーンショットを求めます。開けなかったものを「見た」とは決して言わないでください。
- 3個未満しか送られてこなかった場合は、もう一度尋ね、リファレンスが多いほど良い結果が得られると説明します。それでも用意できない場合は、手持ちの情報で進め、自分で判断した箇所を説明します。
- 4個より多く送られてきた場合は、最も重要な4個を選んでもらうか、最初のものを重視します。
アセットチェックリスト(同じメッセージで尋ね、何についても「あなたが選んで」を許可します):
- ロゴ(透明背景のPNGが最適)。
- アプリのスクリーンショット(ホーム画面、ライブラリ、再生中画面)。実際の動作を示すもの。
- 楽曲ファイルと、それぞれのフックの開始時間と終了時間(ユーザーは自分のフックを知っています。歌詞から推測しないでください)。
- 効果音パック(オプション)。
- 公式ミュージックビデオファイル(オプション、同期用)。
- フォーマット、目標尺、フレームレート(デフォルト1080×1920、60 fps)、および投稿先。
次に、リファレンスを適切に分析します(references/references-analysis.md 参照:動きを把握するためのコンタクトシートと密なフレームシーケンス)。短いリファレンスブリーフを作成します:パレット、タイポグラフィの役割、テンポ(1小節あたりのカット数)、トランジションの種類、テクスチャ(グレイン、ブルーム、ペーパー、またはなし)、テキストと画像の相互作用、サウンドの特徴。このブリーフを計画とともに数行でユーザーに提示し、何か問題が発生しない限り、さらなる承認を待たずに構築を進めてください。
リファレンスが references/direction.md のルールと競合する場合は、最初にユーザーの明示的な言葉、次にリファレンス、最後にデフォルトに従います。
1. 環境の確認
ffmpeg、およびPython(numpy、pillow、opencv-python-headless、scipy)が必要です(ワークフォルダにvenvを作成してください)。フォントはシステムフォントを使用します。3つのタイプの役割(サンセリフ、セリフ斜体、等幅)がすべて解決できることを確認します。必須の機能が不足している場合は、何が不足しているかを正確に伝え、依存するステップを停止します。計画を完成したビデオとして提示しないでください。
2. アセットの入手と検証
- カバーアート: 表示用のカバーとしてスクリーンショットのトリミングを決して使用しないでください。解像度が低すぎて、ユーザーは気づきます。代わりに、
scripts/find_cover.pyを使用してApple/iTunes(最大3000ピクセル)とJioSaavnで公式アートワークを検索し、各候補をスクリーンショットのトリミングと照合します。一致度が約0.98以上のもののみを受け入れ、出典(ソースURL、タイトル、アーティスト、一致スコア)をcovers/provenance.jsonに記録します。何も一致しない場合(例:Spotify生成のミックスやラジオ)、シンプルなデザイン(「いいね!」した曲など)の場合はシャープなベクター版を描き直すか、そのアイテムを省略します。 - 楽曲: ファイルを作業フォルダにコピーし、それぞれに対して
scripts/beat_grid.pyを実行します:テンポ、ダウンビート、0.5秒ごとのエネルギー、および最大のエネルギージャンプ(ドロップ)。フックの時間は文字起こしから推測するのではなく、ユーザーに直接尋ねます。 - ミュージックビデオ:
scripts/av_sync.pyでビデオの音声と楽曲ファイルのオフセットを取得し、ピクチャーと楽曲のリップシンクを維持します。scripts/shot_cuts.pyでビデオ自体のカット位置を検出し、ショットごとに被写体を追跡するようにクロップできます。 - 効果音: 各ファイルを特徴付け(長さ、ピーク位置、明るさ)、役割(タップ/クリック、ウーッシュ、ライザー、ポップ、チャイム、ランブル、スペシャル)を割り当て、各ファイルのピークオフセットを記録して、キューがピークに合うようにします。
3. ビートグリッド上でタイムラインを計画する
- 曲が再生されている間は、フィルム時間を楽曲時間として扱います(フィルム t = 楽曲 t + オフセット)。シーンチェンジはダウンビートに、ポップやストップモーションのステップはビートまたは8分音符に配置します。
- 典型的な流れ(ブリーフに合わせて調整):ロゴオープニング → ライブラリまたはアプリページ → アルバムカルーセル → 再生中(ライブプログレスバー) → ドロップモーメント(大きなキネティックワード) → カバーの壁 → 次の曲へのハンドオフ(自身のカバーアニメーション付き)→ そのプレイヤー → オプションのミュージックビデオセクション → ロゴへのパーティクルフィナーレ → 冒頭に対応するエンドカード。
- すべてのシーン間の変化は連続的な動きでなければなりません:次のシーンになる要素へのズームイン、マッチカット(両側で同じ画像が同じ位置にある)、または暗いエリアへのフライスルー。各トランジションのメカニズムを計画にリストします。
- テキストルール:単語をアートワークの上に決して配置せず、ロゴやカバーの背後に隠したままにしません。単語はオブジェクトの端の後ろからスライドアウトするか、マスクラインを通って上昇し、その後完全に表示されます。スクロールするコンテンツの上にあるタイトルは、そのコンテンツに属する(ワールド座標)ため、タイルがそれらを覆うことはありません。
完全な視覚ルールセットとその存在理由については、references/direction.md を参照してください。
4. 構築
assets/reference_project/ にあるサンプル実装から始めます:render.py(ピクチャーエンジン+58秒のタイムライン)、audio.py(ミックス)、style.json。これには既にテスト済みのビルディングブロックが含まれています:
- ブラー前置フィルタリング、ソフトシャドウ、クリッピングを備えたコンポジット;
- フレームごとのフィルムグレインとブルーム;
- 3つの役割を持つ
Textクラス(サンセリフ、セリフ斜体、等幅)と、イーズインエントリ、ストップモーションエントリ、ドリフト終了; - マスクラインによる単語の出現と、背後からのスライド出現;
- プレスエフェクトを伴うタップリップル;ライブプログレスバーとハートタップを備えたベクタープレイヤーUI;リピートリングのエンドカード;
- ダイヤモンドパーティクルシステム(カバーをピースごとに組み立て、ロゴへのリフトオフ);
- フレームブレンディングとショットごとのクロップを備えたミュージックビデオ再生;
- フィルタースイープ、エンベロープ、SFXキュー用のツール。
エンジンはそのままに、タイムラインとコンテンツを新しいプロジェクトのものに置き換えます。アーキテクチャと既に解決された落とし穴については references/engine-notes.md を参照してください。
次の順序で作業します:
- テキストとレイアウトのテスト:タイムライン全体で10〜20枚の静止画をレンダリングし、コンタクトシートを作成し、確認し、長時間レンダリングの前にレイアウトの問題を修正します。
- ミックス(
audio.py):高速なので、1秒ごとおよび各ハンドオフ周辺のレベルを測定します(references/audio.md)。 - バックグラウンドでのフルレンダリング(60 fpsはラップトップで60秒あたり約10分、120 fpsは約25分)。ポーリングは行わず、完了通知を待ちます。
5. 実際の書き出しのQA
最終MP4に対して scripts/motion_qa.py を実行します。フレーム間のジャンプ、ストップモーションのステップ、フリーズフレーム、異常に暗いフレームを報告します。意図的なステップやミュージックビデオのカットではないすべてのスパイクについて、その前後の連続フレームを抽出して確認します。次に以下をチェックします:
- 長さ、fps、フレーム数、フルデコード;
- ラウドネス(−11〜−14 LUFS インテグレーテッド、ピーク約 −1 dBFS、歪みなし);
- 1秒ごとのレベルとハンドオフレベル;
- すべてのトランジションの両側;
- スマートフォンサイズでのテキストの可読性。
正直に報告します:オーディオは測定できますが、聴くことはできません。そのように伝え、ユーザーに耳で確認するよう依頼します。
小さな修正の場合は、影響を受ける時間範囲のみを再レンダリングし(render.py --range a,b)、フレーム精度のトリミングでマスターレンダリングにスプライスします。リマックスして継ぎ目を再チェックします。references/qa-and-delivery.md を参照してください。
6. 早期に納品し、反復する
- バージョンが完成したらすぐに、より長い変更の途中であっても、再生可能なMP4を送信します。ユーザーは「できた?」と尋ね、あなたが続けている間に見たがることがよくあります。
- 各ラウンド:ユーザーの言葉を注意深く読み直します。彼らはよく素早くタイプし、文の途中で途切れます。依頼されたことを正確に適用し、それ以外はすべてフレーム単位で同一に保ち、何が変わったかを伝えます。メッセージが途切れている場合は、明確な部分を実行し、残りを尋ねます。
- 以前のバージョンを保持し(
archive_vN/)、納品物にはバージョンとfpsを名前に含めます。
各ラウンドの納品物:
- メインMP4(投稿用60 fps。120 fpsはリクエストがあった場合のみ、その場合はソーシャルプラットフォームは最大60 fpsで再生することを説明)。
- 楽曲なし、効果音のみの同じビデオ(プラットフォームライセンス音楽と一緒に投稿する場合用)。
- 編集可能なプロジェクトZIP:コード、スタイル設定、出典付きカバーアート、ビデオで使用されたフレーム、使用した効果音、ミックスWAV、タイムライン付きREADME。
- 何が変わったか、何をチェックしたか、何をチェックしていないかを短く記したメモ。さらに、楽曲、カバーアート、ビデオクリップは著作権で保護されていること(個人編集には問題ないが、プラットフォームがパブリック投稿をミュートまたはクレームする可能性がある)を注意喚起します。
リファレンスファイル
references/direction.md:ユーザーフィードバックから得られたビジュアルおよび編集ルール。デザイン前に読むこと。references/references-analysis.md:ユーザーの3〜4個のリファレンスを分析しブリーフを作成する方法。references/audio.md:楽曲のエンベロープ(低→高、高→低)、シームレスなビートマッチハンドオフ、SFX配置、ラウドネス。references/engine-notes.md:リファレンスエンジンのアーキテクチャと、既に解決された落とし穴。references/qa-and-delivery.md:チェック、部分再レンダリングとスプライス、エンコーディング、パッケージ化。scripts/:beat_grid.py、find_cover.py、av_sync.py、shot_cuts.py、motion_qa.py(各スクリプトの使い方は-hで表示)。assets/reference_project/:完全なサンプル実装(Spotifyプロモーション、"Raw Rich Rare"からDrakeの"National Treasures"へ)。