mcpField
V
video-use

video-use

github.com/browser-useクリエイティブ・メディア30.0k5.2k 回インストール3 週間前に更新
リポジトリ

video-use について

video-use は動画編集ワークフロー向けのスキルです。単語単位の文字起こしと必要な場面での映像確認を基に編集案を作り、ユーザーの承認後に実行して出力を確認します。

主な機能

  1. 01単語単位の文字起こしとフレーズ整理
  2. 02判断時点での映像確認
  3. 03承認後の編集実行
  4. 04セグメント編集、結合、字幕
  5. 05プレビュー確認と反復修正

活用シーン

  1. 01複数素材から最良のテイクを選ぶ
  2. 02音声に沿ってカットし反応を残す
  3. 03字幕、オーバーレイ、カラーグレーディングの追加

インストール

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

$npx skills add https://github.com/browser-use/video-use --skill video-use

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

.gitignore
.env.example
LICENSE
README.md
pyproject.toml
install.md
poster.html
helpers/
pack_transcripts.py
transcribe_batch.py
transcribe.py
timeline_view.py
grade.py
render.py
skills/manim-video/
README.md
skills/manim-video/references/
decorations.md
camera-and-3d.md
equations.md
animation-design-thinking.md
animations.md
production-quality.md
mobjects.md
scene-planning.md
paper-explainer.md
updaters-and-trackers.md
graphs-and-data.md
rendering.md
troubleshooting.md
visual-design.md
skills/manim-video/scripts/
setup.sh
tests/
test_render_captions.py

詳細

動画の使用

基本方針

  1. LLM は生の文字起こしと必要に応じた映像から推論します。 役に立つ唯一の派生アーティファクトは、フレーズ単位でまとめた文字起こし(takes_packed.md)です。それ以外のすべて(フィラーのタグ付け、リテイクの検出、ショットの分類、強調度のスコア付け)は、判断する時点で行います。
  2. 音声を優先し、映像は後から確認します。 カット候補は発話の境界と無音部分から決めます。映像を詳しく確認するのは、判断が必要な箇所だけです。
  3. 質問 → 確認 → 実行 → 反復 → 保存。 ユーザーが平易な英語で方針を確認するまで、カットには手をつけません。
  4. 一般化します。 動画の種類を決めつけてはいけません。素材を確認し、ユーザーに質問してから編集します。
  5. 創作の自由を基本とします。 このドキュメントに記載されている具体的な値、プリセット、フォント、色、長さ、ピッチ構成、手法はすべて、実績のある動画から取った実例であり、必須ではありません。何が可能なのか、そしてそれぞれがなぜうまくいったのかを理解するために読んでください。そのうえで、実際の素材とユーザーの希望に基づいて、自分のセンスで判断してください。必ず守る必要があるのは、以下の「厳守事項」だけです。 それ以外は自由です。
  6. 自由に工夫してください。 素材に、ここで説明されていない手法(画面分割、ピクチャー・イン・ピクチャー、ローワーサードのプロフィールカード、リアクションカット、スピードランプ、フリーズフレーム、クロスフェード、マッチカット、L カット、J カット、息継ぎ中のスピードランプなど)が必要なら、作成してください。使用するのは ffmpeg と PIL です。対応している形式なら何でもできます。許可を待つ必要はありません。
  7. ユーザーに見せる前に、自分の出力を確認してください。 自分で納品できないと思うものは、提示しないでください。

厳守事項(制作上の正確性 — 譲れないルール)

