Communitygithub.com

kaustubhupadhyaya/clip-picker

長い未編集の動画から良い短いクリップを抽出します。ユーザーが1つ以上の長尺動画を提供し、「良いクリップを見つけて」「ベストな部分を選んで」「この映像からハイライトを」といった要望に応えます。フレームをタイムスタンプ付きのコンタクトシートにサンプリング(Claudeは動画をストリーミングできません)、鮮明度でスコアリングし、ランク付けされたピックシート+切り出しクリップを返します。デフォルトのPOVバイクライド用ルーブリックを同梱し、ルーブリックを修正することで任意の映像に対応します。トリガーワード: クリップ検索、ベストクリップ、ハイライト、良い瞬間、保存価値、モンタージュ素材、Bロール…

clip-picker とは?

Clip Pickerは、長尺の未編集動画から価値のある短いクリップを自動的に選別するためのAIエージェントスキルです。Claude(および類似のAIエージェント)は動画を直接視聴できないため、このスキルは動画フレームを静的なコンタクトシートにサンプリングし、人間の判断を介さずともAIが視覚的に評価できるようにします。パイプラインは、(1)ユーザー定義またはデフォルトのルーブリックで選定基準を確認、(2)一定間隔でフレームをサンプリングしてコンタクトシート生成、(3)AIが各シートを評価し候補ウィンドウを特定、(4)高解像度フレームの鮮明度スコアリング、(5)ランク付きピックシートの表示とクリップの切り出し(H.264)、(6)ユーザーが選択したクリップの最終処理を提供します。特にPOV(一人称視点)のバイクライド映像向けに最適化されたデフォルトルーブリックを備えていますが、質問により動的にルーブリックを生成してあらゆる映像に一般化できます。効率性に関する注意点として、HEVC/HDRのデコードがボトルネックとなるため、必要に応じてサンプリング間隔を調整する機能や、HDRからSDRへの自動トーンマッピングなどの機能も含まれています。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/kaustubhupadhyaya/editor-pack/tree/HEAD/skills/clip-picker

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

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

ドキュメント

Clip Picker(クリップピッカー)

長尺の映像からキーパー(保存する価値のあるクリップ)を見つけます。この手法全体は、単一の厳しい制限を回避するために存在します:

Claudeは動画を見ることができません。 静止画像のみを読み取ります。したがって、「良いクリップを選ぶ」とは実際には次のようになります:映像を十分な密度で画像にサンプリングして何が起こっているかを確認し、ルーブリックに照らしてそれらを評価し、フル解像度で確認してからカットします。トリミングは簡単でほぼ即時ですが、30分以上の映像を見ることこそが本当のコストです — そのための予算を組み、謝る必要はありません。

スクリプトは scripts/ にあります(survey.py、score.py、board.py)。これらが機械的な部分を担当し、Claudeがその間の視覚的判断を行います。依存関係: PATH上のffmpeg/ffprobe、numpy、pillow(すべてこのマシンにインストール済み — [[editor-pack-video-editing-stack]] を参照)。

パイプライン

スクラッチパッドにWORKDIRを選択します(例:.../scratchpad/clippick)。その後:

1. ルーブリックを確認します。 映像がPOVのバイク/サイクリング(以下に組み込まれているデフォルト)でない場合、ユーザーに1〜2の質問をします:彼らにとって何がクリップを良くするのか、希望するクリップ長、出力形状(16:9 vs 9:16)、選択の度合い(数個の逸品かすべてか)。良い判断基準の一文がすべての選択を変えます — 調査の前にそれを取得してください。

2. 調査 — 映像を読み取り可能なコンタクトシートに変換します。

python scripts/survey.py "C:\path\to\videos_or_dir" --out WORKDIR --interval 4

4秒ごとに1つのサムネイル、6×6タイル、各ソースタイムコードが焼き付けられます。動きの速い/イベントの多い映像には --interval 2-3 を、動きの遅い映像には --interval 6-8 を使用します。各クリップの仕様を出力し、HDR(HLG/PQ)ソースにフラグを立てます。長い/多くのHEVCクリップではこれは遅くなります(ソフトウェアデコードがボトルネック)— バックグラウンドで実行し、シートが作成されるたびに表示します。

