Communitygithub.com

Abbreviation-Lab/video-review

レンダリングされた動画やRemotionプロジェクトを、視聴せずにレビューします。review-video.ps1 (Windows, ffmpeg) を実行し、シーンチェンジおよび2秒ごとのタイムスタンプ付きフレームを抽出、オーディオ(LUFS、ピーク、クリッピング、無音、クリック)をチェックし、ナレーション行をフレームにマッチさせ、Windows OCRで画面テキストを読み取り(スペル、読了時間、画面にない話された数字、YouTube Shortsのセーフエリア)、前回のレビューからの変更点をリストアップして、report.mdとPDFコンタクトシートを出力します。ユーザーが動画、レンダリング、MP4、Short、解説動画、Remotionプロジェクトやコンポジションのレビュー、確認、目視、QA、校正を依頼したときや、スライドや画面テキストがナレーションと一致しているか質問されたとき、誤字、読むには速すぎるテキスト、数字、セーフエリア、動画のオーディオについて質問されたとき、前回のレンダリングからの変更点を聞かれたとき、またはチャットに添付する動画のPDFを求められたときに使用します。

video-review とは?

このスキルは、動画ファイルやRemotionプロジェクトを実際に視聴することなく、テキストベースのレビューを可能にします。`review-video.ps1` スクリプトが、ffmpegを使用してシーンチェンジと2秒間隔でフレームを抽出し、オーディオ分析(LUFS、ピーク、クリッピング、無音、クリック)を実行します。Windows OCR機能を使って各フレームのオンスクリーンテキストを読み取り、スペルミス、読了時間不足、画面に表示されていない数字、YouTube Shortsのセーフエリア違反を自動チェックします。また、前回のレビュー結果と比較して変更点を特定し、詳細な `report.md` とPDFコンタクトシートを生成します。Claude CodeやCursorなどのAIエージェントがこのスキルを利用することで、動画制作ワークフローにおいて、人間が動画を最初から最後まで見る負荷を大幅に削減し、高速かつ体系的に品質保証(QA)を行うことができます。このスキルはWindows環境を前提としており、ffmpegとPowerShellが必須です。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Ablation-Lab/video-review-tool/tree/main/skills/video-review

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

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

ドキュメント

ビデオレビュー

このツールは、動画ファイルまたはRemotionプロジェクトを、読めるレビューパックに変換します。フレーム(PNG)、オーディオ分析結果、各フレームのナレーション行とOCRで読み取った画面テキスト、自動チェック結果、前回のレビューからの変更点がすべて report.md にまとめられます。あなたの役割はツールを実行し、そのパックをもとに動画をレビューすることです。

1. ツールの実行

次のコマンドを正確に使用して実行してください(BashとPowerShellのどちらからでも動作します)。ユーザーのパスは引用符で囲んでください。

powershell -NoProfile -ExecutionPolicy Bypass -File "${CLAUDE_SKILL_DIR}/review-video.ps1" "<動画ファイルまたはRemotionプロジェクトフォルダ>" [オプション]
  • 動画ファイル(MP4、MOVなど):2秒ごと、各シーンチェンジ付近、および末尾のフレームを抽出します。
  • Remotionプロジェクトフォルダ:npx remotion still でスチルをレンダリングし(完全なレンダリングは不要)、オーディオは個別にレンダリングします。デフォルトでは最初のコンポジションを使用しますが、-Composition <id> で指定できます。出力には他のコンポジションもリストされます。プロジェクト内で npm install が事前に実行されている必要があります。

便利なオプション(すべて任意):

