mcpField
F
flux-3-product-ads

flux-3-product-ads

github.com/black-forest-labsマーケティング・グロース135106 回インストール9 週間前に更新
リポジトリ

flux-3-product-ads について

flux-3-product-adsは、FLUX 3で商品広告を制作するクリエイター向けのスキルです。生成映像とナレーションの連携、ショット設計、音声に基づくタイミング調整、決定的な編集、映像や同期の検査を扱います。

主な機能

  1. 01生成動画向けのショット設計
  2. 02映像素材とナレーションの生成
  3. 03ナレーションの機械判定と試聴
  4. 04音声に基づくタイミング設定
  5. 05決定的な編集とマスタリング
  6. 06測定による完成映像の検査

活用シーン

  1. 0112~60秒の広告ショットの計画
  2. 02生成ナレーションに合わせた編集
  3. 03クリップ反転後の同期問題の診断
  4. 04参照静止画間の商品アイデンティティ確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/black-forest-labs/skills --skill flux-3-product-ads

インストール後、Claude Code で/flux-3-product-adsを入力して読み込まれたか確認します。

同梱ファイルmetadata.jsonreferences/pipeline.md

詳細

FLUX 3 の製品広告

完成したスポットの制作には、1つではなく2つの作業が必要です。FLUX 3 は映像と音声を生成します。決定論的な工程でカット、タイミング、字幕、マスタリングを行います。境界は明確に保ちます。モデルにしかできないことはモデルに任せ、コンピューターが正確に計算できることはすべてモデルに任せないでください。

このスキルが依存するルート情報は flux-3-generate にあります。/v1/flux-3-video、ポーリング、ダウンロードの動作については、まずそちらを読んでください。v2v リンクが実際に返す内容を含む継続処理の動作は、flux-3-keyframes-continuation にあります。

ここに記載する内容は、12秒、30秒、60秒で実行して検証済みです。ある長さでしか成り立たないルールには、その旨を記載しています。10秒の3ショットのスポット向けに書かれた内容が、長尺でも再検証なしに一般化できるとは決して考えないでください。今回の改訂につながった実行では、10秒では正しかったタイミング処理のロジックが2つ、長い尺でしか現れない、気づきにくい正確性のバグと複雑性のバグを抱えていることが判明しました。

作業の流れ

  1. 生成後も成立するショットを設計します。
  2. 映像素材と VO を同じラウンドで生成します。
  3. VO を機械でスクリーニングしてから、実際に聞きます。
  4. 音声からタイミングを導きます。
  5. 決定論的に組み立てます。
  6. 合格に見える失敗も含め、測定値で判定します。

1. ショット設計

10秒のスポットを構成するのは3つのカットです。登場、実証、締め。登場で対象を示し、実証でコピーが主張する1つの機能を見せ、締めでブランドを印象づけます。

長いスポットには、より多くのビートと素材が必要です。ディゾルブを考慮すると、素材1本から使用できる中間部分はおよそ4~5秒です。そのため、ショット数は尺を約4.5で割って切り上げた数になります。不足しても段階的に品質が落ちるわけではありません。適法なカット位置がなくなり、ビルド全体が失敗します。実測では、12秒に素材3本、30秒に6本、60秒に11本が必要でした。素材9本で計画した60秒のスポットは、まったく編集できませんでした。

30秒以上では、登場/実証/締めの構成だけでは尺を埋められません。うまくいった構成は、素材のフック、製品全体、ディテール、仕組み、状態の変化、製品がユーザーにもたらすもの、ブランドです。重要なのは、3つのパートに分けることではなく、各ビートにそれぞれショットが必要となる構成にすることです。

動きは、その始点と終点を固定します。 生成されたクリップは最初と最後のフレームが信頼でき、その間は創造的になります。中間の動きが始点と終点から推測できるものは成立しますが、モデルに形状を創作させる動きは成立しません。

うまくいく例:表面を横切るハイライト、短い弧を描いて回転して止まるカラー、持ち上がって止まるハンドル、わずかに開く蓋。

一見うまくいきそうで、実際にはうまくいかないショットが2つあります。紙の上にインクで線を引く手と、製品の上に降りてきて着地するスマートフォンです。どちらも「移動」と「フレーム内への物体の進入」として失敗すると予想されていました。ところが、どちらも正しく見える状態で生成され、すべてのシグナルゲートを通過してマスターに使われた後、目視で却下されました。ペン先より先にインクが走り、紙はその下で滑っていました。「スマートフォン」は、着地したパッドと同じ幅の、特徴のない板でした。到達したからといって正しいとは限りません。ここに落とし穴があります。ほぼ実現可能なショットの失敗は、シグナルの異常ではなく、物体そのものが誤っている素材です。そのため、どの測定でも検出できません。セクション6の意味的ゲートを参照してください。

失敗する例:複数回転と、2つの物体を同時に回転させることです。クランクを2~3回転させる指示では、約180度回転した後に変形し、アームが自身に重なると消えてしまいました。取り付けられたヘッドを傾けながらローレット付きカラーを2回転させる指示では、動きがまったくなく、どちらの動きも起こらない静止クリップになりました。

予測のポイントは、移動でも遮蔽でもありません。モデルが見たことのない形状を創作する必要があるかどうかです。フレームを横切る手は、シルエットがわかっている剛体です。降りてくるスマートフォンも剛体です。クランクが720度回転するには、その裏側を描画しなければなりません。破綻するのはそこです。動きではなく、創作が必要になる形状を避けるように設計してください。 90度の回転は、回転ショットの安全な代替ではありません。見えない代替です。 失敗したカラーショットの安全版は技術的には成功しましたが、使いものになりませんでした。マクロ撮影では、ローレット加工されたリングがわずかに回転しても、何も起きていないように見えるためです。回転ショットが失敗した場合、代わりのショットには静止したオブジェクトの上を光が移動する動きを使ってください。これはシステムで最も信頼性の高い動きであり、安定して生き生きと見えます。

