Communitygithub.com

morrimoz/talking-head-clip-review

話している自分を撮影した動画から最適なクリップを選び出します。同じスクリプトの複数テイクの位置合わせと、長尺録画からのトークポイントごとのクリップ抽出を行います。ローカルで文字起こし、ポーズや言い直しのトリミング、流暢さのスコアリング、HTMLレビューページの作成、選択結果のJSON出力、ffmpegによるレンダリングまでを実行します。

talking-head-clip-review とは?

このスキルは、話している人の映像(テイクや長尺録画)から最適なクリップを自動的に選定し、編集作業を効率化するためのものです。同じスクリプトを複数テイク撮影した場合、各テイクをスクリプトの行ごとに位置合わせし、並べて比較できるようにします。また、一つの長い録画からは、ポーズや言い直しを自動でカットし、トークポイントごとに保持/スキップ可能なクリップに分割します。処理はすべてローカルマシン上で行われ、ソース動画は決して変更されません。Whisperによる単語タイムスタンプ付き文字起こし、ポーズや言い直しのトリミング、流暢さのスコアリング、そしてクリップの再生、評価(Use/Skip)、メモが可能なHTMLレビューページを生成します。ユーザーの承認後、ffmpegによるレンダリング、CMX3600 EDL、CSVファイルとして選択結果を出力します。Claude Code、Codex、CursorなどのAIエージェント環境で動作し、ShellとPythonのみで構成されているため、セットアップが容易です。

対応✓Claude Code✓Codex CLI✓Cursor
npx skills add https://github.com/morrimoz/talking-head-clip-review/tree/HEAD

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

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

ドキュメント

トーキングヘッドクリップレビュー

生のトーキングヘッド映像を、誰かが手動でスクラブすることなく承認済みのセレクトに変換します。エージェントが文字起こし、位置合わせ、提案を行います。人は1つのページで承認します。エージェントは承認されたものを正確にアセンブルします。

文字起こしはマシン上に留まります。ソース動画は決して変更されません。

ハードルール

  • ソース動画を変更、移動、再エクスポートしないでください。すべてはイン/アウトポイントと派生ファイルです。
  • ユーザーの映像を削除したり、ゴミ箱を空にしたりしないでください。ディスク容量が不足している場合は、その旨を伝え、ユーザーに任せてください。
  • スクラッチフォルダから作業してください。プレビュー、ポスター、レビューページ、セレクトのみがメディアの隣に配置されます。
  • 文言をでっち上げないでください。クリップテキストはトランスクリプトから取得します。オプションのフレーズ修正は、--fix で渡されるJSONマップに記述されています(references/term-corrections.example.json を参照)。サンプルファイルは適用しないでください。
  • カメラで語られた事実(時刻、数字、「10分前」)は、選択する前に実際の録画と照合してください。
  • 保持するスパンには、モニターの一瞥、マイクのバンプ、クリック音、呼吸音を含めないでください。再編集後は、最初のセレクト時だけでなく、必ず視線チェック(ステップ5)を再実行し、すべての編集ポイントを聞いてください。ノイズはミュートまたはカットし、その隣の単語は絶対にカットしないでください。
  • ピックアップや再録音したラインは、メインテイクのトーン、レベル、部屋の響きと一致している必要があります(同じマイク、ゲイン、距離、EQ、ノイズ除去)。こもった音や箱の中のような音になるラインは、出荷せずにフラグを立ててください。
  • ユーザーに書くものには、emダッシュではなくハイフンを使用してください。
  • 単語境界は絶対的な制限です。プロンプトがタイトなカットや視線トリムを要求した場合でも同様です。クリップには、Whisperの単語時間(単語の端はしばしば早すぎたり遅すぎたりします)の前後に0.15秒のプリロールと0.25秒のテールを付けますが、隣接する単語に重ならないようにクランプします。ポーズと視線トリムは、単語間のギャップ内のみをカットし、各単語の隣に少なくとも0.1秒を残します。視線が外れている部分が話し言葉と重なる場合は、その単語を保持し、フラグを立ててください(away_words、ストリンガウトでは赤い枠線)。決してカットしないでください。エッジトリムには、独自のトリミングスクリプトを書く代わりに build_review.py --gaze-trim を使用してください。手動で設定された exact_spans も、単語エッジに押し戻されます。

セットアップ(マシンごとに1回)

scripts/check_deps.sh を実行してください。ffmpeg、ffprobe、python3、および1つのWhisperバックエンドが必要です。Swiftは視線ステップにオプションで必要です。インストール手順: references/setup.md

レイアウト

WORK/                      スクラッチフォルダ、例: ./talk/
  tx/<take>.wav|json|txt   16 kHz モノラルオーディオ、単語を含むWhisper JSON、読み取り可能なトランスクリプト
  picks.json               ビート+候補(エージェントが編集)
  picks_resolved.json      単語精度のスパン、テキスト、時間(生成)
  pose.json                視線外れインターバル(オプション、macOS)
REVIEW/                    メディアの隣、例: ./review/
  previews/<take>.mp4      ページ用の540p H.264コピー
  posters/<beat>-<i>.jpg
  "<Title> - take review.html"
  "<Title> - picks stringout (540p).mp4"
SELECTS/                   selects.json, selects.csv, selects.edl, selects.mp4

エピソードは作品にちなんで命名してください(例: launch-01)。テイクキーは短く(A、B、C)保ち、picks.json でファイル名にマッピングしてください。