オプション用途
-Composition <id>Remotion:レンダリングするコンポジションを指定。
-Frames 0,90,450Remotion:指定されたフレーム番号のみをレンダリング。
-Interval <s>通常フレーム間の秒数(デフォルト2)。長い動画の場合は4以上を使用。
-Narration <file>自動検出されない場合のナレーションソース:.srt、.vtt、.csv、.md 録音テーブル、または voiceover.json。
-Project <folder>動画がプロジェクトの外にある場合にナレーションを検索するフォルダ。
-OutDir <folder>パックの出力先フォルダ。
-CompareWith <folder>以前のレビューフォルダ(例:以前のファイル名のもの)と比較します。デフォルトでは、各実行は同じ動画の最後の実行と比較します。
-ChangesPdfユーザーが変更点のみを希望する場合に、変更されたフレームのみのPDFも作成します。
-KeyFramesPdfレビューフォルダに key-frames.pdf を作成します:約15~20フレーム、シーンごとに1つの完全構築フレームとフラグ付きフレームを含み、タイムスタンプ、シーン、問題点がラベル付けされ、10MB未満。レビューフォルダに完全なレビューが既にある場合はそれらのフレームから構築され、それ以外は変更されません。それ以外の場合は最初にレビューが実行されます。完全なコンタクトシートをスキップするには -NoPdf を追加します。
-KeyFramesMaxMB <n>key-frames.pdf のサイズ制限(デフォルト10)。
-WordsPerSecond <n>読了時間チェックの読み取り速度(デフォルト3)。
-NumberWordsFrom <n>話された数字の単語をチェックする開始値(デフォルト10)。
-SafeMargins t,r,b,l1080x1920におけるShortsのセーフエリアマージン(デフォルト288,192,672,48、Googleの控えめな数値)。
-WordList <file>スペルチェックで受け入れる追加の単語リスト。
-SceneThreshold 0.3カメラ映像用(デフォルトの0.02はフェードのあるスライドに適しています)。
-NoOcr画面テキストチェックをスキップ。
-NoPdfユーザーがレビューのみを希望する場合にPDFをスキップ。
-NoAudioRemotion:オーディオレンダリングをスキップ。

長い動画は時間がかかります:動画8分で約2分、Remotionスチル1枚あたり約4秒です。タイムアウトは10分に設定してください。出力の最終行には、report.md、フレームフォルダ、PDFのパス、およびオーディオ、テキストチェック、変更点の1行の要約が表示されます。パックは動画の隣の <動画名>-review\ またはRemotionプロジェクト内の out\<コンポジション名>-review\ に配置されます(-OutDir が指定されていない場合)。各実行の前回の結果は previous\ に保持されます。

出力が FAILED: で終了した場合、停止してユーザーに理由を伝えてください。ffmpegがない場合の修正方法は winget install --id Gyan.FFmpeg -e を実行し、新しいターミナルを開くことです。WARNING: で始まる行はレポートの上部にも表示されます。それらを伝えてください。

2. 概観レビューまたは全レビュー

ツールの実行は負荷が低いですが、フレームを開くことはユーザーの使用量を消費します。開いたフレームごとに画像を読み取るためです。15分の動画の全レビューで、6つのOpusサブエージェントがすべてのフレームを開くと、使用量セッション全体を消費したことがあります。したがって:

  • デフォルトでは概観レビューとします。ユーザーが「全レビュー」「すべてのフレーム」「全部を確認」などと明示的に指示した場合のみ全レビューを行います。概観レビューでは、report.md から作業します:サマリー、チェック結果、ナレーションタイムライン、各フレームのOCRテキストとフラグ。レポートの行を通じてシーンチェンジフレーム(end of scene と scene change)を確認し、何か問題がありそうな場合(フラグが立ったチェック、ナレーションと画面テキストが一致しない、変更されたフレーム、その時点でのオーディオ問題、スライドがあるべきところにOCRテキストが空または文字化けしている)のみフレーム画像を開きます。最後に概観レビューであったことと、開いたフレーム数を伝えます。
  • 常にいくつかの実際のフレームを開く:概観レビュー、テキストのみのレビュー、タイムラインのみの判定のいずれの場合でも、シーンごとに完全に構築されたスライド1枚(すべてが表示された後の end of scene フレーム)、または明確なシーンがない場合は動画全体にわたって15~20枚のフレームを開きます。これらはテキストだけでは伝わらないビジュアルスタイル(レイアウト、重なり、はみ出しボックス、コントラスト、空白フレーム)を示します。長い動画の場合は、概観レビューを行うSonnetサブエージェントにそれらを開かせてください。常に最後に開いたフレーム数を伝えます。
  • 依頼された場合のみ全レビュー。動画が5分を超える場合(report.md のサマリーの Length と Frames を参照)、フレームを開く前に停止します:フレーム数と開く予定のフレーム数をユーザーに伝え、全レビューが多くの使用量を消費することを説明し、続行するか、代わりに概観レビューを提案するか、より大きな -Interval(-Interval 4 で通常フレームが半分に)で再実行してフレーム数を減らすかを尋ねます。回答を待ちます。
  • 全レビューを行う場合:一度に最大2つのサブエージェントを実行し、合計で最大100フレームを開きます。ただし、ユーザーが別の数値を指定したり、「すべてのフレーム、上限なし」と指示した場合は除きます。サブエージェントにはデフォルトでSonnetを使用します。ユーザーがOpusを要求した場合のみOpusを使用しますが、その場合は使用量が大幅に増えることを一度だけ伝えます。各サブエージェントには、自身のフレーム範囲と report.md の該当行を渡し、見つけた問題のみを返却させます。

