Communitygithub.com

Kreesten-hsh/video

このスキルは、アニメーション付きローワーサードの作成、名前タグ・ロールタグの追加、放送用タイトルの制作などに使用します。スライド/ワイプ/マスク等の出入りアニメーション、タイミング、セーフエリア、名前と役割の階層、ブランドスタイル、複数名へのテンプレート適用をカバーします。

video とは?

このスキルは、映像制作においてよく使われる「ローワーサード」(画面下部に表示される名前・役職のキャプション)を、プロフェッショナルかつブランド統一された形で構築するための完全なガイドです。ユーザーが「アニメーションするローワーサードを作って」「名前タグを追加して」「放送用タイトルをアニメーションして」などと依頼した際に呼び出されます。 スキルは、アニメーションの入り(スライド、ワイプ、マスクリビール)と出、表示時間の設計、セーフエリア(16:9、9:16、1:1)と放送コンベンションの遵守、名前と役割のタイポグラフィ階層(サイズ比1.6倍以上)、ブランドスタイルの統一といった実践的ルールを詳細に説明します。さらに、名前/役割/テーマをプロパティとして設計することで、1つのテンプレートから複数人のローワーサードを一括レンダリングする方法も示しています。 主にRemotion(Reactベースの動画フレームワーク)を動作環境として想定し、`useCurrentFrame()`によるフレーム駆動制御を徹底。`Date.now()`や`Math.random()`、タイマーを禁止し、決定論的なレンダリングを保証します。検証用のスクリプト(静止画確認、MP4エンコード、GIF出力)も同梱され、開発効率を高めます。 このスキルは、映像編集者、モーションデザイナー、そしてプログラムによるタイトル生成を自動化したい開発者にとって、現場で即座に使える具体的かつ再現性の高い知識を提供します。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Kreesten-hsh/video/tree/HEAD/.agents/skills/lower-thirds

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

ローワーサード

映像フレームの下部に配置される、クリーンでブランド統一されたローワーサード(名前・役職キャプション)を構築します。アニメーションで入り、十分に表示されてから、ショットを邪魔せずに退出します。その巧みさは抑制にあります:鮮やかなリビール(出現)、明確なタイポグラフィ階層、正しいセーフエリア配置、そして一人のスピーカーではなく、複数のスピーカーを一つのテンプレートで駆動できることです。

使用するタイミング

  • スピーカー/インタビューの名前タグ、パネルロスター、トーキングヘッドのキャプション
  • 放送スタイルのタイトル、ニュースストラップ、ポッドキャスト/ウェビナーのネームプレート
  • 一つのデザインを複数の名前・タイトルにテンプレート適用 → 多数のクリップ生成(これが真価)

構造

ローワーサードは、2行のテキストとグラフィックベースで構成され、フレーム下部に配置されます。

要素役割タイポグラフィ処理
名前(プライマリ)誰最大、最も太く、最も詰まったトラッキング
役職/タイトル(セカンダリ)何/どこ名前サイズの約45~60%、細いウェイト、多くの場合ブランドアクセントカラー
バー/パネル/アクセントあらゆる背景に対する可読性ベタまたは70~85%の不透明度;アクセントルールはブランドに合わせる

2行に抑えてください。名前行+役職行で十分です。余分な行は階層を損ない、セーフエリアを圧迫します。

安っぽく見せないための3つのルール

  1. タイトルを「ハードカット」(無アニメーションで出現/消失)させないこと。 単なる出現/消失はミスに見えます。12フレームのフェードやスライドだけでも、制作された印象を与えられます。
  2. 「スタッガー」(段階的表示)を行い、「一気に」表示しないこと。 最初にバー、次に名前、最後に役職、と3~6フレームずつずらしてアニメーションさせてください。すべてが同時に現れると平坦に感じられますが、短いカスケードはデザインされた印象を与えます。
  3. 2回読めるだけ十分に長く表示すること。 画面上に約3~5秒(声に出して2回読んでみてください)。短すぎると見逃され、長すぎると煩わしくなります。アニメーションは入りと出のみ、セグメントの途中では行いません。

入りと出のアニメーション

一つのモーション言語を選び、それを繰り返し使用してください。最も信頼性が高く、プレミアム感のあるリビール:

リビール方法印象方法
スライド+フェードクリーン、デフォルトフェードしながら約24~40px平行移動;入りはイーズアウト
ワイプバー放送感バーがスケール/スイープで入る(scaleX/クリップ)、テキストはその後ろでフェード
マスクリビールプレミアムテキストを移動する長方形でクリップし、文字が「ワイプオン」されるように表示