オブジェクトをフレーム内に登場させる必要がある場合は、フレーム外へ去る様子を生成し、クリップを逆再生します。 このセクションで最も効果の高いテクニックです。発明の問題を、移動の問題に変えられるためです。同じショットを3回試し、変数は1つだけです。

試行アプローチ結果
1下降するスマートフォンを説明する。キーフレームにはスマートフォンがないパッドと同じ幅の板状のもの
2スマートフォンをはるかに詳しく説明する(パッドの直径の3分の2、厚さ8mm、前面はダークガラス、金属製レール、角は丸く、変形させないよう明示)。キーフレームには同じくスマートフォンがないやはり板状のもの。今度は傾き、パッドからはみ出している
3キーフレームに正しい比率のスマートフォンをあらかじめ配置する。スマートフォンが持ち上がって離れる様子を生成する。ポスト処理で ffmpeg -vf reverse を実行する正しいスマートフォン、正しいスケール、動きの間ずっと一定

プロンプトを詳しくしても、発明の問題は解決しませんでした。発明をなくすことで解決しました。オブジェクトがキーフレームにあれば、モデルはすでに見えているものを動かすだけで済みます。スケールがずれることもありません。モデルがスケールを決めていないからです。コストはフィルター1つです。

注意点が2つあります。逆再生したあとに正しく見える方向で、照明の変化を指定してください。また、別の用途で撮影した静止画が隣接するショットとうまくつながるよう、カメラの高さを確認してください。

逆再生すると動作がクリップの反対側に移るため、すでに導き出したタイミングはすべて誤りになります。 これがこのテクニックに隠れた代償であり、それまで問題なく通っていた箇所で同期エラーとして表面化します。リフトプレートは6.04秒のクリップの5.79秒でピークを迎え、終端の0.25秒前でした。逆再生すると、同じピークは0.17秒の位置になります。それ以外は何も変わっていません。再生時間もフレーム数もファイルサイズの区分も同じです。

これは、プレートをセグメント内でずらせるのは後ろ方向だけで、自身の最初のフレームより前には移動できないため重要です。そのため、動作を配置できる範囲はおおよそ[ピーク - セグメントの余裕, ピーク]に狭まり、0.17秒にピークがある動作は、セグメントの最初のほんの一瞬にしか配置できません。逆再生前のプレートに選んだアンカーワードは数秒先にあり、永久に到達不能になりました。ビルドではこれがクランプとして正しく報告されました。

slip : shot 3 in=0.00s -> action 14.32s vs word 15.62s (-1.30s)
       CLAMPED (reachable 13.00-14.32s, word at 15.62s)

この落とし穴がやっかいなのは、ドリフトのように見えることです。プレートは成功した実行時とバイト単位で同一、VOには手を加えておらず、再生時間もサンプル単位で一致しています。そのため、「何か動いたか?」という確認はすべて問題なしと判定される一方、数値は前日に書いたメモと食い違います。動いたのはファイルの内部です。

ここから2つのルールが導かれます。動作がクリップ内のどこに位置するかを変えるポスト処理を行ったら、必ずアンカーを導き直してください。 特に逆再生の場合は、新しいプレートとして扱い、古いプレートの編集とは考えないでください。そして、逆再生したプレートで動作を早い位置に合わせる必要がある場合は、早い位置にある単語をアンカーにします。 最初のフレームでピークを迎える着地動作は、その動作を前向き再生時に表す単語ではなく、その行の最初の単語に合わせます。

予測を信じるのではなく、実際にテストしてください。 リスクのあるショットには、同じブリーフ内でhard_promptと安全なpromptの2つを用意し、両方を生成して両方を残します。リスクのあるショットごとにジョブを1つ追加することが、モデルの改善に合わせてこのセクションの正確さを保つ方法です。また、上記の「不可能」なショット2つも、この方法で見つかりました。

すべてのプロンプトで、接地感を明示してください。 製品の接地影と反射を明記します。製品の同一性と動きが完璧でも、影をきちんと描写していなければ、フレームに貼り付けたように見えることがあります。これは同一性チェックには合格しても、人間にはすぐに偽物だと見抜かれます。 カメラロックはあくまで目安です。「カメラを固定し、寄りなし、パンなし、ズームなし」と指定しても、視差やドリフトは発生します。プロンプトで動きを禁止できると期待するのではなく、多少の動きがあっても成立するショットを設計してください。

1b. まずリファレンス静止画を用意し、モデルの判断も取り入れます

すべてのプレートは静止画を引き継ぎます。i2v はキーフレームを文字どおりに扱うためです。許容できる範囲で間違った静止画を使うと、そこから生成されるすべてのクリップに悪影響が及ぶため、動画生成を始める前にリファレンスパックを正しく用意する必要があります。

実物の商品がある場合は、パックを一から作成するのではなく、写真をもとに作成します。 こちらのほうが簡単で、以下の失敗をすべて回避できます。モデルが物体を再現できるほど詳細に、不変条件を文章で記述する必要がないからです。提供された写真を基準となる静止画として使い、FLUX 2 の input_image によるアイデンティティの継承を使って、再現性が得られるようシードを設定し、残りの各アングルを生成します。それでも不変条件は記述してください。写真から読み取った不変条件は、後でアイデンティティゲートと意味ゲートが照合する基準になります。実際の商品写真1枚をもとにこの方法で作成した実行では、生成した3つのアングルすべてで特徴が維持され、再生成が必要な静止画はありませんでした。

