「YouTubeのリンクをChatGPTに貼っても、読まれるのは文字起こしであって映像ではない。Claudeはそもそも動画ファイルを受け取ってくれない。動画を読めるGeminiでさえ、Googleに送ったうえで固定間隔(既定は毎秒1枚)でフレームを抜くので、速いカットは取りこぼす」——claude-real-video のREADMEは、現状の「AIに動画を見せる」手段の限界を、こう突きます。
claude-real-video(コマンド名は crv)は、この問題に「シーン変化でフレームを選び、重複を捨て、音声を文字起こしして、どのLLMにも貼れるフォルダにする」というアプローチで答えるオープンソースです。しかも処理はすべて手元のマシンで完結し、外に出るのは自分で貼り付けたフレームとテキストだけ。Hacker Newsのトップに載り、GitHubのスターは1,200を超えています。
「動画をAIに見せる」と一口に言っても、そのやり方には大きな差があります。雑にフレームを抜けばトークンを浪費して見落としも増え、逆に丁寧にやろうとすれば手作業が発生する。crvは、この「雑と手間」の間を、シーン検出と重複除去という自動処理で埋めるツールです。本記事では、この claude-real-video が何をするツールで、なぜ「ただフレームを抜く」だけではダメなのか、どう使い、そして前回解説した claude-video と何が違うのかを、公式リポジトリの一次情報から解説します。
Claude Code全体の使い方は Claude Code完全ガイド2026:インストールから本番運用まで をご覧ください。
- ・claude-real-video(crv)は、Claudeでも他のLLMでも動画を「実際に見せる」MITライセンスのCLI。pipで入る。
- ・固定間隔でなくシーン変化でフレームを抽出し、スライディングウィンドウで重複を除去。少なく意味のあるフレームだけを渡す。
- ・処理はすべてローカル。出力(frames・transcript・MANIFEST)をClaude/ChatGPT/Geminiに貼って質問できる。
- ・同じ「動画を見せる」でも claude-video(Claude Codeスキル・字幕優先)とは設計思想が異なる。用途で選ぶ。
1. claude-real-video とは — どのLLMにも動画を「見せる」
HUANGCHIHHUNGLeo/claude-real-video は、動画を「AIが読める素材」に変換するPython製のCLIです。PyPIから pip install claude-real-video で入り、crv というコマンドで動きます。対応OSはmacOS・Windows・Linux、Python 3.10以上。ライセンスはMITです。
その役割は、名前のとおり「Claude——あるいはどのLLMでも——に、動画を実際に見せる」こと。使い方は驚くほど素直で、URLかローカル動画のパスを渡すだけです。
crv "https://www.youtube.com/watch?v=..."
# → crv-out/frames/*.jpg + crv-out/transcript.txt + crv-out/MANIFEST.txt
出力は3点セット。frames/ にはシーン変化に合わせて抜き出したキーフレーム、transcript.txt には文字起こし、MANIFEST.txt にはモデル向けの要約が入ります。あとはこのフォルダの中身(フレーム+MANIFEST)を、Claude・ChatGPT・Geminiなど好きなLLMに貼り付けて質問するだけ。特定モデルの「動画対応」に依存せず、手元で素材化してから任意のLLMに渡す——これがcrvの基本思想です。
この「一度素材化すれば、あとはどのモデルにも使い回せる」という手触りが、公開直後にHacker Newsのフロントページに載った理由の一つでしょう。動画をAIに読ませたいというニーズは強いのに、既存の手段は「モデルが動画に対応しているか」「クラウドに上げてよいか」といった制約に縛られがちでした。crvはその制約を、ローカルで完結する素材化という一手で外します。出力フォルダはただのJPEGとテキストなので、貼り付け先を選ばず、将来モデルが変わっても資産として残ります。
。そしてもう一つ強調しておきたいのが、処理がすべて手元のマシンで完結する点です。動画がまるごとどこかのクラウドに送られることはありません。外部に出るのは、あなたが自分で選んでLLMに貼り付けたフレームやテキストだけ。プライバシーを重視する用途や、社外に出せない録画の分析に向いています。
なお、crvは「LLMに見せる」用途に限りません。READMEは、MLモデルを一切ダウンロードしない汎用のキーフレーム抽出器としても使えると述べています。シーン変化検出+重複除去だけが欲しい、というケースでも役立つわけです。重い機械学習モデルを持たず、ffmpegベースで動くため、導入も動作も軽い——ここもcrvの実用的な美点です。
読者が当サイトのOSS解説に求める「①結局何ができる/②何を解決する/③何を代替できる」に当てはめると、crvは「①動画をどのLLMでも読める素材(frames+transcript+MANIFEST)に変換する/②AIが動画を見られない、または固定間隔で雑にしか見られない問題を解決する/③Geminiの固定間隔サンプリングや、手作業でのスクショ収集・文字起こしを代替する」ツールだと言えます。とりわけ「どのLLMでも」という一点が、特定モデルの動画対応の有無に振り回されないという安心感を生みます。今日使っているモデルが明日変わっても、素材化のパイプラインはそのまま使い回せるからです。
2. なぜ「ただフレームを抜く」ではダメなのか
crvの設計を理解する鍵は、「なぜ固定間隔サンプリングではダメなのか」という問いにあります。
多くの「LLMに動画を見せる」スクリプト——そしてGemini自身のパイプライン——は、フレームを固定間隔(例:毎秒1枚)でつかみます。この方式には二つの弱点があります。一つは、静止した画面録画(スクリーンキャスト)を過剰にサンプリングしてしまうこと。10分間同じスライドを映していれば、ほぼ同一のフレームを約600枚も取り込み、それぞれが別の画像としてトークンを食います。もう一つは、速いカット割りのリール動画を過小にサンプリングしてしまうこと。サンプルとサンプルの間で切り替わった映像は、まるごと抜け落ちます。
crvはここを賢く作り替えています。READMEの比較表を整理すると、違いは一目瞭然です。
| 固定間隔サンプリング | claude-real-video | |
|---|---|---|
| フレーム選択 | N秒ごと | シーン変化検出+密度フロア |
| 繰り返しショット(A-B-Aのカット) | そのたびに再送 | スライディングウィンドウ重複除去で一度だけ |
| 10分の静止スライド | 約600枚の瓜二つ | 1枚に畳む(dedup) |
| 速いカット割りのリール | サンプル間を取りこぼす | 各変化を捉える |
| 音声 | 無視されがち | Whisperで文字起こし(言語自動判定) |
| 処理場所 | しばしばクラウド | 手元のマシン(貼る素材は自分で選ぶ) |
| 入力 | ローカルファイルのみが多い | URL(yt-dlp)またはローカル |
つまり、シーン変化に応じて必要なところだけ密に、動きのないところは疎に。しかも「一度見せたショットは、A-B-Aのようにカットが戻ってきても再送しない」。この結果、モデルには少なく・より意味のあるフレームが渡り、コンテキストは安く、理解はむしろ良くなります。「フレームを増やせば精度が上がる」のではなく、「意味のあるフレームだけに絞るほど、安くて的確」という逆説が、crvの核心です。
この発想が効いてくる理由は、LLMのコスト構造にあります。画像(フレーム)は1枚ごとにトークンとして課金され、枚数がそのままコストと処理時間に直結します。10分のスライド解説を毎秒1枚で取り込めば約600枚、そのほとんどが同じ絵——これはトークンの無駄遣いであり、しかもモデルの注意を薄めて肝心のフレームを埋もれさせます。crvのように重複を1枚に畳めば、コストが桁で下がるだけでなく、モデルが「本当に変化した瞬間」に集中できます。安さと精度が同時に手に入るのは、両者が同じ「無駄なフレームを渡さない」という一点から来ているからです。密度フロア(--fps-floor)が併走しているのも重要で、シーン変化が全く無い長い静止区間でも「最低でもN秒に1枚」は残すため、変化が乏しい映像で情報がゼロになることを防いでいます。
3. claude-real-video の仕組み — 6ステップ
crvが内部で何をしているかを、READMEの「How it works」に沿って図解します。
yt-dlpで取得 or ローカルをコピー"] B --> C["Extract
ffmpeg selectでシーン変化+密度フロア"] C --> D["Dedup
実ピクセル差 x スライディングウィンドウ"] D --> E{"字幕は
あるか"} E -->|"srt/vtt あり"| F["既存字幕をtranscriptに採用"] E -->|"無い"| G["Whisperで文字起こし
音声が無ければスキップ"] F --> H["Manifest
モデル向けにまとめる"] G --> H H --> I["frames + transcript + MANIFEST を出力"] I --> J["任意のLLMに貼って質問"]
順に見ていきましょう。Fetchでは、URLならyt-dlp(オプションでクッキー)、ローカルならファイルをコピーします。Extractでは、時系列に一度だけ走る ffmpeg select パスが、シーン変化フレームをプラス密度フロア(最低でも --fps-floor 秒に1枚)で抜き出します。だから速いカットも遅いスクリーンキャストも両方カバーできます。
Dedupが、crvのいちばんの肝です。ここでの重複判定は、知覚ハッシュ(perceptual hash)ではなく実際のピクセル差(縮小したRGB)で行います。ハッシュはフラットな色や、輝度が同じで色相だけ違う変化に対して盲目になりがちだからです。たとえば「背景色だけが赤から青に変わった」ようなフレームは、知覚ハッシュだと同一と誤判定しかねませんが、RGBの実差なら別のフレームとして正しく残せます。そして直近 --dedup-window 枚の採用済みフレームとのスライディングウィンドウで比較するため、A-B-Aのカットアウェイで「すでにモデルが見たショット」を送り直しません。話者Aと話者Bを交互に映すインタビューのような映像で、同じ構図が何度も戻ってくるケースでも、それぞれの絵を一度だけ渡せるわけです。--report を付ければ、どのフレームをどんな差分率で残した/捨てたかを可視化する report.html が出力され、しきい値のチューニングに使えます。
Textでは、動画に既に字幕がある場合(ローカルファイル横のsidecar .srt/.vtt、または埋め込み字幕)はそれを優先します——再文字起こしより速く正確だからです。字幕が無いときだけ、音声に対してWhisperにフォールバックします(音声が無ければきれいにスキップ)。Audioは任意で、--keep-audio を付けると元の音声トラック全体(audio.m4a=音楽・声・効果音、可能なら可逆コピー)を保存します。transcriptは「言葉」だけですが、この音声ファイルがあれば、耳を持つモデルに音楽やトーンそのものを聞かせられます。最後のManifestが、すべてをモデル向けにまとめます。
この設計のおかげで、モデルは動画を 見る(キーフレーム)・読む(文字起こし)・聞く(--keep-audioで音声全体) の3つでとらえられます。crvは字幕を動画に焼き込みません——焼き込みは見せ方の選択であって、動画をAIが読める形にするのに必要な処理ではないから、というのが作者の考え方です。プレーンテキストのtranscriptなら、どのモデルでもそのまま読めます。
字幕を「再文字起こしより優先する」という判断も、実務的で理にかなっています。既に正確な字幕があるのに、わざわざ音声からWhisperで書き起こし直せば、時間もかかるし精度も落ちかねません。crvは、sidecarの .srt/.vtt や埋め込み字幕があればそれをそのまま採用し、無い場合にだけWhisperに頼ります。この「あるものは使う、無いものだけ作る」という段取りは、前回解説した claude-video の「字幕優先」とも通じる、動画をAIに渡すツールに共通する定石だと言えるでしょう。そして処理がローカルで完結することは、単なるプライバシー上の利点にとどまりません。ネットワークのレイテンシや外部APIのレート制限に左右されず、手元の計算資源の範囲で完結するため、大量の動画をバッチで回すような使い方でも安定します。
4. 出力と使い方 — frames・transcript・–grid
crvの出力を「モデルに渡す前に自分の目で確かめたい」なら、--viewer を付けます。動画・キーフレームのグリッド・文字起こしを一つにまとめた viewer.html がローカルに書き出され、ダブルクリックで開けます(ネットワーク不要・追加インストール不要)。抽出したフレームが妥当か、取りこぼしや余計な重複が無いかを一目で確認できるので、いきなりLLMに投げる前のチェックとして重宝します。「モデルが実際に何を見るのか」を人間が先に見られるのは、地味ですが信頼性の高い運用につながります。
そして特徴的なのが --grid です。9枚の連続するキーフレームを1枚のコンタクトシート(連結画像)にまとめる機能で、モデルは「散らばった静止画」ではなく「順序のあるシーケンス」として読めます。各セルにはファイル名が入るので、どのフレームがいつのものかも分かります。これは地味ですが効く工夫です。フレームを1枚ずつバラバラに渡すと、モデルはそれらの時間的な前後関係を推測するしかありません。9枚を1枚のシートに順序どおり並べれば、「この動画はこう進んでいく」という流れごと読ませられます。しかも画像の枚数(=メッセージあたりの添付数)も減るので、貼り付けの手間とオーバーヘッドも下がります。下の実例は、火星探査車の解説動画から抜き出したキーフレームを並べたもので、ナレーションの進行に沿って場面が切り替わっていく様子が、1枚で俯瞰できます。
挙動は豊富なフラグで調整できます。READMEのオプションから主なものを挙げます。
| フラグ | 既定 | 意味 |
|---|---|---|
-o, --out |
crv-out |
出力ディレクトリ |
--scene |
0.30 |
シーン変化の感度(低いほどフレーム増) |
--fps-floor |
1.0 |
最低でもN秒に1枚は残す密度フロア |
--max-frames |
150 |
フレーム総数の上限 |
--dedup-threshold |
8 |
新規と見なすのに必要な変化ピクセルの% |
--dedup-window |
4 |
直近何枚の採用フレームと比較するか |
--keep-audio |
off | 音声トラック全体を audio.m4a で保存 |
--why |
– | 見る目的を指定し、汎用要約でなくその観点で分析 |
--kb |
– | 結果を日付つきノートとして自分のノート用フォルダに保存 |
とくに0.3.0で加わった --why と --kb は実用的です。--why "find the pricing strategy" のように「何のために見るのか」を伝えると、汎用の要約ではなくその観点で分析されます(MANIFESTに書き込まれる)。--kb ~/notes を付ければ、結果が日付つきのMarkdownノートとして自分のObsidian vaultやノートフォルダに保存され、crv-out に埋もれて消えずに知識ベースへ加わります。ゆっくり変化する映像(アニメのチュートリアル、じわじわしたモーフ、遅いパン)には --adaptive を付けると、固定しきい値ではなく周辺フレームとの相対で判定するため、どの単一フレームも大きくは動かない2〜3秒の変化も取りこぼしません。
チューニングを支えるのが --report です。これを付けると、捨てたフレームを ./dropped に残しつつ、どのフレームをどんな差分率(diff %)で残した/捨てたかを1枚ずつ可視化する report.html を書き出します。「重複除去が効きすぎて必要なフレームまで消していないか」「逆に緩すぎて似た絵が残っていないか」を目で確認しながら、--scene(シーン感度)や --dedup-threshold(新規と見なす変化率)を詰められます。動画の種類——スライド中心の講義か、動きの速いリールか——によって最適値は変わるので、この可視化があると迷わずに済みます。既定値(--scene 0.30/--dedup-threshold 8/--dedup-window 4/--max-frames 150)でも多くの動画で十分実用的ですが、極端な映像に当たったときの逃げ道が用意されているのは心強い設計です。
Pythonからも呼べます。from claude_real_video import process として process("https://youtu.be/...", "out", lang="en") のように使えば、フレーム数や文字起こしのパスを受け取れます。
5. claude-real-video の導入と、claude-video との違い
導入は2通りあり、どちらもとてもシンプルです。基本は、pipで入れて crv コマンドとして使う形になります。
pip install claude-real-video # コア(フレーム+重複除去)
pip install "claude-real-video[whisper]" # +音声の文字起こし
ffmpeg / ffprobe はフレーム抽出と音声に使われ、pipでは入らないので一度だけOSごとのコマンド(macOSは brew install ffmpeg など)で入れておきます。ffmpeg -version でPATHが通っているか確認しておくと安心です。文字起こしは whisper CLI([whisper] エクストラ、または pip install openai-whisper)を使い、Whisperもffmpegに依存します。
Claude Codeを使っているなら、pip install のあとに skills/claude-real-video を ~/.claude/skills/ へコピーすれば、Claudeが自分で動画を見に行くスキルになります。あとはClaude Codeに動画リンクを貼って質問するだけ。CLIとして手動で回すのと、Claude Codeのスキルとして自動で呼ばせるのと、両方の使い方ができるのは便利です。前者は「素材を作って好きなLLMに配る」ワークフロー、後者は「Claude Codeの中で完結させる」ワークフローに向いています。同じツールが、単体CLIとしてもエージェントの手足としても機能する——この二面性が、crvを幅広い場面で使える道具にしています。
さて、当サイトの読者から多い質問が「同じ『Claudeに動画を見せる』ツールである claude-video(/watch)解説|Claude Codeに動画を「見せる」スキルの全貌 と、どう違うのか」です。両者は目的こそ近いものの、設計思想と立ち位置がはっきり異なります。
| 観点 | claude-video(/watch) | claude-real-video(crv) |
|---|---|---|
| 形態 | Claude Code等のスキル/プラグイン | pip製CLI+Claude Codeスキル |
| 主な使い方 | /watch URL 質問 でその場で回答 |
crv URL で frames/文字起こし/MANIFESTを出力 |
| 想定モデル | Claude中心(50+ホスト) | 任意のLLM(貼り付けて使う) |
| フレーム選択 | detail 4段(字幕/キーフレーム/シーン変化) | シーン変化+密度フロア |
| 重複除去 | 直近採用フレームとの明度差 | スライディングウィンドウ(RGB実差・A-B-A対策) |
| 処理場所 | ホスト環境で実行 | ローカル完結を明示(プライバシー重視) |
| 音声 | Whisper(Groq/OpenAI) | 字幕優先→Whisper+--keep-audioで音声全体 |
要約すると、Claude Code内で手軽に動画へ質問したいなら claude-video、どのLLMにも使い回せる汎用の抽出器が欲しい/ローカル処理でプライバシーを重視したい/音声そのものもモデルに聞かせたいなら claude-real-video、という住み分けです。どちらも「AIが動画を見られない」という同じ課題に、別の角度から答えているツールで、優劣というより用途の違いだと捉えるのが正確です。
6. crv Pro と、誰に向くか
READMEには具体的な数字も載っています。ある58秒のクリップで、固定1fpsサンプリングなら58枚になるところを、crvは実際に違う26枚に絞り、--grid でそれを3枚のコンタクトシートに詰める。「フレームは少ないが、見落としはない」という設計の効果が、そのまま数字に表れています。58枚が26枚になれば、画像トークンはおよそ半分以下。それが3枚のシートにまとまれば、LLMへの添付も一気に扱いやすくなります。短い動画でこれだけ差が出るのですから、長尺の静止スライド中心の動画では、削減幅はさらに大きくなります。
無料版が「画面に何が映っているか」を伝えるのに対し、作者は有料の crv Pro(買い切りのファウンダー価格)も提供しています。Proは「どう撮られたか」を加えるもので、カメラの動き(静止/パン/ティルト/ズーム/手持ち)の分類、カット割りのリズム(毎分のカット数と緩急)、ジェスチャー・表情・声のピッチ・感情・非発話の音イベントを時系列にした知覚タイムライン、そしてフック分析やペーシング曲線を含むブレイクダウンレポート(--mode watch/creator/full)などを備えます。READMEによれば、2026年7月時点で音楽の状態タイムライン(スコアの盛り上がり・BPM)、混合音でなく分離した声から読む感情、クリック同期の対話的ダッシュボード(--viewer)といった更新も加わっています。すべて手元で計算され、同じMANIFESTにプレーンテキストで書き出されます。まずは無料版で「見せる」を体験し、編集リズムや演出の分析まで踏み込みたくなったらProを検討する、という順序が自然でしょう。本記事はあくまで無料のOSS版を主役に据えており、Proは「無料版の延長線上にこういう深掘りもある」という参考情報として触れています。
ここで一つ整理しておくと、crvは「動画を見て理解する」ことのうち、無料版が担うのは知覚の入口——何が映り、何が語られているか——です。動画の情報の多くは確かにこの層にあり、要約・引用・検索といった用途なら無料版で十分に足ります。一方で、ショート動画の演出を分解したい、なぜそのフックが効くのかを言語化したい、といった「作り手目線」の分析になると、カメラワークやペーシングという別の層が必要になる。無料版とProの線引きは、この「何が映っているか」と「どう撮られているか」の境界にきれいに沿っています。自分の目的がどちらの層にあるかを見極めれば、迷わず選べるはずです。
このツールが向くのは、次のような人です。
・どのLLMでも動画を扱いたい人:Claudeに限らず、ChatGPTやGeminiにも同じ素材を貼って使い回せる
・プライバシーを重視する人:処理がローカル完結で、社外に出せない録画も安心して分析できる
・トークンコストを抑えたい人:重複除去で「意味のあるフレーム」だけに絞れる
・動画を知識ベースに取り込みたい人:--why で観点を絞り、--kb でノート化して蓄積できる
一方で、Claude Codeの中でコマンド一発で完結させたいなら、スキルとして手軽に使える claude-video のほうが向く場面もあります。ここは好みと用途で選べば十分です。両者は「AIが動画を見られない」という同じ課題への異なる回答であり、片方が要らなくなるような関係ではありません。むしろ、Claude Code中心の日常作業は claude-video、複数モデルを横断する分析や社外に出せない録画は claude-real-video、というように使い分けると、それぞれの強みが活きます。
最後に、crvを試すハードルの低さも強調しておきましょう。重い機械学習モデルのダウンロードは不要で、必要なのはpythonとffmpegだけ。手元の短い動画に対して crv <URL> を一度走らせ、--viewer で結果を眺めてみれば、「AIに動画を見せる」という体験がどういうものかがすぐに掴めます。そこから --why で観点を絞ったり、--kb でノート化したりと、自分のワークフローに馴染ませていけばよいのです。動画という「これまで検索も引用もできなかった情報源」が、テキストやコードと同じように扱えるようになる——その変化を、まずは一本の動画で実感してみてください。
READMEは「権利のあるコンテンツだけをダウンロードすること」を明記しています。ログイン必須の動画に対しては、自分の正当なアクセス権の範囲で --cookies にNetscape形式のクッキーファイルを渡せますが、認証情報をリポジトリに含めないよう注意が必要です。また、再実行は出力ディレクトリを上書きします。ツール自体は中立的な素材化パイプラインですが、対象コンテンツの扱いは利用者の責任範囲です。
claude-real-video(crv)は、「AIに動画を見せる」を、固定間隔ではなくシーン検出+スライディングウィンドウ重複除去で実現するローカル・パイプラインです。少なく・意味のあるフレームだけをどのLLMにも貼れる形(frames+transcript+MANIFEST)で出力し、`--keep-audio` なら音声そのものも聞かせられます。処理がローカル完結でプライバシーに配慮している点も、実務では大きな強み。Claude Codeネイティブの claude-video とは補完関係にあり、「どのLLMでも・手元で・安く」動画を素材化したいなら、crvが有力な選択肢です。
まとめ
本記事では、どのLLMにも動画を「実際に見せる」OSS、claude-real-video(crv)を、公式リポジトリの一次情報にもとづいて解説しました。
その核心は、「フレームは増やすより絞る」という逆説にあります。固定間隔サンプリングが静止画を重複送信し、速いカットを取りこぼすのに対し、crvはシーン変化でフレームを選び、スライディングウィンドウで重複を除去し、密度フロアで取りこぼしを防ぐ。結果として、少なく・意味のあるフレームだけをLLMに渡せます。重複判定に知覚ハッシュではなく実ピクセル差を使う、字幕があれば再文字起こしせず優先する、といった細部の判断もいちいち理にかなっており、「動画をAIに渡す」という一点に真剣に向き合って作られたツールだと感じられます。しかも処理はすべてローカルで完結し、外に出るのは自分で貼り付けた素材だけ。--grid でコンタクトシートにまとめ、--why で観点を絞り、--kb でノート化し、--keep-audio で音声まで渡す——動画を「どのLLMでも読める知識」に変えるための道具立てが、ひととおりそろっています。同じ課題に別アプローチで挑む claude-video と読み比べれば、自分の用途にどちらが合うかが見えてくるはずです。
参照ソース
・claude-real-video(HUANGCHIHHUNGLeo 公式リポジトリ) — 本記事が解説した一次情報。仕組み・オプション・比較表のすべて
・claude-real-video(PyPI) — pipパッケージ。バージョンと導入手順
・Hacker News(claude-real-video スレッド) — フロントページ掲載時の議論