3. すべてのシートを視覚的に調査します。 各 WORKDIR/montages/*_sheet_*.jpg を Read します。ルーブリックに従ってタイムコードで候補ウィンドウをマッピングします。サンプル間の一瞬のイベントは見逃される可能性があります — シートが何かを示唆している場合(隅のフラッシュ、人物など)、それをメモし、後でその範囲をより密にサンプリングします。

4. WORKDIR/candidates.json を作成します — 候補ウィンドウごとに1つのオブジェクト(スキーマは以下を参照)。各ウィンドウは15〜30秒(またはユーザーの希望長)に保ちます。それぞれに pick コード(P01, P02, ... をランク順に)、一行の title(なぜ該当するか)、および tags を付けます。

5. フル解像度 + 鮮明度で確認します。

python scripts/score.py --work WORKDIR

候補ごとにフル解像度のヒーローフレームを取得し、ラプラシアンの分散(焦点指標)をスコアリングし、それらを review.jpg にタイル表示します。Read します。真にソフト/面白みのないものはドロップし、start/end を調整して最良のビートに合わせます。低い鮮明度 = フレーム全体のモーションブラー — フローショットには望ましいものであり、拒否理由にはなりません。 編集後に再実行します。

6. ランク付けされたピックシートを提示します(ユーザーが選択します)。

python scripts/board.py --work WORKDIR --mode thumbs     # -> WORKDIR/pickboard.html(Artifactとして公開可能)

または、選択前に見たい場合、再生可能なボードでクリップもカットします:

python scripts/board.py --work WORKDIR --mode play --out "%USERPROFILE%\Downloads\clips"

play は各候補をブラウザ向けH.264にカットします(HLG/PQの場合は自動HDR→SDRトーンマップ)、review_player.html をmp4と共にネイティブ <video> プレーヤーで書き出します(ローカル再生にはChrome/Edgeで開きます)。デフォルト出力は 16:9、トリームのみ、クロップなし です。

7. ユーザーが選んだ勝者をカット/仕上げます。 ピクセル正確またはフォーマット選択には、[[editor-pack-video-editing-stack]] の video-tool-router スキル(ストリームコピー対再エンコード、HLGガード、Resolveでのグレーディング/スタビライズ/アップスケール)を経由します。フォローアップを提案します:フロークリップへのモーションブラーブースト、9:16 縦長、カラー、キャプション、モンタージュ。

選択ルーブリック(これが実際の「選び方」です)

クリップは、品質ゲートをクリアし、かつ少なくとも1つの「特別な」シグナルを持つ場合に保存する価値があります。

品質ゲート(すべてが満たされる必要があります)

  • ソースの一部、15〜30秒(デフォルト。ユーザーの希望長を優先します)。
  • 被写体が明確で安定している — 主な被写体(バイク/ハンドルバー、顔、プレーヤー)がシャープで安定したフレーミング。全体的なブレ(段差/揺れによるもの)、ピントぼけ、白飛びまたは暗すぎ、レンズの遮蔽は拒否します。
  • 何かが起こっている — 動きや変化。アイドル/駐車/待機や単調な無は拒否します。

「特別な」シグナル(1つ以上必要。多いほど、強いほど高ランク)

  • スピード/モーション — 周囲がモーションブラーで流れつつ、被写体はシャープ。これはポジティブであり、モーションブラーブースト編集の主要な素材です。
  • インタラクション — 他の人/ライダー/車両/動物。追い越し、集団走行、誰かの反応。
  • アクション/ダイナミクス — コーナリング&バンク、ターン、標高変化、トリック、ヒヤリとする瞬間。
  • 光と環境 — 日の出/日の入り、ゴールデンアワー、劇的な雲、霧/もや、トンネル、景色または開けた場所、水。時間帯の光は最も大きな「映画的」レバー — 常にフラグを立てます。
  • 新規性 — シーン/地形の変化、出入り口、視覚的にその周辺数分と異なるもの。

「クリアでぼやけていない」と「モーションブラーは良い」の調整

被写体をシャープに、瞬間を意図的に保ちます。周辺の速度ブラーは特徴として扱います。全体的なブラー(段差によるフレーム全体のぼやけ)のみを拒否します。胸部/バーマウントカメラはバイクをシャープに保ち、世界が流れるようにします — これは欠陥ではなく、望ましい見た目です。

ランキング

順序: 特別なシグナルの強さと希少性、次に明確さ、次に多様性(トップスロットにほぼ同一のウィンドウを5つランク付けしないでください — 雰囲気を広げます:景色、ブラーフロー、追い越し、雰囲気のあるもの)。基準が単に存在しない場合(例:どこにも日の出/日の入りがない)は正直に言ってください — 弱いピックを無理に選ばず、そう言いましょう。

POVライドプロファイル(このユーザーの映像向けビルトインデフォルト)

バイク/サイクリングヘルメットまたはバーカム。具体的には:スピードブラーのスイープ、コーナリング/バンク、追い越し&集団走行、道路脇の生活、霧/もやと山道の景色、トンネル/並木道を保持。スキップするのは:停止、信号、駐車、電話いじり、長い直線の無。 (これはまさに、ユーザーが気に入ったクリップセットを生成したルーブリックです。)

candidates.json スキーマ

[
  {"pick":"P01","clip":"clip_6318","file":"%USERPROFILE%/Downloads/clip_6318.mov",
   "start":96,"end":120,"hero":104,"title":"高い木々のトンネル、前方にライダー、強烈なスピードブラー",
   "tags":["speed-blur","scenery"]}
]
  • start/end/hero は秒単位です。hero はウィンドウ内の代表的な瞬間(サムネイルと鮮明度スコアに使用) — 必ずしも中点ではなく、最も特徴的なビートを選びます。
  • pick コードはユーザーの選択ハンドルとしても機能します(「P01、P03、P10をカット」)。
  • tags(自由ですが、これらは見やすいラベルになります):speed-blur、corner、vista、interaction、overtake、atmosphere、scenery、action、light、wildlife。

効率性と注意点

  • HEVC/HDRデコードがボトルネックであり、編集ではありません。約30分のHEVCの調査は数分のデコード時間です。映像が必要とするだけの密度でサンプリングします。調査とプレイモードのエンコードはバックグラウンドで行います。
  • HLG/HDR映像はナイーブなSDR H.264エクスポートで灰色になります — board.py play は自動検出してトーンマップしますが、この映像の手動カットも同様に行う必要があります。video-tool-router のHLGガードを参照してください。
  • 必要に応じて高速化します: ユーザーが事前に雰囲気を指定した場合(「山のコーナーとトンネルブラーだけ」)、より粗い間隔で調査し、それらのみを候補にし、彼らが望む数個だけをエンコードします — 20分のパスを数分に短縮します。
  • 捏造しないでください。 サンプリングされたフレームが実際に示すものだけを主張してください。1〜2秒のイベントの存在が不明な場合は、それを主張する前にその範囲をより密にサンプリングしてください。
  • Windowsフォントパスはスクリプトにハードコードされています(C:/Windows/Fonts/...)。他のOSでは調整してください。

Individual skills in this repo

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

関連スキル