この方法で解決できないことが2つあります。静止画の忠実度が高くても、動画にはドリフトが生じます。そのため、以下のフレーム内チェックとアイデンティティチェックは引き続き必要です。また、実物の写真はたいてい、継ぎ目のない白背景で撮影されたカタログ写真です。そこから切り替えられるセットがないため、ショットごとにフレーミングとスケールを変えなければ、どのプレートも同じ写真のように見えてしまいます。実質的に異なるクロップが得られるようにパックを設計してください。

モデルが仕様を覆すことを想定し、その結果を情報として受け止めてください。3商品を対象とした実行では、2つの商品でモデルが独自のデザインにひそかに置き換えました。点灯しないよう指定したライトチャンネルがすべてのフレームで点灯して生成され、2セグメントのエルボーアームを指定したランプが、ヨークにヘッドを取り付けた一本柱のデザインとして7つすべてのアングルで生成されました。

どちらの拒否も一貫性がありました。つまり、代替デザインは1つだけで、すべてのアングルで一貫して維持されていました。これが重要な兆候です。モデルの不一致がランダムならノイズですが、7回とも同じ不一致が起きるなら、不変条件の記述はモデルが構築できないものを表しているということです。確実に構築できる形に合わせて仕様を書き直し、それから再生成してください。 一貫した拒否に逆らうと生成ジョブを浪費し、成果も得られません。

小道具に不要な文字がある、ワードマークの位置が違う、物体が台座からはみ出しているなど、動画生成の段階で誤りが増幅される場合は、静止画を再生成してください。

静止画ごとではなく、パック全体でアイデンティティをチェックしてください。 プレート単体では問題がなくても、パック全体として一貫性がないことがあります。「これは良いランプの写真か?」という問いと、「これらはすべて同じランプか?」という問いは別だからです。上記のランプでは、パック内のアングルに互換性のない2種類のデザインが混在していました。静止画を1枚ずつ見るとどれも問題なさそうでしたが、そこから生成したプレートには、それぞれのキーフレームが持っていたデザインが引き継がれていました。1枚を基準となる静止画に選び、残りの各静止画を全体的な印象ではなく、名前を付けた反証可能な特徴にもとづいて比較してください。

base:   shallow domed profile curving in one arc, vs a flat cylindrical puck
        with a vertical side wall
post:   smooth and unbroken from base to head, vs a collar, ring, knurling
        or joint partway up
head:   plain green cylinder roughly twice as long as wide, vs short/fat
        or a knurled metal barrel
ring:   exactly one knurled ring, at the FRONT of the head encircling the
        lens, vs any knurling on the post or base

各特徴では、正しい形だけでなく、混同される誤った形も指定します。そうすることで判定を検証可能にできます。完成したプレートについても同じ比較を行い、特徴ごとに少なくとも2回確認し、セクション6の意味ゲートと同様に、すべての判定が一致した場合にのみ採用します。14枚のプレートを生成した実行では、13枚は一貫しており、1枚はモデルから外れていました。薄いゴールドのベゼルによってヘッドのプロポーションが変わっていたのです。問題のプレートは、すべての信号ゲートに合格していました。前述の安全/リスクのペアとして生成した、動きの強いショット側のプレートは問題がなく、すでにディスク上にあったため、修正コストはゼロでした。

生成の前と後にこの確認を行う価値があります。2回の確認で答える問いが異なるためです。生成前の確認では問題のあるパックを防ぎ、生成後の確認では、それでもドリフトが生じたプレートを見つけます。 失敗したステップの古い出力を、次のステップへの入力にしてはいけません。 チェーン内のリンクが失敗した際、ランナーは同じ名前の前日のファイルを拾い、次のリンクに渡しました。次のリンクはそのファイルを使って成功し、誤った素材に基づいた、もっともらしいクリップを生成しました。失敗しても古いファイルが残っていると、次のステップからは成功した場合と区別できません。チェーンの入力が、それを使う実行より新しいことを確認するか、リンクに実行ごとの名前を付けて、ファイルがない場合に古いファイルではなく、本当にファイルがない状態にしてください。

2. 映像とVOを一緒に生成する

完成した商品広告にはナレーションが入ります。最初の生成ラウンドで予算を確保し、映像が確定した後から付け足してはいけません。VOによってスポットの長さが決まるため、最後に生成すると、すべてを再編集することになります。

ナレーションの生成、音楽ベッド、音声のレイヤー化、読み上げやすさの確認、再現性のある音声仕上げには、flux-3-audio-dialogue を使用してください。このスキルでは広告に特化したタイミングと組み立て方を扱います。VOによってスポットの長さを決める方法、段落を意図したポーズでつなぐ方法、マスタリング済みのステムを編集パイプラインに渡す方法などです。

音声のみのジョブからVOを取得します。ブースでの収録シーンを生成し、その映像は破棄して音声を取り出します。少なくとも2人の話者プロファイルに対して、それぞれスクリプトを2つ生成してください。テイクは互換性がなく、実際に選べる候補が必要です。

完成したスポットに、映像と一緒に生成された音声を使わないでください。映像は無音で生成します。

duration はテンポの調整値であり、長さの推定値ではありません。 クリップは指定した長さぴったりで返され、読み上げはその長さに合わせて引き延ばされます。同じ27語のスクリプトを、同じ話者に、3通りの長さで依頼した場合:

指定返された長さ1秒あたりの語数
11s11.01s2.45
14s14.00s2.11
18s18.02s1.50

毎回、スクリプトは最後まで正確に読み上げられました。変わったのはペースだけで、18秒では無音が追加されず、ゆっくり引き延ばされます。したがって、希望する読み上げ速度を決めて長さを算出してください。duration = words / rate とし、落ち着いた自信のある読み上げなら、1秒あたり約2.1~2.5語が目安です。「間を取るため」の余裕を見込んで長さを増やさないでください。ポーズが加わるのではなく、読み上げが遅くなります。