非対称なイージングを使用:入りは素早いease-out(cubic-bezier(.22,1,.36,1))、出はより速いease-in。出の時間は入りより短く(約2/3の時間)設定し、タイトルがすぐに邪魔にならないようにします。

/* マスクリビール:テキストが左→右にワイプオン、プラグイン不要 */
.lt-name { clip-path: inset(0 100% 0 0); animation: wipe .5s cubic-bezier(.22,1,.36,1) forwards; }
@keyframes wipe { to { clip-path: inset(0 0 0 0); } }

入り/出のタイミングと表示時間

3つのフェーズで考えます。「感覚」ではなくフレーム数で予算を組みます(30fpsの場合):

フェーズフレーム数予算注意
入り12~18f(0.4~0.6秒)スタッガー:バー → 名前 → 役職
表示90~150f(3~5秒)読み取り可能な表示時間;テキストの長さに応じて調整
出8~12f(0.27~0.4秒)入りより速く

コード内では、すべての状態を現在のフレーム(または一時停止されたタイムライン)から駆動し、壁時計時間を使用しないでください。ビデオレンダラーは決定論的なフレームを要求します。入り/表示/出を単一の進行曲線で表現することで、同じコンポーネントがブラウザでのライブ表示とフレーム単位のレンダラーの両方で動作します。

セーフエリアと放送コンベンション

ローワーサードは、あらゆる画面とプラットフォームのUI上で成立する必要があります。タイトルセーフエリア(内側の約90%/マージン5%)内で構成し、プラットフォームのクローム領域を尊重してください:

フレームアンカー避ける領域
16:9(1920×1080)左端は約5%マージン;ベースラインは80~85%下外側5%(タイトルセーフ)、アクションセーフの外側10%
9:16(1080×1920)同じ左マージン;バンドを持ち上げる下部約18%(キャプション/UI)、上部約12%
1:1(1080×1080)下部バンド、中央左寄せ外側5%

左にアンカーし、右方向に拡大させることで、異なる長さの名前が固定され、不恰好に再センタリングされるのを防ぎます。役職行も名前と同じ左マージン内に収めてください。9:16の場合、タイトルを最下部に配置しないでください。プラットフォームのキャプションやボタンがそこにあります。

タイポグラフィ階層とブランドスタイル

階層こそがデザインのすべてです。名前が間違いなく支配的になるようにします:

  • サイズのコントラスト:1.6倍以上(名前 対 役職)。迷ったら、名前を大きくし、役職は小さくします。
  • ウェイト+色:名前は太字/ほぼ白;役職は細いウェイトとブランドアクセントカラー(一貫して使用する1つのアクセントカラー)で。
  • 可読性のためのコントラスト:テキストは未知の映像の上に配置されます。ソリッド/半透明のバー、微妙なスクリム、またはソフトなテキストシャドウを使用して、明るいプレートと暗いプレートの両方で読み取れるようにします。
  • ブランドロック:フォント、アクセントカラー、バースタイル、コーナー半径を1つのテーマオブジェクトに固定し、シリーズ全体のすべてのタイトルが一致するようにします。

一つのデザインをリストにテンプレート適用

これをコードで構築する理由:テキスト/データを変更し、再エクスポートする — 再アニメーションは不要。名前/役職/テーマをプロパティにし、ハードコードせず、ロスター(名簿)をインスタンスにマッピングします。

const ROSTER = [
  { name: "Ada Lovelace",  role: "Founder, Analytical Engines" },
  { name: "Grace Hopper",  role: "Rear Admiral, US Navy" },
  { name: "Alan Turing",   role: "Mathematician" },
];
// 1つの <LowerThird> デザイン;リストをマッピング → 多くのインスタンス(レンダラーでシーケンス)
{ROSTER.map((p, i) => <LowerThird key={p.name} {...p} theme={BRAND} startFrame={i * 150} />)}

レンダラーでは、ロスターを入力プロパティにし、1行ごとに1回レンダリング(--props)して、人物ごとにブランド化された1つのクリップを出力します。同じアニメーション、同じブランド、変更されるのはテキストのみです。完全な実行可能コンポーネントとバッチスクリプトについては、references/lower-third-component.mdを参照してください。