逸脱すると、気づきにくい不具合や出力の破損につながる項目です。好みの問題ではなく、正確性の要件です。必ず覚えてください。

  1. 字幕はフィルターチェーンの最後に適用します。すべてのオーバーレイの後に適用してください。そうしないと、オーバーレイが字幕を隠します。気づきにくい不具合につながります。
  2. セグメントごとに抽出してから、ロスレスの -c copy で連結します。単一パスのフィルターグラフは使いません。そうしないと、オーバーレイを追加した際にすべてのセグメントが二重エンコードされます。
  3. 各セグメント境界で音声に 30ms のフェードをかけます(afade=t=in:st=0:d=0.03,afade=t=out:st={dur-0.03}:d=0.03)。そうしないと、各カットで耳につくポップノイズが発生します。
  4. オーバーレイには setpts=PTS-STARTPTS+T/TB を使用して、オーバーレイのフレーム 0 を表示区間の開始位置に合わせます。そうしないと、オーバーレイの表示中にアニメーションの途中が表示されます。
  5. マスター SRT には出力タイムライン上のオフセットを使用します:output_time = word.start - segment_start + segment_offset。そうしないと、セグメント連結後に字幕のタイミングがずれます。
  6. 単語の途中では絶対にカットしません。 すべてのカット位置を、Scribe の文字起こしに基づく単語境界に合わせます。
  7. すべてのカット位置にパディングを加えます。 作業範囲は 30~200ms です。Scribe のタイムスタンプには 50~100ms のずれがあるため、パディングでそのずれを吸収します。テンポの速い動画では短めに、シネマティックな動画では長めにします。
  8. 単語単位の逐語 ASR のみを使用します。 SRT/フレーズモードは使いません(1 秒未満のギャップ情報が失われます)。フィラーを正規化したものも使いません(編集上の手がかりが失われます)。
  9. 文字起こしはソースごとにキャッシュします。 ソースファイル自体が変更されていない限り、再度文字起こしを行ってはいけません。
  10. 複数のアニメーションにはサブエージェントを並行して使用します。 順次実行は禁止です。Agent ツールを使って N 個を同時に起動します。全体の所要時間は、おおよそ最も時間のかかるものと同じです。
  11. 実行前に方針を確認します。 ユーザーが平易な英語の計画を承認するまで、カットには手をつけません。
  12. セッションの出力はすべて <videos_dir>/edit/ に保存します。 video-use/ プロジェクトディレクトリ内には書き込みません。

このドキュメントのその他の内容はすべて実例です。素材に応じて、自由に変更してください。

ディレクトリ構成

スキルは video-use/ にあります。ユーザーの映像素材は、ユーザーが保存した場所にあります。セッションの出力はすべて <videos_dir>/edit/ に保存します。

<videos_dir>/
├── <source files, untouched>
└── edit/
    ├── project.md               ← memory; appended every session
    ├── takes_packed.md          ← phrase-level transcripts, the LLM's primary reading view
    ├── edl.json                 ← cut decisions
    ├── transcripts/<name>.json  ← cached raw Scribe JSON
    ├── animations/slot_<id>/    ← per-animation source + render + reasoning
    ├── clips_graded/            ← per-segment extracts with grade + fades
    ├── master.srt               ← output-timeline subtitles
    ├── downloads/               ← yt-dlp outputs
    ├── verify/                  ← debug frames / timeline PNGs
    ├── preview.mp4
    └── final.mp4

セットアップ

初回インストールについては install.md を参照してください(クローン、依存関係、ffmpeg、スキルの登録、API キー)。毎回のセッションで再実行する必要はありません。コールドスタート時には、次の点だけを確認してください。

  • ELEVENLABS_API_KEY が参照できること。環境変数に設定されているか、video-use リポジトリのルートにある .env に設定されている必要があります。設定されていない場合は、ユーザーにキーを貼り付けてもらい、.env に書き込んでください(ユーザーの <videos_dir> には絶対に書き込まないでください)。
  • ffmpeg と ffprobe が PATH 上にあること。
  • Python の依存関係がインストールされていること(リポジトリ内で uv sync または pip install -e . を実行)。
  • セッションで HyperFrames または Remotion のスロットが必要な場合は、Node.js と npm を利用できること。HyperFrames には現在 Node.js 22 以降が必要です。
  • yt-dlp、HyperFrames、Remotion、Manim は初回使用時にのみインストールしてください。
  • アニメーションの初回セットアップはスロットのディレクトリ内で行い、video-use リポジトリのルートでは行わないでください。HyperFrames は npx --yes hyperframes ... で実行できます。Remotion は npx create-video@latest でひな形を作成するか、プロジェクトローカルの依存関係としてインストールしてから、remotion render コマンドを使用できます。
  • このスキルには skills/manim-video/ が同梱されています。Manim のスロットを作成する場合は、その SKILL.md を読んでください。

ヘルパー(helpers/transcribe.py、helpers/render.py など)は、この SKILL.md と同じ場所にあります。パスは、このファイルが置かれているディレクトリを基準に解決してください。このスキルは通常、~/.claude/skills/video-use/ または ~/.codex/skills/video-use/ にシンボリックリンクされています。