1つの音声ジョブは最大20秒、適切なペースなら約45語までです。 30秒のスポットには約75語、60秒のスポットには約150語が必要なので、それより長いナレーションは1ジョブにつき1段落で生成し、後処理で意図したポーズを挟んでつなぎます。この方法は広告の文章としても優れています。広告には間があるためです。段落をつなぐ前に、それぞれの段落を発話部分だけにトリミングしてください。ブースのルームトーンを重ねると、つなぎ目が耳につきます。

スポットが約20秒を超える場合は、音楽ベッドも同じ方法で生成してください。10秒なら問題ない段落間の無音も、60秒では不自然に聞こえます。音楽ベッドは、プロンプトに発話を含めずに生成した音声のみのジョブを使い、クロスフェードで必要な長さまでループさせ、VOをキーにしたサイドチェーンコンプレッサーで、ナレーションの下にダッキングします。まず音楽ベッドの音量を下げ、もともと小さくした音楽ベッドにダッキングをかけて形を整えてください。強いダッキングが必要なほど音量の大きい音楽ベッドでは、フレーズのたびにポンピング音が目立ちます。

3. 画面のナレーションを機械で確認してから、聴く

各テイクを書き起こし、スクリプトと照らし合わせて単語誤り率を算出します。これにより、抜けや崩れのあるセリフを手軽に検出できます。

創作したブランド名は、完全一致ではなく音声的な類似度で照合する必要があります。 ASR は製品名を知らないため、もっともらしく間違った綴りにします。「Ferrolane」は「Feraline」「Feralaine」「Fairlane」と書き起こされました。完全一致のチェックでは、正しいテイクもすべて不合格になりました。スライドウィンドウを使ってブランド名の音声的な類似度を評価し、近い一致があれば、その名前が発話された証拠として扱います。

機械によるスクリーニングだけでテイクを承認することはできません。発音、リズム、合成音声特有のアーティファクトの確認には、人間の耳が必要です。誰かが聴くまでは、創作した名前はすべて未確認として扱います。

ブランドのトークンは表からではなく、ブリーフから導き出します。 製品名をハードコードしたスクリーニング手順は、記述時に想定した製品にしか使えず、再利用できるスキルにはなりません。トークンは次のように導き出します。製品名の最初の単語がブランド名で、英字と数字を組み合わせたトークンがモデルコードです。

モデルコードでは、数字と数字の読みを双方向に変換する必要があります。「P2」は約半分の確率で「P two」と書き起こされます。変換せずに比較すると、正しいテイクに本来発生しない単語誤りが加算されます。

真のデジタル無音で終わる末尾に注意します。 6 つに 1 つのテイクは、最後の 0.35 秒が -91 dB で終わっていました。これはルームトーンではなく、空のバッファです。他の 5 つは -30〜-40 dB の範囲でした。末尾でまだ大きな音量の音声を探すクリップ末尾のゲートは、これとは逆の問題を検出するため、問題なく通過させてしまいます。末尾にルームトーンがないブース録音は、段落のつなぎ目で前後のノイズフロアと一致しません。

4. タイミングを音声から導き出す

VO が基準となるタイムクロックです。それ以外のすべては、これを基準に測定します。

単語のタイムスタンプではなく、音量から発話の終わりを特定します。 書き起こしツールが示す最後の単語のタイムスタンプは、その単語が聞き取れなくなる位置を示すもので、音量がノイズフロアに達する位置ではありません。実際のステムでは、書き起こしツールが最後の単語の終わりを 9.76s と報告しましたが、聞こえる音の減衰は約 9.9s まで続いていました。そこでトリミングすると、マスターの最後の単語が途中で切れました。それでも、すべての尺と音量のゲートを通過しました。

代わりに、真のノイズフロアで無音を検出し、ファイルの末尾まで続く無音だけをカウントします。 最後の無音区間を使うのも、より見つけにくい別のバグです。同じステムでは、最後の無音区間は最後の単語より前にあったため、これを信頼すると、タイムスタンプを使った場合よりもさらに短くマスターが切れてしまいました。

ノイズフロアはテイクごとに測定します。固定しきい値では何も検出できません。 これらのブース録音はノイズフロアが一定ではありません。あるテイクでは -33.2 dB だったため、-45 dB の silencedetect しきい値では、聞き取れる休止が 4 か所ある読み上げでも無音区間が 1 つも検出されず、休止を使ったカット位置の決定に必要な情報が得られませんでした。astats でノイズフロアを読み取り、そこから数 dB 上にしきい値を設定します。同じテイクでは、ノイズフロア+6 dB で文の区切りが 4 か所、きれいに検出されました。一方、ノイズフロア+4 dB では 6 か所に分断され、ノイズフロア+8 dB では静かな子音が欠け始めました。値は導き出し、採用したカットの判定に使ったノイズフロアを記録します。

測定したギャップにカットを配置します。 候補は休止の中心で、優先順位は高い順に、ノイズフロアが低い場合の文の区切り、次にノイズフロアが高い場合の単語間のギャップです。単語の途中では決してカットしません。適切な配置が見つからない場合は、理由を明確にしてエラーにします。解決策は、長めのプレート、別のショット、または短い読み上げであり、単語の途中をカットすることではありません。

配置は、ギャップの品質からリズムの偏りを差し引いて評価します。ギャップの品質だけで選ぶと、読み上げ内でもっとも目立たないカットが 1 か所選ばれ、冒頭のショットが 1.6 秒、中央のショットが 4.9 秒という結果も平然と生み出されます。

組み合わせを総当たりするのではなく、動的計画法で探索します。 組み合わせが爆発的に増える要因はどちらもスポット尺に応じて大きくなります。読み上げが長いほど候補となる休止が増え、必要なカット数も増えます。