おおよそのフレーム数:-Interval 2(デフォルト)では動画1分あたり30枚の通常フレーム、-Interval 4 では15枚、-Interval 10 では6枚で、さらにシーンチェンジごとに最大2枚が追加されます。

ユーザーの依頼例

ユーザーの発言対応
「C:\path\to\video.mp4 をレビューして」概観レビュー。
「C:\path\to\video.mp4 の全レビューをして」全レビュー、最大100フレーム(5分超の場合は最初に確認)。
「...全レビュー、すべてのフレーム、上限なし」すべてのフレームの全レビュー。5分超の場合は最初に確認し、使用量セッション全体を消費する可能性があることを伝える。
「Sonnetサブエージェントを使って」 / 「Opusを使って」そのモデルをサブエージェントに使用(Sonnetはデフォルト)。
「Sonnetで概観レビューをしてタイムラインファイルを作成し、そのタイムラインから全体的な意見を聞かせて」ツールを実行し、1つのSonnetサブエージェントにパックを概観レビューさせ、キーフレームのサンプル(シーンごとに完全構築されたスライド1枚)を開き、レビューフォルダに timeline.md を作成させます。各シーンのエントリに時間範囲、ナレーションの要約、画面テキストの要約、ビジュアルの様子、問題点を記述します。そのファイルのみを読み(自分ではフレームを開かずに)、全体的な意見(構成、ペーシング、明瞭さ、ビジュアルスタイル、スライドがナレーションをサポートしているか)を述べます。開いたフレーム数を伝えます。
「C:\path\to\video.mp4 のレビューPDFを作成して、チャットに添付できるようにして」ツールを実行し、PDFのフルパスを提供します。依頼がない限り、レビューやフレームの開始は行いません。
「タイムラインファイルとキーフレームPDFを作成して...両方をチャットに添付できるようにして」ツールを -KeyFramesPdf で実行し(下記「チャットAIとの共有」参照)、上記のようにタイムラインを作成します。

チャットAIとの共有

長い動画の場合、完全なコンタクトシートPDF(数百フレーム)は添付しないでください。代わりに、テキストタイムラインファイル(timeline.md、上記参照)とキーフレームPDFをユーザーに提供します。キーフレームPDFは -KeyFramesPdf で作成されます(完全なPDFが不要な場合は -NoPdf を追加。レビューが既にあるフォルダではフレームを再利用し、数秒で完了します)。約15~20フレーム(シーンごとに1つの完全構築フレームとレビューでフラグが立ったフレーム)を含み、各フレームにタイムスタンプ、シーン名、問題点がラベル付けされ、10MB未満で、key-frames.pdf としてレビューフォルダに保存されます。そのフルパスを提供します。ツールが明確なシーンを見つけられなかった場合(番号付きフッターバッジがない場合)、フレームを均等に分散し、ラベルにその旨を記載します。自身でビジュアル問題を発見することはできないため、あなたが何か問題を見つけた場合(重なり、空白フレームなど)、渡す際に参照すべきタイムスタンプを伝えてください。完全なPDFはShortsのような短い動画に最適であり、-ChangesPdf は変更されたフレームのみに適しています。