出力チェックリスト

  • 2行のみ:支配的な名前、セカンダリな役職(サイズ比1.6倍以上)
  • 入りと出のアニメーション(ハードカットなし);入りはバー→名前→役職の順にスタッガー;出はより速く
  • 3~5秒間表示(2回読める);モーションは最初と最後のみ、セグメントの途中では行わない
  • 左寄せでタイトルセーフ内;9:16ではバンドを持ち上げ、下部18%のUIゾーンより上に配置
  • あらゆるプレート上でテキストが読み取り可能(バー/スクリム/シャドウ);1つのブランドアクセントを全体で使用
  • 名前/役職/テーマはプロパティ — 1つのテンプレートがロスター全体をレンダリング

配信と検証(レンダリング静止画 → MP4)

パッケージ化されたヘルパー(scripts/):scripts/contact-sheet.shで静止画をタイル表示し、scripts/probe-mp4.shでエンコードを検証します。scripts/README.mdを参照してください。

ローワーサードはRemotionコンポジション(<Composition> + zod schema + defaultProps、名前/役職/テーマをプロパティとして)として出荷されます。入り/表示/出のすべてはuseCurrentFrame()で駆動され、Date.now() / Math.random() / タイマーは使用しません。成果物 = out/*.mp4 + プロジェクト(ロスターの各行ごとに再レンダリング)。9:16縦長(1080×1920)がデフォルトです。

検証ループ — 静止画レンダリング → 確認 → エンコード。 3つのフェーズをサンプリングして、スタッガーやセーフエリアのバグをエンコード前(またはロスター全体のバッチ処理前)に発見します。

# 入り / 表示 / 出の静止画 — 出荷用プロップスを使用(デフォルトではなく実際のロスター行)
npx remotion still LowerThird out/f-enter.png --frame=10  --props='{"name":"Ada Lovelace","role":"Founder, Analytical Engines"}'
npx remotion still LowerThird out/f-dwell.png --frame=75  --props='{"name":"Ada Lovelace","role":"Founder, Analytical Engines"}'
npx remotion still LowerThird out/f-exit.png  --frame=N   --props='{"name":"Ada Lovelace","role":"Founder, Analytical Engines"}'

# 各PNGを確認 — 特にDWELLフレーム(画面に完全に表示されている状態)に注目:
#  - 階層が成立している:名前が支配的(役職の1.6倍以上)、役職はブランドアクセントカラー;両方とも完全に表示され、ワイプ途中ではない
#  - ブランドロック:フォント、アクセントカラー、バー/スクリムが正しい;プレート上で判読可能
#  - 9:16セーフエリア:バンドが下部の約20~35%のUIゾーンより上に持ち上げられ、上部の約12%と右側のアクションレールから離れている;左寄せでタイトルセーフ内
#  - 入り/出のフレームは部分的なリビールを示している(アニメーションが実際に動作している)、ハードカットではない

npx remotion render LowerThird out/lower-third.mp4 --props='{"name":"Ada Lovelace","role":"Founder, Analytical Engines"}'
npx remotion render LowerThird out/demo.gif --codec=gif                # README用証明クリップ

バッチロスター:すべての名前をレンダリングする前に、静止画で1行を検証 — レイアウト/はみ出しバグをN回ではなく1回で発見します。npx remotion compositionsでdurationInFrames/fpsを確認し、表示フレームと出フレームを選択してください。

完了する前に:

  1. 入り、表示、出の各静止画がクリーンにレンダリングされる — フォント/ブランドアセットの欠落なし。
  2. 表示フレームで:名前が役職より支配的、ブランドアクセントとバーが正しい、完全に(部分的ではなく)表示されている。
  3. バンドは9:16のセーフエリア内 — 下部UIゾーンより上に持ち上げられ、上部と右レールから離れている — チェックしたすべてのフレームで。
  4. フレーム駆動のみ — Date.now() / Math.random() / タイマーなし;入り/出は動きを示し、ハードカットではない。
  5. 実際のロスター行(defaultPropsではない)が正しくレンダリングされる;MP4がエンコードされ、GIFはオプション。

参考ファイル

  • references/lower-third-component.md — 完全な実行可能ローワーサード:フレームのみで駆動されるスタッガードスプリング入り、読み取り可能な表示、高速な出を持つRemotionコンポーネント;ブランドロックのための型付きテーマオブジェクト;リスト→多数インスタンスのシーケンスパターン;行単位のバッチレンダリングスクリプト;さらに、同じデザインの依存関係不要なCSS/HTML版(マスクリビールとワイプバーのバリアント付き)。

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

関連スキル