スポット候補カット数組み合わせ
12s、3 ショット292406
30s、6 ショット69511,238,513
60s、9 ショット90877,515,521,435
総当たりスキャンは10秒なら問題ありませんが、30秒では遅く、60秒では応答しなくなります。ハングして失敗するためです。遅いだけに見えるので、最悪の失敗モードです。スコアの各項は、セグメントまたは選択したカットに対する合計を定数で割ったものなので、スコアはセグメントごとに分解でき、最適解は左から右へO(shots x candidates squared)で構築できます。

異なるカットを選ぶ高速な検索は、最適化ではなく性能の退行です。総当たりスキャンが可能な小さなケースでは、高速検索が総当たりと同じ結果を返すことをアサートしてください。同点はリストの同一性ではなく、スコアで比較します。

各セグメントは、元のプレートの長さに収まっていなければなりません。必ず確認してください。手作業で測ったカットで、長さ5.04秒のプレートから5.72秒のセグメントを要求したことがありました。

各プレートをずらして、アクションがそれを表す言葉に重なるようにしてください。 これは最も効果の高い編集判断であり、プレートの中間からセグメントを取ると、その効果が失われます。

アクションの位置を測定します。signalstatsのYDIFはフレームごとの輝度差を示し、5フレームにわたって平滑化すると、動きが起きるタイミングの実用的な指標になります。両端の4フレームをスキップしてください。そうしないと、デコード境界やフェードがピークとして読み取られます。そのうえで、各ショットについて、アクションがどの発話語に関係するのかを定め、両者が重なるようにイン点を選びます。

これがなかった頃に、実際の2本の広告で測定した結果です。シェルが開き終わったのは、音声で「opens flat」と言ってから1.70秒後でした。カラーがカチッと鳴ったのは「one honest click」の2.33秒後で、ハンドルが持ち上がったのは、その言葉の1.00秒前でした。視聴者はその違いを言葉にできませんが、広告とナレーションを重ねただけの映像を分けるのは、まさにこの違いです。

カット検索にもアンカーを組み込んでください。きれいに隠せても、ショットをずらす余地がなくなるカットは、多少目立っても映像と音声を同時に同じことを伝えられるカットより劣ります。

結果を検証してください。アクションが対応する言葉から約0.6秒以上ずれたら、失敗とします。プレートの物理的な制約で言葉に合わせられない場合は、実現可能な範囲を示してください。アクションを早めて再生成するか、プレートが実際に合わせられる言葉に再アンカーするのが解決策であり、どちらも正直な対応です。ずれを黙って許容してはいけません。

脚本を書くときではなく、プレートを測定した後にアンカーとなる言葉を選んでください。 印象的な名詞を選んで、プレートがその言葉に合わせられることを期待した結果、2本の広告で9ショット中3ショットが失敗しました。生成されたプレートでは、アクションが予想以上に早く起こることがよくあります。あるプレートでは、アンカー語が0.84秒の位置にあるのに対し、ピークは開始から0.21秒の位置にありました。つまり、その言葉が発話される前に実現可能な範囲が過ぎていました。言葉を決める前に実現可能な範囲を計算できるのですから、計算してください。

再アンカーは、編集としての妥当性から見ても、より良い選択であることがよくあります。刻印されたワードマークのマクロショットは、「looked」からブランド名に再アンカーすることで、タイミングを合わせられるようになり、ショットの内容にもより忠実になります。

アクションを移動するための再生成は新しいプレートなので、意味の検証も改めて必要です。 クランプが発生したとき、アクションを早めるようショットを再プロンプトするのは、すぐ思いつく解決策です。タイミングは改善しましたが、描写が破綻しました。最初の0.5秒で下向きに回転し、その後はその位置を保つレバーを依頼したところ、再生成されたクリップではレバーが水平の状態から上がり、また下がって落ち着いたため、測定上のピークである0.92秒は「閉じる」動作ではなく「上がる」動作を示していました。数値はすべて改善したのに、クリップの内容は間違っていました。最終的に採用したのは元のプレートで、「switch」から「water」に再アンカーしたものです。これにより、閉じる動作は対応する言葉から0.05秒のずれに収まり、レバーが閉じることで水が保たれるため、内容としてもより自然に見えます。再生成の前に再アンカーを試してください。追加のジョブは必要なく、すでに検証を通過したプレートには、まだ確認していない新しいプレートより大きな価値があります。 アンカーは単調に解決します。 各アンカーは、前のアンカーより後にある最も早い出現箇所を選びます。ショットが読み上げに沿って進むため、言葉も同じ順序で進む必要があります。最初に一致した箇所を検索する方法が正しいのは、言葉が繰り返されない場合だけですが、それは短い台本でたまたまそうなるだけです。30秒の読み上げで「light」が10秒間隔で2回使われたところ、最後のショットが最初の出現箇所にアンカーされ、どんな調整でも解消できない10.18秒のずれが報告されました。

すべてのショットにアンカーがあるわけではなく、無理に作るくらいなら省くほうがよいです。 ショットの動きが明確なイベントではなく、ゆっくりしたドリフトの場合、それが「何を表すのか」に当たる言葉はありません。長いスポットほど、こうしたショットが増えます。アンカーは null のままにして、プレートの中間からセグメントを取ります。

台本に沿うようショットを並べ、ショット順をタイミング調整の手段として扱います。 ショットをアンカーできるのは、そのショット自身のセグメント内にある言葉だけです。そのため、アクションが読み上げの後半に出てくる言葉を示すプレートは、カットの前半には配置できません。レバーのマクロはセグメント2では「switch」から1.8秒の位置に固定されましたが、セグメント3なら使用できました。これを引きの決めカットと入れ替えるだけで、何も再生成せずにアンカーを修正できました。並べ替えは無料なので、再プロンプトの前に試してください。制約となるのは言葉がどのセグメントに入るかであり、プレートではありません。

アンカーが適用されない場合に限り、プレートの中間からセグメントを取ります。 生成クリップは、映像が落ち着く最初の数フレームと最後の数フレームの品質が最も低くなります。