3. 動画のレビュー

  1. report.md を読みます。順序:警告;前回のレビューからの変更点(以前の実行がある場合のみ:変更されたフレーム、古いフレームへのリンク、追加および削除された単語);サマリー;オーディオ分析結果;ナレーションタイムライン(各行に開始、終了、マッチスコア);画面テキストチェック(スペル、読了時間、数字、Shortsセーフエリア);次に、すべてのフレームのテーブル(時間、取得理由、frames/ 内のファイル、その時点のナレーション、OCRテキスト、フラグ)。「(一時停止;最後の行)」は、誰も話しておらず、表示されている行が直前に話された行であることを意味します。
  2. ユーザーが変更点を尋ねた場合、または変更セクションが存在する場合、変更されたフレームから始めます:各フレームを前回のフレームと並べて開き、変更点を説明します。
  3. 各スライドをそのナレーション行と比較します。概観レビューでは、レポートのOCRテキストからこれを行い、問題がありそうなフレームのみを開きます(セクション2参照)。全レビューでは、Readツールでフレームを開きます(合意された上限内で):最初に end of scene とマークされたフレーム(それぞれ変更直前の完成したスライド)と scene change(それぞれ落ち着いた後の次のスライド)、次にフラグが立ったすべてのフレーム、次にナレーション行が変わるか画面上で何かが構築される通常フレームを開きます。
  4. 自動チェックは手がかりであり、確定ではないとして扱い、各チェックはフレーム画像で確認します:
    • スペル:OCRは小さく、薄く、または等幅のテキストを誤読することがあり、フラグが立った単語の中には意図的なもの(名前、意図的に誤解されている単語)もあります。画像で確認できたもののみ報告します。
    • 読了時間:フラグが立ったスライドは、指定された1秒あたりの単語数に対してその時間に収まらない新しい単語があります。多くのラベルがあるナレーション付きダイアグラムでは簡単に誤判定されます。本当に時間が必要なスライドを特定します。
    • 数字:画面で見つからない話された数字は、実際の不一致(スライドに異なる数字が表示されている)またはOCRが見逃した数字(多くの場合、大きな見出しの数字)のいずれかです。フレームを確認します。
    • セーフエリア:縦長動画でYouTubeのオーバーレイマージン内のテキスト。デフォルトのマージンは最も控えめに公開された数値であるため、下部と右端のテキストを優先的に確認します。
  5. 開いたフレームでは、目視でも以下を確認します:ナレーションと一致しない画面テキスト、数字、名前、ラベル;切り取られたまたは重なっているテキスト;低コントラスト;空または黒いフレーム;プレースホルダーまたは残骸コンテンツ;「見つかりません」とマークされたナレーション行;レポート内のオーディオ問題(クリッピング、-1 dBTPを超えるトゥルーピーク、クリックまたはポップ、動画途中の無音、約-14 LUFSから大きく外れたラウドネス)。
  6. 簡潔に報告します:最初に問題(それぞれフレーム番号とタイムスタンプ、例 #14 00:22.00 と問題の内容)、次にオーディオ分析結果、次にツールがチェックできなかった事項。すべてが一致している場合はその旨を簡潔に伝えます。ユーザーが依頼しない限りプロジェクトを変更しないでください。フラグが立った単語が正しい場合は、プロジェクトフォルダの review-words.txt に追加することを提案できます。

PDFについて

<動画名>-review.pdf は同じフォルダに作成されます:表紙ページ(オーディオ分析結果、チェック結果、変更点を含む)、次に1ページあたり6~9フレーム、各フレームにタイムスタンプ、見つかった問題点(赤)、ナレーション行、OCRテキスト(青、スペルミスは下線)がラベル付けされます。20MB未満に保たれます。-ChangesPdf を使用すると、変更されたフレームのみの <動画名>-changes.pdf も作成されます。ユーザーがClaudeチャットに添付したり誰かに送信したりするものを求める場合、フルパスを提供します。-MaxPdfMB <n> でより小さいサイズ制限を設定できます。key-frames.pdf(-KeyFramesPdf を使用)は長い動画に添付するものです。

関連スキル