Communitygithub.com

johnnyfekete/video-framing

プロの編集者のように、DaVinci Resolve Studioでトーキングヘッドのカットをフレーミングします。各カメラセットアップをクリーンで中央寄せのフレームにクロップし、不要な端の乱雑さを取り除き、選択したセット装飾を残し、頭やジェスチャーを切り取らず、目に見えるジャンプカットにパンチインを追加し、重要なラインにスロープッシュインを追加し、ソースのズーム予算内に収めます。resolve-bridgeを通じて新しいタイムラインバージョンを生成します。自律的に実行し、事後レビュー用のレポートを残します。ユーザーがフレームが散らかっている、ルーズ、アマチュアに見える、ジャンプカットが目立ちすぎる、スピーカーが中央からずれている、またはパンチイン、プッシュイン、デクラッタークロップを要求した場合に使用します。

video-framing とは?

このスキルは、DaVinci Resolve Studioのトーキングヘッド動画のフレーミングを自動化します。各カメラセットアップを分析し、顔と体のトラッキングに基づいて、プロの基準に合わせたクリーンで中央寄せのフレームにクロップします。端の乱雑さ(家電製品、磁石、予備の椅子、ランプなど)を削除し、選択したセット装飾(植物、花など)を保持し、頭やジェスチャーが切り取られないようにします。また、目に見えるジャンプカットにパンチインを追加し、重要なラインにスロープッシュインを追加し、すべてソースのズーム予算内で行います。resolve-bridgeスキルを使用して、新しいタイムラインバージョンを生成し、自律的に実行して、事後レビュー用の詳細なレポートを残します。AIエージェントは判断(何が乱雑か、どのセットアップがプレーンか、どのラインにプッシュインが必要か)を行う責任があり、ユーザーの承認を求めずに進行し、不明な点はissuesリストに記録します。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/johnnyfekete/resolve-video-skills/tree/HEAD/skills/video-framing

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

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

ドキュメント

video-framing は何をしますか?

このスキルはvideo-tightenの後に実行し(タイトンが作成するジャンプカットを隠します)、video-colorの前に実行します。このスキルの隣にresolve-bridgeスキルがインストールされている必要があります(../resolve-bridgeで見つけるか、RVS_BRIDGEを設定します)。さらに、ffmpeg、ffprobe、swift(macOSには標準搭載。Apple Visionが顔と手を測定します)が必要です。トランスクリプトにはuv(ローカルWhisper)またはRVS_TRANSCRIBE_CMDのトランスクライバーコマンドが必要です。トランスクリプションが失敗した場合、prepareは警告付きで続行し、トランスクリプトは不完全になります。

スクリプトはpython3 <このスキルのフォルダ>/scripts/framing.py <command> --workdir <folder>として実行します。コマンド:prepare、solve、apply、pushes。

スクリプトは測定と計算を行います。あなたが判断を下します(何が乱雑か、どのセットアップがプレーンか、どのラインにプッシュインが必要か)。承認を求めるために決して止まらないでください。 ユーザーは後で確認します。確信が持てない判断でも、最善の回答を提供してビルドを続行し、decisions.jsonのissuesリストに追加します(判断方法を参照)。applyはそれをチェックリストの問題に変換します。reasonフィールドはレポートにのみ含まれます。

ワークフロー

  1. 現在地の確認。 python3 <resolve-bridge>/scripts/rvs.py --workdir <folder> status。まだ何もトラッキングされていない場合は、最初にタイムラインを採用します(resolve-bridgeを参照)。

  2. 準備。 Resolveでは何も変更しません。

    python3 scripts/framing.py prepare --workdir <folder>
    

    Resolveが開いていて、トラッキングされているタイムラインにまだ記録されていない手動編集がある場合、prepareは最初にそれらをresolve-bridgeを介して新しいバージョン(manual、「フレーミング前の手動編集」)として記録し、その旨を通知します。ユーザーに伝えてください。Resolveが開いていて、そのスケーリングモードがapplyを拒否する場合(タイムラインへの影響を参照)、prepareは開始時に警告を表示するので、長時間の実行前にユーザーが変更できます。

    オンカメラのアイテムを見つけ、それらをカメラセットアップにグループ化し、顔、目、体、手を測定し(毎秒約4サンプル)、以下を書き込みます。

    • generated/framing/setups/<id>.jpg:各セットアップにつき1枚のスチル画像(ラベル付き10%グリッド、両軸とも0.0~1.0)。
    • .edit/framing/transcript.md:MM:SS.ss-MM:SS.ss <setup> <text>、タイムライン時間で、カメラ上で聞こえた文ごとに1行。各オンカメラピースには、独自のソース範囲内の単語のみが含まれます(Whisperからの単語時間)。これにより、ピース間で単語が繰り返されることはなく、時間は最初と最後の単語の時間です。プッシュイン範囲はこれらの行から直接選択します。
    • .edit/framing/decisions.json:各セットアップが空のテンプレート(再実行では、アイテムが変更されていないセットアップの決定は保持されます)、予算とスチルを含むcontext.json。

    最初のprepareは遅いです。 測定にはソース1秒あたり約1.5秒かかり、Whisperはソースファイルごとに1回実行されます。バックグラウンドで実行し、5分の動画では数十分かかることを想定してください。アイテムおよびソースごとに進行状況を1行出力します(フラッシュされるため、リダイレクトされたログにも表示されます)。以降の実行はキャッシュされ高速です。スキルの更新により測定方法が変更された場合、再度測定が行われます。

    セットアップごとに1行(アイテム、ズーム予算、スチル)と、すでに手動フレーミングが適用されているアイテムの数を出力します。これらはそのまま残され、そのリストはcontext.jsonとREPORT.mdにあります。

  3. 判断。 すべてのセットアップスチルを確認し、decisions.jsonに記入します(判断方法を参照)。次に、プッシュインラインを選択します。

  4. 解決。 Resolveでは何も変更せず、決して接続しないドライランです。常にトラッキングされた状態の現在のバージョンの記録された計画(resolve-bridgeを通じて採用されたタイムライン)から動作するため、最後に記録されたバージョン以降にResolveで行われた手動編集は含まれません。prepareとapplyは最初にそれらを記録します。

    python3 scripts/framing.py solve --workdir <folder>
    

    generated/framing/REPORT.md、セットアップごとのsetups/<id>_before_after.jpg、フラグ付きアイテムごとのflags/<n>.jpg、および.edit/framing/solution.jsonを書き込みます。無効なdecisions.json(ラベルがない、ボックスが0..1の範囲外)がある場合、理由を示して終了コード2で停止します。

  5. 自分でプレビューを確認。 すべてのビフォー/アフター画像とフラグ画像を開きます。各プレビューは1フレーム(セットアップの最初のアイテム、またはフラグ付きアイテムの中間フレーム)を示します。別のアイテムや別の瞬間のジェスチャーは含まれていないため、セットアップのプレビューだけでなく、フラグ付きアイテムのすべてのプレビューを確認し、フラグテキストを読んでください。フレームの下の方に手がある場合(レンズに向かって伸ばしている、下端近くでジェスチャーしている)、表示されている1フレームが問題なくても、`

Individual skills in this repo

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

関連スキル