5. 決定論的に組み立てる

生成後にモデル呼び出しは発生しません。同じ入力なら、同じマスターができます。

コンテンツのみを含むマニフェストを使って処理します。つまり、どのプレートを使うか、どのVOを使うか、コピーに何を記載するかです。カット点、スポットの長さ、ラウドネス目標、エンドカードの処理は、すべてビルド時にメディアから導出します。設定ファイルにある製品ごとの数値は、次の製品で誰かが手作業で再計測しなければならない数値です。

測定した輝度に基づいてエンドカードを決めます。 テキストを配置する領域をサンプリングし、白いコピーが読みにくくなるほど明るい場合にだけスクリーンを追加します。明るいサンドカラーのケースに白いテキストを載せるとほとんど読めませんでしたが、同じテキストでも暗いセットでは何も必要ありませんでした。測定すれば、フラグを使わずにこの違いを判別できます。

スクリーンが必要な場合は、グラデーションをフレームの端まで伸ばします。浮いた帯状のグラデーションでは、隠すべき境界が2つ見えますが、端に接したグラデーションなら1つだけです。

素材で実現可能なラウドネスを目標にします。 これらのステムはレベルではなくピークが制限されています。ある素材では統合ラウドネスが-21.3 LUFSで、トゥルーピークはすでに-4.2 dBTPでした。-14 LUFSにするには約+7 dBが必要となり、トゥルーピークが上限を大幅に超えるため、ノーマライザーがクランプして、どのような値を指定しても目標に届きません。コンプレッションで回復したのは0.4 LUFSだけで、承認済みの読み上げを損ねました。

ノーマライザーの初回レポートにある、ピーク上限のもとで実現可能な値を使って判定します。上限を単一のトランジェントのサンプルピークから導出してはいけません。悲観的すぎる値になるためです。また、判定を緑にするためだけに目標を下げないでください。それは合格ではなく、見えなくなった失敗です。

6. 測定値でゲートを設ける

尺、解像度、フレームレート、音声の有無、ラウドネス、トゥルーピークは最低限必要です。しかし、それだけでは不十分です。合格に見える失敗を検出するゲートも追加します。

  • 音切れした末尾。 クロージングフェード前の最後の4分の1秒間のエネルギーを測定します。その部分で音声がまだ大きければ、マスターが単語の途中で終わっています。
  • 本編の黒フレーム。 素材の差し替え漏れや、トランジションのオフセットミスは、ほかのすべてのゲートを通過する黒画面として現れます。意図したクロージングフェードは除外します。
  • 接地感。 製品のベース部分をミッドショットで切り抜き、拡大します。接地影がない場合、同一性と動きのチェックを通過してしまいます。
  • 中間フレーム。 最初と最後だけでなく、複数の時点でサンプリングします。形状は中盤で崩れますが、まさにその部分は最初と最後の比較では確認できません。

既知の不良ファイルでゲートを検証します。 一度も失敗したことのないゲートは、ただの推測です。マスターを単語の途中でハードカットし、ゲートが失敗することを確認します。実際の素材では、正常なファイルはその区間で -91 dB、不良ファイルは -34 dB だったため、-30 dB のしきい値では不良ファイルも通過していました。目視でしきい値を選び、その後、対照ファイルで確認しました。

終わりのないマスターでは、音切れを検出するゲートを設けられません。 読み上げがファイルの終端ぴったりで終わる場合、正常なマスターの最後の4分の1秒間は -15.3 dB、意図的にハードカットしたコピーは -13.8 dB でした。差は 1.4 dB しかないため、両者を分けるしきい値は設定できず、ゲートは形だけのものになります。解決策は、もっと巧妙なしきい値を設定することではありません。素材に本当の終わりを作ることです。末尾に余白を追加してフェードをかけると、同じ測定値は対照ファイルの -13.8 dB に対して -inf になりました。完成した広告にはどうせそのフェードが必要です。だからこそ、この問題は見過ごされました。終わりがないのはクリエイティブ上の欠陥であり、同時にゲートをすり抜ける原因にもなっていました。

信号ゲートでは意味を確認できません。セマンティックゲートを追加します。

上記のすべてのゲートは信号の特性を測定するため、内容が間違った素材でも通過してしまいます。1回の実行で測定された2つのケースを紹介します。

  • ペンが「線を描いている」ものの、インクがペン先より先に進み、ペン先と線の終端の間に白紙が見えていました。動いていたのは紙で、ペンはほとんど動いていませんでした。
  • スマートフォンが「充電パッドに置かれる」場面で、充電パッドの直径いっぱいに広がる、特徴のない灰色の板が映っていました。きれいに着地していたため、動作同期ゲートはまさにその点を評価して通過させました。

どちらも尺、解像度、フレームレート、ラウドネス、トゥルーピーク、黒フレーム、同期のゲートを通過してマスターに納品されましたが、最初に視聴した人間がすぐに却下しました。ゲートが間違っていたわけではありません。ゲートが答えるのは「このファイルは壊れているか」です。「これは説明どおりのものか」を確認するものはありませんでした。

