talking-head-b-roll について
完成済みのトーク映像に、タイミングを合わせたオーバーレイや全画面の B-roll を加える制作スキルです。元の音声と映像を保ちながら、文字起こし、画面構成、レンダリング、納品を支援します。
主な機能
- 01単語ごとの時刻付き文字起こし
- 02人物・オーバーレイ・カバーの構成
- 03発話に合わせた映像タイミング
- 04映像とアルファレイヤーの出力
- 05レイアウトとシーンのリズム確認
活用シーン
- 01完成済み映像への説明グラフィック追加
- 02元音声を保った B-roll 制作
- 03動画編集者向け編集可能レイヤーの納品
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ iart-ai/ b-roll-skills --skill talking-head-b-rollインストール後、Claude Code で/talking-head-b-rollを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
scripts/compare-timing.pyrender.mjstiming.test.mjstranscribe.mjstemplates/b-roll.html詳細
トーキングヘッドのBロール
ユーザーの録画はすでに良好です。言葉も話し方も完成しています。トーキングヘッドだけでは見ていて退屈なので、映像の役割は、話の各部分で何を映すかを決めることです。音声は止まらず、映像だけが変わります。
録画はカット、移動、トリミング、拡大縮小をしません。作成するものはすべて、その上に重ねるレイヤーです。話者を見せる部分は透明にし、グラフィックで覆う部分は不透明にします。scripts/render.mjs がそのレイヤーを録画に重ね、音声をそのまま保持します。
一度で仕上げてください。録画や妥当なデフォルト設定で答えが出る質問はせず、納品時に選んだ内容を列挙してください。録画を置いたフォルダーで作業し、そこからスクリプトを実行してください。出力もそのフォルダーに保存されます。以下の <skill> は、このスキルのフォルダー(このファイルがあるフォルダー)を指します。
1. 文字起こし
node <skill>/scripts/transcribe.mjs talk.mp4 # → transcript.json, and prints every line with its start and end
動画のサイズ、フレームレート、長さ(これらはページに記載します)と、文末で分割した文字起こしが表示されます。各単語のタイミングは transcript.json に記録されます。何かを決める前に、文字起こし全体を読んでください。ローカルに whisper.cpp がインストールされていればそれを使い、そうでなければ ELEVENLABS_API_KEY を使います。どちらもない場合は、設定方法が表示されます。間は音声そのものから取得されるため、文と文の間の空白は話者が実際に止まっている箇所です。文中のタイミングには数十分の一秒ほどの誤差があります。文字起こしで数値を聞き間違えている場合があります。発言のほかの内容と合わない数値は画面に出さず、納品時にその旨を伝えてください。
2. プラン:3つの演出
A. 話者。 動画のみで、何も重ねません。その人自身が主役となる箇所に使います。冒頭のセリフ、個人的な意見や体験談、感情が表れる場面、行動喚起、締めのセリフなどです。
B. オーバーレイ。 動画を見せたまま、その上に透明なモーションレイヤーを重ねます。キーワードや短いフレーズ、カウントアップする数値、アイコン、矢印、ロゴ、項目を一つずつ表示する短いリストなどです。話者を見続ける価値がありながら、セリフに具体的に見せる価値のあるものが一つある場合に使います。オーバーレイは画面の端や上部または下部の3分の1に配置し、話者の顔に重ならないようにしてください。一度に表示するアイデアは一つだけにし、話の内容が移ったら消します。
C. 全面カバー。 不透明な全画面のモーションシーンで話者を隠し、声だけを流し続けます。顔で語るより見せたほうが伝わりやすい内容に使います。数値や比較、手順や工程、仕組み、製品やインターフェース、3つ以上の要素がある内容などです。モーションは飾りではなく、セリフの内容を説明するものでなければなりません。
文字起こしを文末または節の切れ目で行に分けます。各行にA、B、Cのいずれかを割り当て、理由を1文で示します。BまたはCでは何を見せるかも記載します。その後、リズムを確認します。
- Aで始め、視聴者が話者と出会えるようにします。Aで締めくくります。
- Aが約8秒を超えて続かないようにし、BまたはCを挟みます。
- Cは約3~8秒にします。スライドショーに声を重ねただけの映像にならないよう、Cが続く間には話者に戻します。
- 演出の切り替えは行の境界で行い、オーバーレイは説明する単語に合わせて表示します。どの要素を先行させるか、または同期させるかは、以下のタイミングルールに従って選びます。
- 行ごとに切り替えるより、少数の明確な演出を優先します。
ビジュアルのタイミング:ビートごとに決める
Bロールレイヤー全体で一度だけ決めるのではなく、意味のある要素ごとにタイミングを選びます。プランには、話された単語/フレーズ、タイムスタンプ、選んだタイミング、簡単な理由を記録してください。
| タイミング | 使用対象 | 時計 |
|---|---|---|
| 約6フレーム先行 | 視聴者が目で準備できる情報:軸、カード、オブジェクト、プロセスの構成 | s.now |
| 該当する単語に同期 | 新たな重要情報:金額、割合、価格、順位、グラフの最終値 | s.audioNow |
| 明かされるまで待つ | オチ、否定、伏せられた答え、結論 | 明かされる単語またはフレーズを条件にした s.audioNow |
「収益が30%伸びました」の場合、まずグラフの構成を早めに表示し、30%が読める状態になるのと最後の棒グラフの値が決まるタイミングを「30%」に合わせます。同期とは、長いフェードやカウントアップが始まることではなく、情報が読める状態になる、または表示が確定することです。準備のための動きは早めに始めてもかまいませんが、答えを早く明かしてはいけません。すでに述べられた値は、文脈として表示し続けてもかまいません。
SCENES.from/toと単語アンカーには、元のトランスクリプトの秒数を使います。テンプレートはVISUAL_LEAD_FRAMES / FPSの分だけ構成の時計を進めます(デフォルトは6フレーム:25 fpsでは240 ms、30 fpsでは200 ms)。s.now、t、s.in、s.outはこの時計に従い、s.audioNowは実際の再生時間のままです。同期する各情報は、s.audioNow >= wordStartを条件に表示してください。アンカーもずらしたり、完成したレイヤーをエディターで再タイミングしたりしないでください。完全同期のリクエストではVISUAL_LEAD_FRAMES = 0を使います。要素が混在するシーンでは、事実情報と伏せられた内容をオーディオクロックに合わせてください。
録音、音声、キャプション、映像の長さは変更しないでください。シーンの終了位置をずらしたことで、同期する情報が隠れたり、読める状態での表示時間が短くなったりしていないか確認してください。必要に応じて、そのシーンと隣接するシーンを延長するか、計画を立て直します。冒頭と末尾は話者だけの状態を維持してください。アンカーの前後を聴いて確認してください。単語の推定時刻がフレーム単位で正確とは限りません。これはサンプルのレビューに基づく編集上のデフォルトであり、普遍的な知覚ルールではありません。
比較する際は、ビジュアルを固定し、音声ありで確認してください。scripts/compare-timing.pyはレイヤー全体をずらす旧式の実験用ツールにすぎません。ゼロリードのベースラインのアルファレイヤーを入力し、要素ごとにタイミングを設定したレイヤーや、すでに進めたレイヤーは入力しないでください。このツールでは、要素ごとのタイミング設定を検証できません。
映像に焼き込む完全なキャプションは対象外です。ユーザーから依頼があった場合にのみ追加してください。Bオーバーレイのテキストは重要な単語をいくつかにとどめ、話されている文をそのまま表示しないでください。
画面上のテキストには、話者が実際に口にする単語か、トランスクリプトまたはユーザーの資料にある数字や名前を使います。数値、主張、引用を創作しないでください。
3. ページを作成する
<skill>/templates/b-roll.html を録画ファイルの隣に page.html としてコピーし、次の項目を設定します。
transcribe.mjsの出力から、VIDEO、W×H(動画の縦横サイズ。1920 × 1080、縦向きなら 1080 × 1920。4K ファイルでも、ページは 1920 × 1080 のままで構いません)、FPS、DURATIONを設定します。FACE:話者の頭(髪を含め、周囲に少し余白を残した範囲)の位置を、フレームに対する割合で指定します。node <skill>/scripts/render.mjs page.html face --stills 2s,20s --faceを実行すると、枠付きで録画を確認できます。すべての静止画で頭が収まるように調整してください。SCENES:B または C の各区間に対して 1 エントリーを設定します。形式は{ from, to, kind: 'overlay' | 'cover', draw }で、時刻はtranscript.jsonの単語のタイミングから取得します。シーンに含まれない部分はすべて A です。2 つのシーンを連続させることもできます(片方のtoを次のfromと同じにします)。その間に話者が一瞬だけ見えると、ちらついて見えます。- 各シーンに、そのセリフに合わせた
draw(t, s)を 1 つずつ記述します。テンプレートにある 2 つの例(キーワードカードと同期する数字)は構造を示すものであり、デザインを示すものではありません。s.inとs.outは表示開始と終了を示し、s.nowは進行する構造上の時刻です。同期する情報や、明かすタイミングを遅らせる情報には、s.audioNowと元の単語のアンカーを使用します。
サーフェスはデフォルトで LIGHT です。ダークにするのは、(a)ユーザーまたはブランドから明示的な要望がある場合、または(b)題材そのものが暗いサーフェスに適している場合(ターミナル/コード、夜空、映画館)に限ります。ネオンを黒地に表示するのは、あらゆる AI 動画で使われる陳腐なデフォルトです。依頼されていないのにこれを選ぶのは、デザイン上の失敗です。
フォント:使用するウェイトを指定した Google Fonts の <link> をファミリーごとに 1 つ用意し、描画に使うすべてのフォントを FONTS に記載してください。これにより、フォールバックフォントでのレンダリングを防げます(レンダリングにはフォントの読み込みにネットワークアクセスが必要です)。
4. 確認する
node <skill>/scripts/render.mjs page.html --check # the plan against the transcript and the pixels
node <skill>/scripts/render.mjs page.html film.jpg --sheet 1 # the whole film, one frame a second, over the recording
node <skill>/scripts/render.mjs page.html shot --stills 12s,20s # full frames, to read text and spacing
--check を通過する必要があります。各カバーは表示後に話者を完全に隠し、オーバーレイは FACE に一切入り込まず、元の音声の各アンカーは単語と単語の間にあり(表示するグラフィックはアンカーより先に表示しても構いません)、シーンの外には何も描画されず、テキストがフレームからはみ出したり、ほかのテキストに重なったりしないことを確認します。テキストがフレームの端から 3% 以内にある場合は警告が表示されます。プレーヤーによっては端が切れることがあるためです。また、各区間で話される内容を含むタイムラインを出力し、リズムについても警告します(話者だけが映る区間が長い、カバーが 3 秒未満または 8 秒超、カバーが連続している、話者の映像で始まらない、または終わらない)。理由があれば警告を許容できます。その場合は理由を伝えてください。
グラフィックがセリフの内容を表しているか、テキストが読みやすいか、カードからはみ出したりグラフの線を横切ったりしていないかは確認できません。シートで全体の流れを確認し、各シーンの静止画でテキストを確認してください。問題がなくなるまで修正して再確認します。
5. レンダリングして納品する
node <skill>/scripts/render.mjs page.html film.mp4 # the finished film: the recording, the b-roll over it, the original sound
node <skill>/scripts/render.mjs page.html b-roll.mov # the b-roll alone with alpha: ProRes 4444 for Premiere Pro, Resolve, Final Cut
node <skill>/scripts/render.mjs page.html b-roll.webm # the same as VP9 with alpha: small, for browsers and OBS
film.mp4、ページ(ブラウザーで開くと、音声付きで動画を再生し、シーンをスクラブできます)、および短い表にまとめた構成案を渡します。表には、時刻、セリフの内容、処理、画面表示を記載してください。Premiere Pro、DaVinci Resolve、Final Cut で編集する場合は、アルファレイヤー(.mov。ProRes は容量が大きく、1080p で 1 秒あたり約 5 MB)も渡します。録画の上のトラックに、0 秒から配置します。依頼されていない内容で、何を選んだかも伝えてください。
必要なもの:Node 18 以降、作業フォルダーまたはその上位フォルダー(あるいはスキルのフォルダーまたはその上位フォルダー)での npm i playwright-core、ffmpeg、Chrome(または npx playwright install chromium)、および文字起こし用の whisper.cpp または ElevenLabs のキー。