ステップ

  1. インベントリ. 各テイクを ffprobe で確認します(時間、サイズ、fps、回転)。スマートフォン映像は可変フレームレートで縦向きであることがよくあります。プレビューとレンダリングはそれを正規化します。どのファイルがカットするグレーディング済みエクスポートで、どれが無視するカメラオリジナルかを尋ねてください。
  2. 文字起こし. python3 scripts/transcribe.py --out WORK/tx TAKE... を実行します。Whisperパッケージがデフォルトの python3 にない場合は、check_deps.sh が報告したインタプリタを使用してください。ファイルがまだエクスポート中の場合は、バックグラウンドで --watch FOLDER --expect N を使用します。各ファイルが30秒間成長を停止するまで待機します。Apple Siliconでの推奨モデル: mlx-community/whisper-large-v3-turbo、単語タイムスタンプ、condition_on_previous_text はオフにしてください。音声が英語でない場合は --lang を設定してください。
  3. ピックをドラフトする。
    • モード (a)、1つのスクリプトのテイク: 1行に1行または1トークポイント(IDが必要な場合は id | name | text)を記述した WORK/script.txt を書き込みます。python3 scripts/segment.py takes --tx WORK/tx --script WORK/script.txt --out WORK/picks.json A=take-a B=take-b ... を実行します。各テイク内の各行の試行をすべて見つけ(あいまいな単語ウィンドウマッチ、再開は別の候補として表示されます)、最も流暢なものを事前にチェックします。
    • モード (b)、1つの長い動画: python3 scripts/segment.py single --tx WORK/tx --out WORK/picks.json A=long-take を実行すると、1.2秒以上のポーズと文の終わりで区切り、4〜40秒のクリップに分割します。
    • 次に、自分で .txt トランスクリプトを読んでください。イン/アウトポイントを修正し、再スタートやグリッチには cut: [[a,b]] を追加し、ビートをマージまたは分割し、候補ごとに実際の why(クリーン、再スタート、間違った単語、スクリーンレコーディングと一致)を記述してください。一致するスクリーンレコーディングで撮影されたテイクを優先してください。自動スコアは同点の場合のみ使用されます。
  4. ページをビルドする。 python3 scripts/build_review.py --work WORK --media SRC --out REVIEW --title "launch-01" --stringout を実行します。スパンは0.6秒以上の単語間ギャップで分割され、silencedetect -35dB / 0.35s で締め付けられます。候補に keep_pauses: true を追加すると、その分割をスキップします。パディングフラグ: --pre 0.15 --tail 0.25 --guard 0.1。実際のフレーズマップがある場合にのみ --fix path/to/corrections.json を渡してください。HTMLをブラウザで開きます。動画はクリックで読み込まれるため、ページは高速に開きます。
  5. オプション、macOS: 視線。 python3 scripts/gaze.py --work WORK --review REVIEW を実行し、その後ステップ4を --stringout --gaze-trim で再実行します。視線が外れているフレームはストリンガウトで赤い枠線が表示されます。後でスクリーン映像でカバーし、オーディオは保持します。
  6. 人間によるレビュー。 ユーザーに何をすべきか伝えてください: 再生、Use/Skip、メモ、その後「Save decisions (JSON)」。<slug>-decisions.json がダウンロードされます。「Copy as text」がフォールバックです。触っていないカードは提案を保持します。
  7. ノートを適用する。 決定JSONを読み取ります。すべてのノートを picks.json の編集に変換します: cut、in/out、audio_only: true、grade: "eq=gamma=1.28:brightness=0.03"、optional: true。最初にバックアップを取ってください(cp picks.json picks.before-notes.json)。ステップ4を再実行し、各ノートと行った処理を要約します。
  8. アセンブルする。 python3 scripts/assemble.py --work WORK --media SRC --decisions /path/to/<slug>-decisions.json --out SELECTS --render を実行します。フレーム精度のフル解像度 selects.mp4、CMX3600 selects.edl(Premiere、Resolve、Final Cutはインポート経由)、selects.csv、および視線外れ範囲とノートを含む selects.json が得られます。
  9. 検証する。 すべての編集ポイントを聞いてください(クリップされた最初または最後の音節、一瞥、ノイズがないこと)。ffprobe でレンダリング時間を selects.json の合計と比較し、コンタクトシートを作成してください: ffmpeg -i selects.mp4 -vf "fps=1/6,scale=180:-1,tile=10x3" -frames:v 1 sheet.jpg。それを表示し、長さ、変更点、まだユーザーが必要なことを報告してください。

picks.json の形状

{"episode":"launch-01","mode":"takes","takes":{"A":"take-a","B":"take-b"},
 "beats":[{"id":"01a","name":"Hook","script":"...","cands":[
   {"take":"B","in":0.82,"out":21.2,"pick":true,"why":"Clean, matches the screen.","cut":[[51.4,53.82]],
    "note":"","audio_only":false,"grade":null,"optional":false,"signals":{"dur":20.1,"wpm":162,"fillers":0,"repeats":0}}]}]}

ヒント

  • 単語タイミングはトランスクリプトJSONでスポットチェックしてください。ノートの周辺の word@start-end のダンプが、カットを配置する最も速い方法です。
  • ffmpegに drawtext がない場合は、テキストではなく drawbox または hue でフレームをマークしてください。
  • 大きなレンダリング: 最初に空きディスクを確認してください。4Kテイクはすぐに容量が増えます。

関連スキル