Communitygithub.com

analyze-video(動画分析)

ローカル動画や会議録画をタイムスタンプ付きのコンタクトシートと文字起こしに変換します。ffmpegとローカルのwhisper.cppを使用します。

analyze-video(動画分析) とは?

このスキルは、ユーザーのマシン上で動画ファイル(.mp4, .mov, .webm, .mkv, .m4v, .m4a)を分析し、タイムスタンプ付きのコンタクトシートと文字起こしを生成します。ZoomやTeamsの会議録画にも対応し、録画はマシン上に留まりクラウドに送信されません。macOS、Linux、Windowsで動作し、ffmpegとローカルのwhisper.cppを使用して処理します。出力はプロジェクトルートの `_video/` ディレクトリに保存され、インデックス、文字起こし、コンタクトシート画像、個別フレーム、マニフェストファイルが含まれます。また、`.vtt` 形式の字幕ファイルが隣接している場合はそちらを優先して使用し、話者名を保持します。ユーザーが /configure と入力すると設定ページが開き、フレーム間隔や最大フレーム数、言語、モデルなどをカスタマイズできます。

対応~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/richardjahnke-eng/ai-video-skill/tree/main

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

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

ドキュメント

Analyze video(動画分析)

このマシン上でファイルを処理してください。動画や音声をアップロードしたり、クラウドの文字起こしサービスに送信しないでください。

実行

開かれているプロジェクトのルートからコマンドを実行します。出力はそのディレクトリ内の _video/ に格納され、エージェントのサンドボックス内に留まり共有フォルダには保存されません。このスキルのエントリスクリプトを絶対パスで実行してください。

macOS および Linux:

/absolute/path/to/analyze-video/scripts/analyze_video "/absolute/path/to/video.mp4"

Windows:

powershell -NoProfile -ExecutionPolicy Bypass -File \absolute\path\to\analyze-video\scripts\analyze_video.ps1 "C:\path\to\video.mp4"

動画のパスはディレクトリ一覧から取得し、そのまま渡してください。録画ファイル名には、通常のスペースに見えるがそうでない文字が含まれる可能性があります。

Zoomのローカル録画は ~/Documents/Zoom/<日時 会議名>/ にあり、通常は zoom_0.mp4 です。音声のみの audio_only.m4a もあります。.mp4 を使用してください。ただしユーザーが音声ファイルを希望した場合はその限りではありません。音声のみのファイルは文字起こしのみ生成され、シートは作成されません。

コマンドは index.md のパスを出力します。フォルダには以下が含まれます:

  • index.md: 再生時間、フレーム間隔、シート一覧
  • transcript.md: タイムスタンプ付き文字起こし、または音声がない旨のメモ
  • sheets/sheet_NNN.jpg: コンタクトシート
  • frames/f_NNNN.jpg: 個別フレーム(タイムスタンプ付き)
  • manifest.json: ソースのフィンガープリントと使用された設定

録画ファイルの隣に .vtt 字幕ファイルがある場合(Zoomクラウド録画ダウンロードでは …_Recording.transcript.vtt、Teamsでは <名前>.vtt)、それがWhisperの代わりに使用され、話者名が保持されます。--whisper を渡すとローカルで文字起こしを行います。または --transcript /path/to/file.vtt で別の名前の字幕ファイルを指定できます。

同じファイルを同じ設定で再度実行すると「already processed」と表示され、処理はやり直されません。異なる間隔、モデル、言語、シーン設定、プロンプト、フレーム上限、スキップフレームの選択、または字幕ファイルが指定された場合は再処理されます。

コマンドが失敗した場合は停止し、その出力を伝えてください。自分でフレームをサンプリングする代替を行わないでください。出力がセットアップが必要である、またはWhisperモデルのダウンロードがブロックされていることを示した場合は、出力されたセットアップコマンドをユーザーに伝えてください。ユーザーはターミナルで一度だけ実行します。ユーザーがサンドボックス外での実行を依頼し承認した場合のみ、自分で実行してください。

結果を読む

  1. index.md を読む。
  2. transcript.md を全文読む。
  3. すべてのコンタクトシート画像を読む。
  4. セルが読み取れない場合にのみ、frames/ 配下のファイルを1つ開く。

index.md がフレームがスキップされたと示している場合は、transcript.md を読んで終了します。シートはありません。

設定

ユーザーが /configure と入力した場合、またはこのスキルの設定を変更したいと言った場合は、設定ページを開いてください。設定ファイルを自分で編集する前に行ってください。

  1. このスキルの scripts/configure を絶対パスで実行します。Windowsでは、そのスキルのPythonで python scripts/configure.py を実行します。
  2. 一行 configure: http://127.0.0.1:<port>/ と出力されます。そのURLをCursorブラウザで開き、ユーザーがページを見られるようにします。
  3. サーバーを起動したままにします。ページはスキルフォルダに config.local.json を書き込みます。次の動画からその設定が使用されます。

ユーザーが異なる設定を希望する場合

フラグを使用すると、その実行に対して config.json の設定を上書きできます。デフォルトでは30秒ごとおよびシーンチェンジ(新しいスライドやウィンドウ)ごとにフレームが取得され、長い録画では最大96フレーム(8シート)に制限されます。短い録画でより詳細に取得するには:

/absolute/path/to/analyze-video/scripts/analyze_video "/absolute/path/to/video.mp4" --interval 5 --max-frames 0

Windowsでは、同じフラグを scripts/analyze_video.ps1 に渡します。

--prompt "この動画で既知の用語" は、それらの名前がすでにタスクに含まれている場合のみ渡してください。プロンプトをでっち上げないでください。--max-frames 0 は上限を削除します。--skip-frames は、ユーザーが文字起こしや要約を求め、映像を見る・確認することを求めていない場合のみ渡します。

その他のフラグ: --language en、--model medium、--no-scene、--scene-threshold 0.2、--min-scene-gap 1、--sheet-cols、--sheet-rows、--frame-width、--keep-audio、--output-root beside(動画の隣)、--config /path/to/config.json。

デフォルト値と全キー一覧は、このスキルフォルダ内の config.json と README.md に記載されています。英語専用モデル(medium.en およびその他の *.en 名)では "language": "auto" を使用できません。

関連スキル