video-use について
素材の確認、カット計画、レンダリング結果の検査を行う動画編集スキルです。単語単位の文字起こしと無音区間を基にカットを決め、実行前に編集方針の確認を求めます。
主な機能
- 01単語単位の文字起こしとフレーズ整理
- 02発話境界に基づくカット計画
- 03複数クリップ編集とアニメーション重ね合わせ
- 04セグメント結合後に字幕を適用
- 05プレビューとカット境界の検査
- 06反復用のプロジェクト記録
活用シーン
- 01複数テイクから各場面の最適な発話を選択
- 02承認済みの方針でトーク動画を編集
- 03カット点、音声ノイズ、字幕の重なりを確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ pluviobyte/ rnskill --skill video-useインストール後、Claude Code で/video-useを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
.gitignoreinstall.mdLICENSEposter.htmlpyproject.tomlREADME.mdhelpers/grade.pypack_transcripts.pyrender.pytimeline_view.pytranscribe_batch.pytranscribe.pyskills/manim-video/README.mdskills/manim-video/references/animation-design-thinking.mdanimations.mdcamera-and-3d.mddecorations.mdequations.mdgraphs-and-data.mdmobjects.mdpaper-explainer.mdproduction-quality.mdrendering.mdscene-planning.mdtroubleshooting.mdupdaters-and-trackers.mdvisual-design.mdskills/manim-video/scripts/setup.shstatic/timeline-view.svg詳細
動画の使用方法
原則
- LLM は生の文字起こしと必要に応じた映像をもとに推論します。 派生データのうち役に立つのは、フレーズ単位にまとめた文字起こし(
takes_packed.md)だけです。その他の作業(フィラーのタグ付け、リテイクの検出、ショットの分類、強調度のスコア付け)はすべて、判断時に行います。 - 音声が主で、映像はその次です。 カット候補は発話の境界と無音区間から決めます。判断が必要な箇所でのみ、映像を詳しく確認します。
- 質問 → 確認 → 実行 → 反復 → 保存。 ユーザーが平易な言葉で方針を確認するまでは、カットに手を加えてはいけません。
- 一般化します。 動画の種類を決めつけてはいけません。素材を確認し、ユーザーに尋ねてから編集します。
- 芸術的な自由を基本とします。 この文書に記載されている具体的な値、プリセット、フォント、色、長さ、ピッチ構成、手法はすべて、実績のある1本の動画での 実例 であり、指示ではありません。何が可能か、なぜそれぞれがうまくいったのかを理解するために読み、そのうえで素材の実際の内容とユーザーの希望に基づいて、自分なりの判断をしてください。必ず守らなければならないのは、以下の「厳守事項」だけです。 それ以外は自由に決めてください。
- 自由に工夫してください。 素材にこの文書にない手法が必要なら、分割画面、ピクチャーインピクチャー、ローワーサードの紹介カード、リアクションカット、スピードランプ、フリーズフレーム、クロスフェード、マッチカット、Lカット、Jカット、息継ぎ部分でのスピードランプなど、必要なものを作成してください。ヘルパーとして ffmpeg と PIL を使用できます。対応する形式なら何でも実現できます。許可を待つ必要はありません。
- ユーザーに見せる前に、自分の出力を必ず確認してください。 自分なら納品しないと思うものは、提示してはいけません。
厳守事項(制作上の正確性 — 必須)
逸脱すると、気づかれない失敗や出力の破損につながる項目です。好みの問題ではなく、正確性の問題です。必ず覚えておいてください。
- 字幕はフィルターチェーンの最後に適用します。 すべてのオーバーレイを適用した後に行います。そうしないと、オーバーレイが字幕を隠してしまいます。気づかれない失敗につながります。
- セグメントごとに抽出してから、ロスレスの
-c copyで連結します。 1回のフィルターグラフ処理は使いません。そうしないと、オーバーレイを追加する際に、すべてのセグメントを二重にエンコードすることになります。 - 各セグメントの境界に30msの音声フェードを入れます(
afade=t=in:st=0:d=0.03,afade=t=out:st={dur-0.03}:d=0.03)。そうしないと、カットのたびに耳障りなポップ音が発生します。 - オーバーレイでは
setpts=PTS-STARTPTS+T/TBを使い、オーバーレイのフレーム0を表示開始位置に合わせます。 そうしないと、オーバーレイ表示中にアニメーションの途中が表示されます。 - マスターSRTでは出力タイムラインのオフセットを使います:
output_time = word.start - segment_start + segment_offset。そうしないと、セグメント連結後に字幕の位置がずれます。 - 単語の途中でカットしてはいけません。 すべてのカット端を Volcengine の文字起こしに基づく単語境界に合わせます。
- カット端には必ず余白を設けます。 作業範囲は30~200msです。ASRのタイムスタンプにはずれが生じることがあるため、余白でそのずれを吸収します。テンポの速い動画では短めに、シネマティックな動画では長めにします。
- 単語単位の逐語ASRのみを使用します。 SRT形式やフレーズ形式は使いません(1秒未満のギャップ情報が失われます)。フィラーを正規化してはいけません(編集上の手がかりが失われます)。
- ソースごとに文字起こしをキャッシュします。 ソースファイル自体が変更されていない限り、文字起こしをやり直してはいけません。
- 複数のアニメーションにはサブエージェントを並列で使います。 順番に実行してはいけません。
Agentツールで N 個を一度に起動します。合計所要時間は最も遅い処理とほぼ同じです。 - 実行前に方針を確認します。 ユーザーが平易な言葉で計画を承認するまでは、カットに手を加えてはいけません。
- セッションの出力はすべて
<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 normalized Volcengine word timestamps
├── 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 キー)。毎回のセッションで再実行する必要はありません。コールドスタート時は、次の項目だけを確認してください。
VOLCENGINE_API_KEYがワークスペースルートの.envまたは環境変数から読み込まれること。デフォルトのリソース ID はvolc.seedasr.aucです。必要な場合に限り、VOLCENGINE_RESOURCE_IDで上書きしてください。ffmpegとffprobeが PATH 上にあること。- Python の依存関係が、次の場所にリンクされた外部環境にインストールされていること。
<skill_dir>/.venv。同期対象のスキルツリー内に実際の仮想環境を作成しないでください。 - セッションで HyperFrames または Remotion のスロットが必要な場合は、Node.js と npm が利用できること。HyperFrames には現在、Node.js 22 以降が必要です。
yt-dlp、HyperFrames、Remotion、Manim は初回使用時にのみインストールしてください。- アニメーションの初回セットアップはスロットディレクトリ内で行い、動画を使用するリポジトリのルートでは行わないでください。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/ にシンボリックリンクされています。
Pillow、NumPy、その他のレンダリング依存関係が一貫して解決されるよう、<skill_dir>/.venv/bin/python で実行してください。
ヘルパー
transcribe.py <video>— 単一ファイルの Volcengine 単語タイムスタンプ呼び出しです。--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>'を使用できます。
アニメーションを作成する場合は、Bash を使って <edit>/animations/slot_<id>/ を作成し、Agent ツールでサブエージェントを起動してください。
プロセス
-
インベントリ作成。 すべての素材に対して
ffprobeを実行します。ディレクトリに対してtranscribe_batch.pyを実行します。pack_transcripts.pyでtakes_packed.mdを生成します。最初の印象を視覚的に把握するため、timeline_viewを1〜2件サンプルします。 -
問題を事前にスキャン。
takes_packed.mdを一度確認し、言い間違い、明らかな誤り、避けるべき表現をメモします。簡潔なリストにして、編集者向けブリーフに含めます。 -
対話する。 目にしたものを平易な英語で説明します。素材に合わせた質問をします。次の内容を確認します:コンテンツの種類、目標の長さ/アスペクト比、ビジュアル/ブランドの方向性、ペース感、必ず残す場面、必ずカットする場面、アニメーションとカラーグレーディングの希望、字幕の要否。固定のチェックリストは使いません。適切な質問は毎回異なります。
-
方針を提案。 4〜8文で、構成、テイクの選択、カットの方向性、アニメーションの計画、カラーグレーディングの方向性、字幕のスタイル、長さの見積もりを説明します。確認を待ちます。
-
実行。 編集サブエージェント向けブリーフを使って
edl.jsonを作成します。判断が曖昧な箇所はtimeline_viewで詳しく確認します。並列のサブエージェントでアニメーションを作成します。セグメントごとにカラーグレーディングを適用します。render.pyで合成します。 -
プレビュー。
render.py --previewを実行します。 -
自己評価(ユーザーに見せる前に実施)。 素材ではなく、レンダリング済みの出力に対して、すべてのカット境界で(±1.5秒の範囲を指定して)
timeline_viewを実行します。各画像で次の点を確認します:- カット時の視覚的な不連続、フラッシュ、ジャンプ
- 境界での波形のピーク(30msのフェードをすり抜けた音声のポップノイズ)
- オーバーレイに隠れた字幕(ルール1違反)
- 位置がずれたオーバーレイ、または誤ったフレームの表示(ルール4違反)
また、最初の2秒、最後の2秒、途中の2〜3か所もサンプルし、カラーグレーディングの一貫性、字幕の読みやすさ、全体のまとまりを確認します。出力に対して
ffprobeを実行し、長さが EDL の想定と一致することを検証します。問題があれば、修正して再レンダリングし、再評価します。自己評価は最大3回までです。3回後も問題が残る場合は、無限に繰り返さず、ユーザーに伝えます。自己評価に合格してからプレビューを提示します。
-
反復と記録。 自然言語でのフィードバックに基づいて、計画を立て直し、再レンダリングします。再文字起こしは行いません。確認後に最終版をレンダリングします。
project.mdに追記します。
カットの技法(テクニック)
- 音声を優先します。 単語の境界や無音区間を基に、カット候補を決めます。
- 盛り上がりを残します。 笑い、オチ、強調のタイミングを残します。オチの後もリアクションを含めるように長く取ります。笑いそのものが盛り上がりです。
- 話者の交代時には、発話の間に余白を入れると効果的です。一般的な目安は400〜600msです。テンポが速い場合は短く、シネマティックな場合は長くします。最終的には感覚で判断します。
- 音声イベントを手がかりにします。
(laughs)、(sighs)、(applause)は盛り上がりの目印です。その後も含めるように長く取ります。 - 無音区間はカット候補です。 400ms以上の無音は、通常、最も自然にカットできます。150〜400msの文の境界は、映像を確認すれば使えます。150ms未満は危険です(文の途中です)。
- カットのパディング例(同梱のローンチ動画で使用):残す最初の単語の50ms前から、最後の単語の80ms後まで。モンタージュの勢いを出す場合は短く、ドキュメンタリーでは長めにします。作業範囲の30〜200msに収めます(ハードルール7)。
- 音声と映像を別々に判断してはいけません。 すべてのカットが両方のトラックで成立する必要があります。
パック済みトランスクリプト(主要な閲覧ビュー)
pack_transcripts.py はすべての transcripts/*.json を読み込み、各テイクをフレーズ単位の行のリストにした1つの Markdown ファイルを生成します。各行には [start-end] の時間範囲が付きます。フレーズは、0.5秒以上の無音、または話者の交代で区切られます。これは編集サブエージェントがカットを選ぶ際に読む成果物です。生の JSON の10分の1のトークン数で、テキストだけから単語境界の精度を得られます。
行の例:
## 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語ごとに分割し、すべて大文字にします。句読点で改行し、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 のモーション、ウェブサイトから動画またはモックアップから動画へのキャプチャ、キネティックタイポグラフィ、ランディングページ/ストーリーボードのプロモーション、データ駆動型 UI の状態、透過 WebM オーバーレイ、決定論的なフレームキャプチャに加え、HyperFrames の lint/validate/render チェックが必要なクリップに適しています。React コンポーネントツリーではなく、ウェブコンポジションとして作成・検証するのが望ましいアニメーションに最適です。
- Remotion — コンポーネントの状態を持つ React/CSS コンポジション、再利用可能な React プリミティブ、または既存の Remotion ブランドシステム向けです。ユーザーが明確に React/Remotion を指定した場合、または React コンポジションのほうが簡単に作成できる場合に最適です。
- Manim — 形式的な図、状態機械、方程式の導出、グラフのモーフィング向けです。詳細については
skills/manim-video/SKILL.mdとそのリファレンスを読んでください。 - PIL + PNG sequence + ffmpeg — カウンター、タイプライター風テキスト、単一バーの表示、段階的な描画など、シンプルなオーバーレイカード向けです。すばやく反復でき、どのような美的表現にも対応できます。ローンチ動画ではこれを使用しました。
HyperFrames のスロットでは、npx --yes hyperframes init . --example blank --non-interactive --skip-skills を使って edit/animations/slot_<id>/ 内にスロットのひな型を作成し、その場所に 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 のレイヤーを重ねる)。
尺の目安。状況に応じて調整してください:
- ナレーションに同期する説明。 視聴者が等倍速で内容を読み取れる必要があります。最低でもおよそ 3 秒、シンプルなカードは通常 5~7 秒、複雑な図は 8~14 秒です。ローンチ動画では、シンプルなカードごとに 5~7 秒を確保しました。
- ビートに同期したアクセント(ミュージックビデオ、高速モンタージュ)。0.5~2 秒で問題ありません。情報ではなく、視覚的なアクセントだからです。「等倍速で読める」というルールは、「完全に読み取れる」ではなく「等倍速で認識できる」になります。
- カットの前に、最後のフレームを 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 を使います。
テキスト入力時のアンカーのコツ: 途中までの文字列の幅ではなく、文字列全体の幅を基準に中央揃えします。そうしないと、表示中にテキストが左へずれていきます。
配色の例(ローンチ動画。無数にあるスタイルの一例です):
- 背景
(10, 10, 10)、黒に近い色 - アクセント
#FF5A00/(255, 90, 0)、オレンジ - ラベル
(110, 110, 110)、暗めのグレー - フォント:Menlo Bold、
/System/Library/Fonts/Menlo.ttc(インデックス 1) - アクセントカラーは 2 色以下、余白は約 40%、装飾は最小限
- 仕上がり:ターミナル/レトロテックな雰囲気
これは 1 つのスタイルです。ブランドが温かみのあるセリフ体なら、それを使います。カラフルで遊び心のあるブランドなら、それを使います。ユーザーからスタイルガイドを渡された場合は、それに従います。渡されていない場合は、スタイルを提案して確認します。
並列サブエージェントへの指示 — 各アニメーションは、Agent ツールで起動する 1 つのサブエージェントが担当します。各プロンプトは自己完結型にしてください(サブエージェントは親のコンテキストを持ちません)。以下を含めます:
- 1 文で示す目標:「アニメーションを 1 つだけ作成する:[仕様]。ほかには何も作らないこと。」
- 出力先の絶対パス(
<edit>/animations/slot_<id>/render.mp4) - 正確な技術仕様:解像度、fps、コーデック、pix_fmt、CRF、尺
- 具体的な値で示したスタイル配色(RGB タプル、16 進数、またはデザインシステムへの参照)
- インデックスを含むフォントパス
- フレームごとのタイムライン(イージングを含む、各時点で何が起こるか)
- 禁止事項のリスト(指定がない限り、装飾、追加要素、タイトルは入れない)
- コードパターンの参照(ヘルパーはインラインでコピーし、スロット間でインポートしない)
- 納品物チェックリスト(スクリプト、レンダリング、
ffprobeで尺を確認、報告) - 「質問はしないでください。不明確な点があれば、最も自然な解釈を選んで進めてください。」
サブエージェント 1 つにつきファイルは 1 つです(ファイル名を重複させないでください。並列エージェントが互いのファイルを上書きするのを防ぎます)。
出力仕様
ユーザーから特別な指定がない限り、ソースに合わせます。一般的な出力先は、シネマティックな 1920×1080@24、画面コンテンツ向けの 1920×1080@30、縦型ソーシャル向けの 1080×1920@30、4K シネマ向けの 3840×2160@24、正方形の 1080×1080@30 です。render.py は、どのソースでもデフォルトで 1080p にスケールします。他の出力先にする場合は --filter を渡すか、抽出コマンドを編集してください。どの納品形式が重要か、ユーザーに確認することをおすすめします。
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 秒未満のギャップデータが失われます。常に単語単位で逐語的に出力してください。
- CPU で Whisper をローカル実行すること。 時間がかかり、フィラーも正規化されます。設定済みの Volcengine 単語タイムスタンプサービスを使用してください。
- オーバーレイを合成する前に、字幕をベース映像に焼き込むこと。 オーバーレイで字幕が隠れてしまいます。(絶対ルール 1。)
- オーバーレイがあるのに、フィルターグラフを 1 パスで処理すること。 再エンコードが 2 回発生します。セグメントごとに抽出し、連結してください。
- アニメーションに線形イージングを使うこと。 ロボットのように見えます。常に 3 次関数を使用してください。
- セグメント境界で音声をハードカットすること。 ポップノイズが聞こえます。(絶対ルール 3。)
- 入力途中の文字列の中央にテキストを配置すること。 文字列が伸びるにつれて、テキストが左にずれていきます。
- 複数のアニメーションでサブエージェントを順番に実行すること。 必ず並列で実行してください。
- 方針を確認する前に編集すること。 決して行わないでください。
- キャッシュ済みソースを再文字起こしすること。 不変の入力から得られる出力も不変です。
- 動画の種類を決めつけること。 まず確認し、次に質問し、最後に編集してください。