ヘルパー

  • transcribe.py <video> — 単一ファイルの Scribe 呼び出しです。--num-speakers N は任意です。結果はキャッシュされます。
  • transcribe_batch.py <videos_dir> — 4 ワーカーによる並列文字起こしです。複数テイクに使用してください。
  • pack_transcripts.py --edit-dir <dir> — transcripts/*.json を takes_packed.md に変換します(フレーズ単位、無音が 0.5 秒以上続く箇所で区切ります)。
  • timeline_view.py <video> <start> <end> — フィルムストリップと波形の PNG を生成します。必要に応じたビジュアルの詳細確認に使用してください。スキャンツールではありません。常時ではなく、判断が必要なタイミングで使用してください。
  • render.py <edl.json> -o <out> — セグメントごとの抽出 → 結合 → オーバーレイ(PTS をシフト)→ 最後に字幕を追加します。高速な 720p 出力には --preview を指定します。master.srt をインラインで生成するには --build-subtitles を指定します。
  • grade.py <in> -o <out> — ffmpeg のフィルターチェーンで色調を補正します。プリセットのほか、カスタム設定用の --filter '<raw>' を指定できます。

アニメーションの場合は、<edit>/animations/slot_<id>/ を作成して Bash を使い、Agent ツールからサブエージェントを起動してください。

プロセス

  1. 素材を把握します。 すべての素材に対して ffprobe を実行します。ディレクトリに対して transcribe_batch.py を実行します。pack_transcripts.py で takes_packed.md を作成します。まず視覚的な印象をつかむため、timeline_view を1~2個サンプルします。

  2. 問題を事前にスキャンします。 takes_packed.md を一度確認し、言い間違い、明らかな誤発言、避けるべき言い回しをメモします。簡潔なリストにまとめ、編集者向けの指示に含めます。

  3. 対話します。 見えている内容を平易な英語で説明します。素材に合わせた質問をします。コンテンツの種類、目標の長さ/アスペクト比、美的方向性/ブランドの方向性、テンポ感、必ず残す場面、必ずカットする場面、アニメーションとカラーグレーディングの希望、字幕の必要性を確認します。決まったチェックリストは使いません。適切な質問は毎回異なります。

  4. 戦略を提案します。 形、テイクの選択、カットの方向性、アニメーションの計画、カラーグレーディングの方向性、字幕のスタイル、長さの見積もりを、4~8文で説明します。確認を待ちます。

  5. 実行します。 編集者向けのサブエージェント指示に従って edl.json を作成します。判断が曖昧な場面では timeline_view を詳しく確認します。アニメーションはサブエージェントを並行して動かして作成します。セグメントごとにカラーグレーディングを適用します。render.py で合成します。

  6. プレビューします。 render.py --preview を実行します。

  7. 自己評価します(ユーザーに見せる前に)。 ソースではなく、レンダリング済みの出力に対して、すべてのカット境界(±1.5秒の範囲)で timeline_view を実行します。各画像を確認し、次の点をチェックします。

    • カット箇所での映像の不連続/フラッシュ/飛び
    • 境界での波形のピーク(30msのフェードをすり抜けた音声のポップノイズ)
    • オーバーレイの背後に字幕が隠れていないか(ルール1違反)
    • オーバーレイの位置ずれや、誤ったフレームの表示(ルール4違反)

    さらに、冒頭2秒、末尾2秒、中間の2~3箇所をサンプルし、カラーグレーディングの一貫性、字幕の読みやすさ、全体のまとまりを確認します。出力に対して ffprobe を実行し、長さがEDLの想定と一致することを確認します。

    音声は推測せず、測定します。ffmpeg -i out.mp4 -af ebur128=peak=true -f null - を実行し、統合ラウドネスとトゥルーピークを測定します。加えて、セクションごと(会話、音楽のみ、エンドカード)のRMSも測定します。エンドカードが会話より15 dB低い場合や、効果音が話し声より大きい場合は不具合です。音声を聴くことはできないため、その旨を伝え、数値を報告します。

    ユーザーが公開するもの(ローンチ、プロモーション、広告など)については、レンダリング済みファイル、EDL、ユーザーから提供された参考動画を使って、批評担当のサブエージェントも1つ立ち上げます。褒めるのではなく、厳しく批評するよう指示します。判定、タイムコードと根拠(フレーム、レベル)を添えた問題の優先順位付きリスト、最初に行うべき5つの修正を提出させます。新鮮な視点なら、制作者が見慣れて見落とした点(オチのセリフのカット、0.5秒のミーム、スマートフォンで読めない28pxのテキストなど)に気づけます。

    問題があれば、修正 → 再レンダリング → 再評価します。自己評価は最大3回までです。3回後も問題が残る場合は、無限に繰り返さずユーザーに伝えます。自己評価に合格してからプレビューを提示します。

  8. 反復して記録します。 自然言語のフィードバックを受けて再計画し、再レンダリングします。再文字起こしはしません。確認後に最終レンダリングを行います。project.md に追記します。

カットの技術

  • 音声を優先します。 単語の切れ目や無音部分を候補としてカットします。
  • 盛り上がりを残します。 笑い、オチ、強調のビートを残します。オチの後に続く反応も含めるよう延長します。笑いそのものがビートです。
  • 話者の交代には、発話の間に余白を設けると効果的です。 一般的な値は400~600msです。テンポの速い動画では短めに、シネマティックな動画では長めにします。最終的には感覚で判断します。
  • 音声イベントを合図として使います。 (laughs)、(sighs)、(applause) はビートを示します。これらの後まで延長します。
  • 無音部分はカット候補です。 400ms以上の無音は、通常もっともきれいにカットできます。150~400msのフレーズの切れ目は、映像を確認すれば使用できます。150ms未満は危険です(フレーズの途中です)。
  • カットの余白の例(このローンチ動画で採用):最初に残す単語の50ms前、最後の単語の80ms後です。モンタージュの勢いを重視する場合は短く、ドキュメンタリーでは長めにします。30~200msの作業範囲を維持します(ハードルール7)。
  • 音声と映像を別々に判断してはいけません。 すべてのカットは両方のトラックで成立する必要があります。

パック済みトランスクリプト(基本の閲覧ビュー)

pack_transcripts.py はすべての transcripts/*.json を読み込み、各テイクがフレーズ単位の行のリストになった Markdown ファイルを 1 つ生成します。各行の先頭には [start-end] の時間範囲が付きます。フレーズは、0.5 秒以上の無音、または話者の切り替わりで区切られます。これは編集者サブエージェントがカットを選ぶ際に読む成果物です。生の JSON の 1/10 のトークン数で、テキストだけから単語境界の精度が得られます。

行の例:

## C0103  (duration: 43.0s, 8 phrases)
  [002.52-005.36] S0 Ninety percent of what a web agent does is completely wasted.
  [006.08-006.74] S0 We fixed this.

編集者サブエージェント向けブリーフ(複数テイクから選ぶ場合)

「多数のクリップから各ビートに最適なテイクを選ぶ」タスクでは、次のような構成のブリーフを使って専用のサブエージェントを起動します。構成は重要ですが、ピッチの形状に関する例は必須ではありません。

You are editing a <type> video. Pick the best take of each beat and 
assemble them chronologically by beat, not by source clip order.

INPUTS:
  - takes_packed.md (time-annotated phrase-level transcripts of all takes)
  - Product/narrative context: <2 sentences from the user>
  - Speaker(s): <name, role, delivery style note>
  - Expected structure: <pick an archetype or invent one>
  - Verbal slips to avoid: <list from the pre-scan pass>
  - Target runtime: <seconds>

Common structural archetypes (pick, adapt, or invent):
  - Tech launch / demo:   HOOK → PROBLEM → SOLUTION → BENEFIT → EXAMPLE → CTA
  - Tutorial:             INTRO → SETUP → STEPS → GOTCHAS → RECAP
  - Interview:            (QUESTION → ANSWER → FOLLOWUP) repeat
  - Travel / event:       ARRIVAL → HIGHLIGHTS → QUIET MOMENTS → DEPARTURE
  - Documentary:          THESIS → EVIDENCE → COUNTERPOINT → CONCLUSION
  - Music / performance:  INTRO → VERSE → CHORUS → BRIDGE → OUTRO
  - Or invent your own.

RULES:
  - Start/end times must fall on word boundaries from the transcript.
  - Pad cut boundaries (working window 30–200ms).
  - Prefer silences ≥ 400ms as cut targets.
  - Unavoidable slips are kept if no better take exists. Note them in "reason".
  - If over budget, revise: drop a beat or trim tails. Report total and self-correct.

OUTPUT (JSON array, no prose):
  [{"source": "C0103", "start": 2.42, "end": 6.85, "beat": "HOOK",
    "quote": "...", "reason": "..."}, ...]

Return the final EDL and a one-line total runtime check.

カラーグレーディング(依頼された場合)

画像を調整するのではなく、画像について考えるのが役割です。フレームを(timeline_view で)確認し、問題点を判断して、1 つ調整し、もう一度確認します。

ASC CDL をメンタルモデルとして使います。チャンネルごとに、out = (in * slope + offset) ** power を適用し、その後、全体の彩度を調整します。slope はハイライト、offset はシャドウ、power はミッドトーンを調整します。

フィルターチェーンの例(grade.py には --list-presets があります。出発点として使うか、独自に組み合わせてください):

  • warm_cinematic — レトロ/テクニカル向け。ティールとオレンジの控えめな分離で、彩度を落とします。実際のローンチ動画で使用されています。トーキングヘッドにも安全です。
  • neutral_punch — 最小限の補正:コントラストを上げ、緩やかな S 字カーブを適用します。色相は変化させません。
  • none — そのままコピーします。ユーザーから依頼がない場合のデフォルトです。

それ以外の用途(ポートレート、自然、製品、ミュージックビデオ、ドキュメンタリーなど)では、独自のチェーンを考案してください。grade.py --filter '<raw ffmpeg>' は任意のフィルター文字列を受け付けます。

厳守事項:セグメントごとの抽出時に適用してください(連結後に適用すると、再エンコードが 2 回発生します)。肌の色をテストせずに、強い調整を適用しないでください。

字幕(依頼された場合)

字幕で検討すべき要素は 3 つあります。チャンク分け(1/2/3 語/1 行あたり 1 文)、大文字・小文字(すべて大文字/タイトルケース/通常表記)、配置(下端からの余白)です。適切な組み合わせは内容によって異なります。

スタイル例 — 選んで調整するか、独自に考案してください。

bold-overlay — 短尺のテック系ローンチ、テンポの速いソーシャル動画向け。約 2 語ずつのチャンク、すべて大文字、句読点と 0.3 秒以上のポーズで区切り、0.35 秒未満の表示になるキューは出さずに 3 語まで増やします(render.py の chunk_words)。Helvetica 18 Bold、白字にアウトライン、MarginV=35。render.py ではこれが SUB_FORCE_STYLE として同梱されています。

FontName=Helvetica,FontSize=18,Bold=1,
PrimaryColour=&H00FFFFFF,OutlineColour=&H00000000,BackColour=&H00000000,
BorderStyle=1,Outline=2,Shadow=0,
Alignment=2,MarginV=35

natural-sentence(このモードを独自に作る場合)— ナラティブ、ドキュメンタリー、教育向け。4~7 語ずつのチャンク、文頭のみ大文字、自然なポーズで区切り、MarginV=60–80、読みやすい大きめのフォント、やや広めの最大幅を使います。同梱の force_style はありません。必要であれば設計してください。

どちらも合わない場合は、3 つ目のスタイルを考案してください。厳守事項:字幕は最後に追加します(ルール 1)。出力タイムラインのオフセットを使用します(ルール 5)。

アニメーション(依頼された場合)

アニメーションはコンテンツとブランドに合わせます。会話からカラーパレット、フォント、ビジュアル表現を把握してください。デフォルトを決めつけないでください。ユーザーから指定がない場合は、戦略フェーズでカラーパレットを提案し、制作を始める前に確認を待ちます。

ツールの選択肢:

アニメーションの各枠に応じてエンジンを選びます。Web に関連するからという理由だけで、Remotion をデフォルトにしないでください。

  • HyperFrames — ブラウザー上で動作する HTML/CSS/GSAP の動画コンポジションです。製品 UI のモーション、Web サイトから動画またはモックアップから動画へのキャプチャ、キネティックタイポグラフィ、ランディングページ/ストーリーボードのプロモーション、データ駆動型 UI の状態、透明な WebM オーバーレイ、決定論的なフレームキャプチャと HyperFrames の lint/validate/render チェックが必要なクリップに適しています。アニメーションを React コンポーネントツリーではなく、Web コンポジションとして作成し、検証する場合に最適です。
  • Remotion — コンポーネントの状態や再利用可能な React プリミティブを使う React/CSS コンポジション、または既存の Remotion ブランドシステムに適しています。ユーザーが明確に React/Remotion を指定した場合や、React によるコンポジションのほうが作成モデルとしてシンプルな場合に最適です。
  • Manim — 形式的な図、状態機械、方程式の導出、グラフのモーフィングに適しています。詳細については skills/manim-video/SKILL.md とそのリファレンスを参照してください。
  • PIL + PNG sequence + ffmpeg — カウンター、タイプライター風テキスト、単一バーの表示、段階的な描画など、シンプルなオーバーレイカードに適しています。反復が速く、好みの見た目にできます。ローンチ動画ではこれを使用しました。

HyperFrames のスロットでは、edit/animations/slot_<id>/ 内に npx --yes hyperframes init . --example blank --non-interactive --skip-skills でスロットを作成し、そこで HTML コンポジションを構築します。スロットに適した HyperFrames のチェック(lint、validate、可能であればドラフトレンダリング)を実行した後、npx --yes hyperframes render . -o render.mp4、またはアルファチャンネルが必要な場合は --format webm -o render.webm で最終的なオーバーレイ動画を生成します。EDL オーバーレイの file には、実際にレンダリングされたパスを指定してください。

Remotion のスロットでは、Remotion プロジェクトを同じスロットディレクトリ内に分離し、npx create-video@latest でひな形を作成するか、その場所に Remotion をローカルインストールします。プロジェクトローカルの remotion render コマンドでコンポジションを render.mp4 にレンダリングし、ffprobe で長さとサイズを確認してください。

いずれも必須ではありません。必要に応じて、ハイブリッドな手法を工夫してください(例:PIL の背景に HyperFrames または Remotion のレイヤーを重ねる)。

尺の目安(状況によって異なります):

  • ナレーションに合わせた解説。 視聴者が 1× で内容を読み取れる必要があります。最低でもおよそ 3 秒、シンプルなカードなら通常 5~7 秒、複雑な図なら 8~14 秒です。ローンチ動画では、シンプルなカードをそれぞれ 5~7 秒表示しました。
  • ビートに合わせたアクセント(ミュージックビデオ、速いモンタージュ)。0.5~2 秒で問題ありません。情報ではなく視覚的なアクセントだからです。「1× で読める」というルールは、「完全に読み取れる」ではなく「1× で認識できる」に変わります。
  • カットの前に最終フレームを 1 秒以上表示します(共通)。
  • ボイスオーバーに重ねる場合: 全体の長さを narration_length + 1s 以上にします(共通)。
  • 互いに独立した要素を同時に表示しないでください。視線は一度に 2 つの新しいものを追えません。1 つ表示し、間を置き、次を表示します。

アニメーションの効果を見せるタイミング(ナレーションに合わせる場合のルール): 効果を伝える語のタイムスタンプを確認します。オーバーレイの reveal_duration 秒前に開始し、表示が完了するフレームを、その語が話されるタイミングに合わせます。この同期がないと、アニメーションがちぐはぐに感じられます。

イージング(共通 — linear は使わないでください。機械的に見えます):

def ease_out_cubic(t):    return 1 - (1 - t) ** 3
def ease_in_out_cubic(t):
    if t < 0.5: return 4 * t ** 3
    return 1 - (-2 * t + 2) ** 3 / 2

単一の表示には ease_out_cubic(ゆっくり着地)、連続的な描画には ease_in_out_cubic を使います。

テキスト入力時のアンカートリック: 表示途中の文字列の幅ではなく、文字列全体の幅を基準に中央揃えします。そうしないと、表示中にテキストが左へずれていきます。

配色の例(ローンチ動画で使用したもの — 無数にあるスタイルのうちの 1 つです):

  • 背景 (10, 10, 10)、ほぼ黒
  • アクセント #FF5A00 / (255, 90, 0)、オレンジ
  • ラベル (110, 110, 110)、暗いグレー
  • フォント:Menlo Bold、/System/Library/Fonts/Menlo.ttc(インデックス 1)
  • アクセントカラーは 2 色以下、空白は約 40%、装飾は最小限
  • 仕上がり:ターミナル/レトロテック風

これはスタイルの 1 つです。ブランドが温かみのあるセリフ体なら、それを使ってください。カラフルで遊び心のあるブランドなら、それに合わせてください。ユーザーからスタイルガイドを受け取っている場合は、それに従ってください。受け取っていない場合は、スタイルを提案して確認してください。 フォントの読み込み失敗は、エラーなしで起こります。 読み込めなかったウェブフォントはフォールバックフォントで表示され、エラーは出ません。そのため、動画が「ほぼ Arial」になってしまいます。HyperFrames/Remotion では、フォントの読み込みを待ってからチェックします:if (!document.fonts.check('700 76px "Inter"')) throw new Error(...)。PIL では明示的にフォントパスを指定し、デフォルトに頼らないでください。

実例 —「編集を見せる」フック(このツールのローンチ動画)。タイトルカードの代わりに、最初の 3 秒で編集作業そのものを視覚化します。トランスクリプトの各単語が Scribe のタイムスタンプに合わせて表示され、その下には実際のオーディオエンベロープから描いたバーが並びます。フィラー語(「ummm」)は発話に合わせて一文字ずつ伸び、オレンジ色に変わり、音声がカットされるのと同じフレームで画面上からもカットされ、次の行がすぐに現れます。映像が音声と同じデータによって動いているため、これが成立します。Remotion の 1 つのコンポジションが、Python で生成されたフレーム単位で正確な単語/エンベロープの JSON を読み込むため、ずれが生じません。「何かを取り除いた」というストーリーなら、取り除く様子を見せるために、いつでもこのアイデアを使ってください。

並列サブエージェントへの指示 — 各アニメーションは、Agent ツールで起動する 1 つのサブエージェントが担当します。各プロンプトは単独で完結させます(サブエージェントには親のコンテキストがありません)。以下を含めてください:

  1. 1 文の目標:「アニメーションを 1 つだけ作成してください:[仕様]。それ以外は何もしないでください。」
  2. 絶対出力パス(<edit>/animations/slot_<id>/render.mp4)
  3. 正確な技術仕様:解像度、fps、コーデック、pix_fmt、CRF、長さ
  4. 具体的な値で指定したスタイルパレット(RGB タプル、16 進数、またはデザインシステムへの参照)
  5. インデックス付きのフォントパス
  6. フレーム単位のタイムライン(何がいつ、どのイージングで起きるか)
  7. 禁止リスト(指定がない限り、クローム、余分な要素、タイトルは使用しない)
  8. コードパターンの参照(ヘルパーをインラインでコピーし、スロット間でインポートしない)
  9. 納品物のチェックリスト(スクリプト、レンダー、ffprobe による長さの確認、報告)
  10. 「質問しないでください。不明確な点があれば、最も妥当な解釈を選んで作業を進めてください。」

サブエージェント 1 つにつきファイル 1 つです(一意のファイル名を使い、並列エージェント同士で上書きしないようにします)。

音楽と効果音(依頼された場合)

生成動画が安っぽく聞こえる原因になりやすいのは音です。ローンチ動画の編集で得た実践的なルールを紹介します。

  • 効果音は少なめにします。 各効果音は、目に見える動き(カット、着地、クリック)に結び付けます。18 秒にストックのウーシュ/ライザー/インパクトを約 20 個入れるとありがちな印象になり、約 8 個なら意図的な演出に聞こえます。
  • フレームに合わせて音を当てます。 多くの効果音にはアタック(無音、またはトランジェント前の立ち上がり)があります。これを測定し(ピークのおよそ -30 dBFS を初めて超えるサンプル)、ファイルの再生開始を、目に見える接触フレームより attack 秒早めます。
  • セリフの下では音楽の音量を下げます(音楽のみの音量と比べておよそ -12〜-15 dB)。また、音楽自体の余韻を CTA の下で響かせず、ジングルやエンドカードの前に音量を下げます。
  • マスタリングは一度だけにします: PCM にミックスしてから、最終ミックスに 2 パスの loudnorm(-14 LUFS、トゥルーピーク ≤ -1 dBTP)を適用します。その後、セクションごとに測定します(「自己評価」を参照)。
  • 音楽の好みはユーザーに委ねます。 生成音楽は「ハイプ」寄りになりがちです。対照的な 2 種類の音楽を提案し、ユーザーに聴いて選んでもらいます。ミックスの出来が良いと断言しないでください。測定できることだけを評価します。

出力仕様

ユーザーから指定がない限り、ソースに合わせます。一般的な出力先:映画風の 1920×1080@24、画面コンテンツ向けの 1920×1080@30、縦型ソーシャル向けの 1080×1920@30、4K 映画向けの 3840×2160@24、正方形の 1080×1080@30。render.py は、どのソースからでも 1080p にスケーリングする設定がデフォルトです。それ以外の出力先では --filter を渡すか、extract コマンドを編集してください。どの納品形式が重要か、ユーザーに尋ねるとよいでしょう。

EDL 形式

{
  "version": 1,
  "sources": {"C0103": "/abs/path/C0103.MP4", "C0108": "/abs/path/C0108.MP4"},
  "ranges": [
    {"source": "C0103", "start": 2.42, "end": 6.85,
     "beat": "HOOK", "quote": "...", "reason": "Cleanest delivery, stops before slip at 38.46."},
    {"source": "C0108", "start": 14.30, "end": 28.90,
     "beat": "SOLUTION", "quote": "...", "reason": "Only take without the false start."}
  ],
  "grade": "warm_cinematic",
  "overlays": [
    {"file": "edit/animations/slot_1/render.mp4", "start_in_output": 0.0, "duration": 5.0}
  ],
  "subtitles": "edit/master.srt",
  "total_duration_s": 87.4
}

grade はプリセット名または生の ffmpeg フィルターです。overlays はレンダリング済みのアニメーションクリップです。subtitles は省略可能で、最後に適用されます。

メモリー — project.md

各セッションにつき 1 つのセクションを <edit>/project.md に追加します:

## Session N — YYYY-MM-DD

**Strategy:** one paragraph describing the approach
**Decisions:** take choices, cuts, grades, animations + why
**Reasoning log:** one-line rationale for non-obvious decisions
**Outstanding:** deferred items

起動時に project.md が存在する場合は読み込み、続行するか尋ねる前に、前回のセッションを 1 文で要約します。

アンチパターン

スタイルにかかわらず、常に失敗すること:

  • USABILITY/トーンタグ/ショットレイヤーを含む、階層型の事前計算コーデック形式。 過剰な設計です。判断時にトランスクリプトから導き出してください。
  • 手作業で調整した場面スコアリング関数。 LLM は、どんなヒューリスティックよりも適切に選びます。
  • Whisper の SRT/フレーズ単位の出力。 1 秒未満の間隔データが失われます。必ず単語単位で逐語的に出力してください。
  • Whisper をローカルの CPU で実行すること。 遅いうえに、フィラーを正規化してしまいます。ホスト型の Scribe を使用してください。
  • オーバーレイを合成する前に、ベース映像に字幕を焼き込むこと。 オーバーレイで隠れてしまいます。(絶対ルール 1。)
  • オーバーレイがあるのに、フィルターグラフを 1 回だけ処理すること。 再エンコードが 2 回発生します。セグメントごとに抽出してから連結してください。
  • 線形のアニメーションイージング。 機械的に見えます。必ず三次補間を使用してください。
  • 未検証の Web フォント。 読み込みに失敗しても気付かれないまま、システムフォントにフォールバックします。レンダリング前にフォントが読み込まれていることを確認してください。
  • すべてのトランジションにストック SFX を使うこと。 各効果音を目に見えるイベントに結び付け、使用数を制限してください。
  • セグメント境界で音声をハードカットすること。 クリックノイズが聞こえます。(絶対ルール 3。)
  • 入力途中の文字列を中央揃えにして文字を表示すること。 文字列が伸びるにつれて、テキストが左にずれていきます。
  • 複数のアニメーションに対してサブエージェントを順番に実行すること。 必ず並列で実行してください。
  • 方針を確認する前に編集すること。 決して行わないでください。
  • キャッシュ済みのソースを再文字起こしすること。 不変の入力からは、不変の出力を得てください。
  • 動画の種類を決めつけること。 まず確認し、次に質問して、最後に編集してください。

コメント