解決策は、ラベル付きフレームをサンプリングし、それらをコンタクトシートに並べ、ブリーフから導き出した反証可能な主張をビジョンモデルで確認する、独立したゲートを設けることです。信頼に足るものにするためのルールは次のとおりです。

  • 誤った描写なら偽になるアサーションを書きます。「クリップの見栄えがよい」では使いものになりません。「目に見えるインクはすべてペン先の後方かペン先上にあり、ペン先と描線の終点との間に隙間が生じることはない」なら判定基準になります。
  • **フレームの引用を必須にします。**判定者は、各判定を決めたフレームを明示しなければなりません。そうしなければ、その判定を検証できません。
  • **各シートを最低2回実行し、厳しく判定します。**全員一致で PASS の場合だけ合格です。FAIL はすべて不合格とし、ラウンド間で不一致があれば UNSTABLE とします。自分の回答を再現できない判定者は、何も確認できていません。これは仮定の話ではありません。問題があると分かっているプレートでは、同じシートを2回実行したところ、5つのアサーションのうち2つで判定が逆になりました。多数決や1回だけの判定では、コイントスのようなものだったでしょう。
  • **すべての製品プレートに、共通の4項目をあらかじめ適用します。**接触影があること、フレーム間で形状と素材が一定であること、文字が崩れたり重複したりしていないこと、フレームが欠落または破損していないことです。そのうえで、ブリーフの作成者が、プレートに誤りがあれば嘘になるショットごとの主張を書きます。
  • **ここでの合格は証拠であって、証明ではありません。**人間による確認をなくすものではありません。明らかな誤りが人間のもとに届くのを防ぎ、レビューの余力を取り戻すためのものです。

**アサーションのセットこそが攻撃対象であり、判定者ではありません。**今回の実行で最も高くついたミスは、誤った判定ではありません。問いが不完全なまま、正しい判定が出たことです。リトライのプレートには、幅が実際にパッドの直径より狭い、もっともらしいスマートフォンが描かれていたため、幅のアサーションは正当に PASS となり、プレートは合格になりました。しかし、スマートフォンは縁をまたいで傾いた状態で止まり、両側にはみ出していました。セットには、平らに着地したか、設置面の範囲内に収まったかを問うものがありませんでした。個々の判定はどれも擁護できるものでしたが、それでもゲートを通過したプレートは誤っていました。

アサーションのセットが薄い場合に起きる誤った PASS は、意味的なゲートがまったくない場合より危険です。フレームの引用まで添えられてしまうからです。これを防ぐには、次の2つの習慣が役立ちます。

  • **動きだけでなく、静止状態もアサーションに含めます。**物体が最終的にどこにあるか(平らである、設置面の範囲内に収まる、接触している)は、視聴者が誤りだと受け取る部分であり、動きに注目したアサーションのセットから抜け落ちる部分です。
  • **プレートが目視で不合格になったら、新しいプロンプトを書く前に、どのアサーションで検出できたはずかを確認します。**どのアサーションでも検出できないなら、穴があるのはセットのほうです。今回の4件のブロックのうち2件は、問題を正確に指摘していました。1件は別の内容に関する不安定な判定の不一致でブロックされ、本当の問題は問われていませんでした。間違った理由による正解は網羅性を意味しませんし、偶然に頼れなくなった瞬間、何も検知できなくなります。

アサーションは、構造上、偽になり得るものでありながら、厳密に見えることがあります。「スマートフォンは動いている間、サイズと形状を一定に保つ」は、正しいプレートを不合格にしました。ほぼ垂直な状態から水平な状態へ剛体が回転すれば、短縮遠近が生じます。そのため、この文を満たせる正しいクリップはあり得ず、判定者が示した理由もフレームを正確に読み取ったものでした。物理的な妥当性(辺が直線であること、角が直角であること、部分ごとに垂れ下がらないこと)をアサーションに含め、遠近感の変化が想定されることを明記してください。書き直したアサーションは、同じ実行内の既知の不良素材でも必ずテストしてください。書き直しによって不良プレートが不合格にならなくなったなら、それは修正ではなく、基準を緩めたということです。

**気に入らない判定を見てからアサーションを書き換えることが、ゲートを駄目にします。**前述のように、それが正しい場合もあります。誠実さを保つための規律は機械的なものです。既知の良好なプレートと既知の不良プレートをテスト用に固定し、アサーションを編集するたびに両方を再実行します。不良プレートは、引き続き同じ理由で不合格にならなければなりません。このため、うまく機能するときのループは信頼できます。失敗以降にアサーションに手を加えていない状態で、それを通過したリトライは確かな証拠です。文面を変更して初めて通過したものは、証拠ではありません。 ゲートが下した判定を信頼する前に、ゲート自身の証拠を一度、自分の目で確認してください。 このツールの初版では、6つの入力を個別にffmpegのtileフィルターに渡してコンタクトシートを作成していました。tileは単一のストリームから連続するフレームを読み込むため、最初のフレームだけをタイル状に並べ、残りは黒いままにして、終了コード0で終了し、もっともらしいJPEGを書き出しました。判定役には1フレームしか見せていないのに、6フレームにわたる動きについて尋ね、回答を返していました。終了コードからは何も分かりません。黙って失敗するQCツールは、QCツールがないよりも悪質です。なぜなら、根拠のない確信を生み出すからです。

**実行を成功させるためにゲートを緩めてはいけません。**素材を修正するか、失敗をそのまま示してください。これには、より目立たない落とし穴もあります。チェックに引っかかると、指摘された数値を、引っかからなくなるまで下げたくなります。コリジョン警告への対処としてコールアウトの表示時間を0.5sに短縮したところ、重なりは解消しましたが、表示が短すぎて主張を読み取れなくなりました。ゲートは合格になり、広告は悪くなりました。作業の質を下げてチェックを通す修正は修正とは言えません。また、その場合はゲートが測る対象を間違えています。

誰も対応しない警告は、ゲートのバグです。「コールアウトがショットより長く表示される」が警告レベルのままになっていたため、カット後もラベルが残り、画面に映っていない機能を指し続ける映像が書き出されました。出力が間違っていることを示す条件なら、エラーにしてください。

**QCファイルはコンソール表示と一致させてください。一致しなければ、信じられるのはファイルのほうです。**同期エラーが2件あるスポットで、ビルダーはFAILURES PRESENTを出力してゼロ以外の終了コードを返した一方、同じスポットのmaster-qc.jsonには"pass": trueと書き込んでいました。同期チェックはローカルの判定を不合格にしましたが、保存された記録はシグナルゲートの合格フラグから作られており、そのフラグは同期について何も把握していません。標準出力を見ずに成果物だけを読むと、スポットは合格に見えてしまいます。複合判定を記録し、失敗内容も併記してください。そうすれば、ビルドを再実行しなくても記録を監査できます。

**個別項目の実行で、ビルドしなかった項目の記録を消してはいけません。**同じファイルは実行のたびに空の辞書から作り直されていたため、--only kestrelを実行するとstonewellのエントリーが気付かれないまま削除されていました。その結果、ファイルは1つのスポットしか記述していないのに、プロジェクト全体を記述しているように見えました。これは、記録が不完全なのに完全に見えるという、より危険な状態です。既存の内容にマージし、各エントリーにビルド時刻を記録し、以前の実行に由来するエントリーを明記してください。

この2つは、先ほどのコンタクトシートのバグと同じ失敗です。ただし、別の経路で起きています。チェック自体は正しく動作したのに、レポートが嘘をついたのです。ゲートと成果物の内容が食い違う可能性があるなら、意図的に失敗を起こし、ターミナルではなくファイルを読んで、食い違いがないことを確認してください。

コピー

画面上のコピーは、映像よりも速く主張を生み出します。もっともらしい仕様を書くのに、何のコストもかからないからです。

すべての行に根拠を求め、その根拠の種類を明記してください。 Seenは、ラベルが指している映像素材に実際に映っていることを意味します。Specは、参照デザインに含まれていることを意味します。Saidは、承認済みのVOで言及されていることを意味します。根拠のない行は公開しません。

実案件で、この条件を満たさないラベルが2つありました。「TWO-STAGE LOCK」と「COLD-FORGED」です。どちらも、設計も生成も発話もされていない機構や製法を名指ししていました。確かな仕様のように見えますが、実際にはでっち上げです。パイプラインを紹介する映像で、曖昧なコピーを書くよりも悪い結果です。

証拠は、名詞か数値に含めてください。「38 litres」は「generous capacity」よりも適切です。素材と部品を具体的に記してください。stainless body、walnut sleeve、charcoal zip bandのように書きます。仕上がりを評価する形容詞(smooth、precise、effortless、honest)は、映像では示せないことを主張します。そのため、VOによる裏付けがなければ削除してください。

**部品は、実際に人が使う呼び方で記してください。**ハンドルを「Telescoping stem」と呼ぶ人はいません。

編集

同じディゾルブを3回繰り返しても編集ではなく、単なるデフォルトです。ショット間の関係性が異なるのに、どの組み合わせにも同じことを伝えてしまいます。

表現の種類は絞り、それぞれに役割を持たせます。連続性が明らかで、その確かさが重要となる、同じオブジェクトを異なる視点から見せるショット間にはハードカットを使います。スケールや被写体が変わるときは短いディゾルブを使います。編集で到達した感覚を出したい見せ場への切り替えには、2フレームのフラッシュを使います。フラッシュの色は、プレート自体のハイライトから採取します。暖色系のセットに白を使うと、フレームが白飛びしたように見えます。

カメラの動きは、きちんと終わらせます。 ショット全体を一定の速度で動くプッシュインは、ソフトウェア的に見えます。動きをイーズアウトさせ、早めに到達させてから、止めて見せます。この静止によって、動きが意図的なものに見えます。

生成では抜け落ちる不完全さを加えます。 生成されたプレートは光学的に死んでいます。トランスフォームにサブピクセル単位のシード付きノイズを加えると(2オクターブ、960pxでおよそ1ピクセル)、継ぎ目なく溶接されたような映像ではなく、リグで撮影したように見えます。また、軽い粒状感によって、H.264の後にバンディングが出る滑らかなグラデーションにディザリングを加えられます。どちらも見えないほど控えめにし、なくなって初めて気づく程度にします。シードを設定すれば、再ビルドしてもバイト単位で同一の結果になります。

レンダラーの選択

カット、ディゾルブ、キャプション、スクリーン、フェード、ラウドネス調整、マルチプレクスにはffmpegで十分で、すでにどこにでもインストールされています。

エンドカードがレイアウト、ウェブフォント、データ駆動型のバリエーション、多数のサイズを含む本格的なデザインに発展したら、Remotionを使う価値があります。Reactなので、グラデーションは、生成したアルファランプを計算したオフセットに重ねる代わりに、CSSの宣言1つで表現できます。また、スタジオではスクラブ可能なプレビューを利用できます。

Remotionを選ぶ前に知っておくべきことが2つあります。ライセンスについては、Remotionは個人および3人以下の企業なら無料ですが、4人以上の企業には有料のCompany Licenseが必要です。音声については、ブラウザーではステムがそのまま再生され、ラウドネスの正規化は行われないため、未マスタリングのテイクは生のレベルでレンダリングされます。まずffmpegで音声をマスタリングし、完成したステムをRemotionに渡してください。

どちらのレンダラーも、同じ算出済みタイミングを使用できます。計測は1か所にまとめ、レンダラーは書き直すのではなく、選択できるようにします。両者を完全に一致させるには注意が必要です。キャプションフィルターはグリフのボックスを基準に配置する一方、CSSはフォントのアセントに含まれるリーディングも含めるため、テキストの配置が異なります。また、クロスディゾルブはカット時点で始める必要があり、その時点で終わらせるのではありません。

参考資料

references/pipeline.mdは、マニフェストのスキーマ、算出済みタイミングのエクスポート、両方のレンダラー、測定済みのしきい値とネガティブコントロールを含むQCゲートの一覧をまとめた、参考設計および実装の設計図です。説明されているモジュールはこのリポジトリには含まれていません。エージェントが、そこに記載された仕様に基づいて構築します。

コメント