不是轉檔工具, 是給 LLM 的一雙眼睛。
大部分 AI 工具其實沒有真的「看」影片。把 YouTube 連結貼給 ChatGPT,它讀的是逐字稿,不是畫面。Claude 直接不收影片檔案。連原生支援影片的 Gemini,也得先把整支片傳上 Google 的伺服器,並以固定的 1fps 頻率取樣——快速剪接的鏡頭照樣會漏看。
claude-real-video(CLI 指令 crv)換一種做法,而且全部在本機執行:給它一個網址或本機檔案,它抓的是真正發生場景變化的畫面,而不是固定頻率的配額;丟掉像素幾乎沒變的重複幀;轉錄音軌;最後打包成一份任何 LLM 都能讀的資料夾——關鍵幀 JPG、逐字稿、外加一份 MANIFEST.txt 摘要。
作者在 Hacker News 上線時說得直白:「我受夠了沒有一個 LLM 真的『看得到』影片——Claude 不收影片檔、ChatGPT 只讀逐字稿、Gemini 固定 1fps 取樣。」工具本身只做本機端的抽幀跟去重,決定要不要把這些幀貼給哪個 LLM,是你自己的選擇。
Fetch
Extract
Dedup
Text
Audio
Manifest
Same 58-second clip: fixed 1 fps sampling = 58 frames. crv keeps the 26 that actually differ — and --grid packs them into 3 contact sheets. Fewer tokens, nothing missed.
一行 pip install, 加一支 ffmpeg。
核心套件是純 Python,pip 直接裝。語音轉錄要另外加 [whisper] extra,而且 ffmpeg / ffprobe 不能用 pip 裝,要用系統套件管理器另外裝一次。Python 需要 3.10 以上,macOS、Windows、Linux 都支援。
# 只要關鍵幀 + 去重,不需要語音轉錄
pip install claude-real-video
# 加上 Whisper 語音轉錄
pip install "claude-real-video[whisper]"| 作業系統 | 安裝 ffmpeg 的指令 |
|---|---|
| macOS | brew install ffmpeg |
| Linux | sudo apt install ffmpeg(或你發行版的套件管理器) |
| Windows | winget install Gyan.FFmpeg,或 choco install ffmpeg,或到 gyan.dev 下載後把 bin\ 加進 PATH |
裝進 Claude Code,自己主動去看影片
如果你平常用 Claude Code,可以把它裝成技能——之後貼一個影片連結進對話,Claude 會自己判斷要不要呼叫 crv 去抽幀分析,不用你手動下指令。
pip install claude-real-video
mkdir -p ~/.claude/skills && cp -r skills/claude-real-video ~/.claude/skills/每個旗標對應一個處理階段。
crv 的旗標不是隨意堆出來的選項,而是精準對應 Fetch → Extract → Dedup → Text → Audio → Manifest 六個階段。下表依階段分組。不裝 [whisper]、什麼旗標都不加,直接 crv <url> 也能跑——多數情況只需要記得 --grid 跟 --why 這兩個。
Fetch · 01
<url-or-path>
影片來源
YouTube、Instagram、TikTok 連結交給 yt-dlp;本機檔案路徑則直接複製處理。
Fetch · 02
--cookies
登入內容存取
傳入 Netscape 格式的 cookie 檔,讀取自己有權限存取的登入限定影片。
Fetch · 03
--cookies-from-browser
瀏覽器登入狀態
直接讀 chrome / safari / firefox / edge 現有的登入 session,不用手動匯出 cookie 檔。
Extract · 04
--scene
場景敏感度
預設 0.30。數值越低,判定為「場景改變」的門檻越鬆,抓到的幀就越多。
Extract · 05
--fps-floor
密度下限
預設每 1 秒至少保留一幀,確保靜態畫面裡緩慢的文字/圖表變化不會被整段跳過。
Extract · 06
--max-frames
幀數硬上限
預設 150。長影片的安全閥,避免一次吐出上千張圖塞爆 LLM 的 context。
Dedup · 07
--dedup-threshold
去重門檻
預設 8%。像素變化低於這個百分比就視為重複幀丟棄,數值越高、保留的幀越少。
Dedup · 08
--dedup-window
去重比對視窗
預設比對前 4 張已保留的幀。A-B-A 式的訪談鏡頭切回去,不會把同一顆鏡頭再送一次。
Dedup · 09
--grid
3×3 連環圖
把連續關鍵幀打包成九宮格,模型讀到的是有先後順序的畫面,而不是散落的靜態圖,張數再砍約 9 倍。
Text · 10
--lang / --whisper-model
語音轉錄
影片本身有字幕就優先用字幕,沒有才跑 Whisper;可選 tiny 到 large,拿速度換準確度。
Text · 11
--no-transcribe
略過轉錄
純看畫面、不需要逐字稿時關掉轉錄,省下 Whisper 這一段處理時間。
Audio · 12
--keep-audio
完整音軌
另存一份 audio.m4a,給聽得懂聲音的模型(GPT-4o、Gemini)取用配樂與語氣,逐字稿只有文字沒有聲音。
Manifest · 13
--why
分析焦點
寫進 MANIFEST.txt,告訴模型你為什麼在看這支片,分析從通用摘要變成有目的的觀察。
Manifest · 14
--kb
知識庫沉澱
把分析結果存成帶日期的 Markdown,寫進你自己的筆記資料夾,不會跟著 crv-out 一起被覆蓋掉。
Manifest · 15
--viewer
本機檢視器
產生 viewer.html——影片、關鍵幀網格、逐字稿一次呈現,雙擊開啟,不需要網路或額外安裝。
Manifest · 16
--report
決策視覺化
保留被丟棄的幀到 dropped/,產出 report.html 秀出每一次去留判斷的差異百分比,方便微調參數。
不同影片類型,該搭哪組旗標?
| 你在看哪種影片 | 建議旗標組合 | 為什麼 |
|---|---|---|
| YouTube 教學 / 演講(語音為主) | --lang en --grid | 內容主要靠聽的,畫面變化少,--grid 把幀數再壓低一截 |
| 短影音 / Reels / TikTok(快剪) | --dedup-window 6 --grid | 快剪常常切回同一顆鏡頭,拉大比對視窗才不會重複送幀 |
| 純畫面分析,不需要逐字稿 | --no-transcribe --report | 省下 Whisper 處理時間,同時能看清楚每一幀的去留判斷 |
| 需要登入才能看的自家內容 | --cookies-from-browser chrome | 直接讀本機瀏覽器的登入狀態,不用手動匯出 cookie 檔 |
上線三天, 被問到最痛的四件事。
作者 cortexosmain 在 Hacker News 上直接發文,同一則討論串(#48766005)裡有支持也有質疑。比起挑好聽的留言,這裡整理四個真正被戳到、而且作者本人有回應的點。
名字有 Claude,但工具跟廠商無關
zitterbewegung 跟 walrus01 都建議拿掉名字裡的「Claude」,理由是這工具本質是通用的影片前處理器。作者當場回應:「Took this — pip install llm-real-video works now, same tool. Kept the original repo name so existing links don't break.」
來源 · HN #48766005 · zitterbewegung、walrus01、cortexosmain
「留在你電腦上」只到抽幀那一步為止
bonoboTP 指出文件裡「stays on your machine」的說法容易誤導:一旦你把抽出來的幀貼給 Claude,幀就會送到 Anthropic。工具本身確實只在本機處理,但之後要不要餵給哪個 LLM,是使用者自己的選擇,不是工具幫你保密。
來源 · HN #48766005 · bonoboTP
關鍵幀不是影片——這是誠實的邊界
octember 的評論很直接:「keyframes are not videos. Motion, object permanence, are not things Claude can infer from a set of images.」一組排好的靜態圖能替代逐字稿加畫面摘要,但推不出動作本身的物理連貫性。
來源 · HN #48766005 · octember
貴不貴,要看你拿哪個模型看
fzysingularity 認為用 Claude 逐幀看影片「terribly expensive」,token 消耗遠高於原生支援影片的 Gemini 或本地 VLM。作者回應:這工具是為「原生看不了影片」的模型而生——Claude、ChatGPT 網頁版、本地模型;Gemini 本身就能原生吃 1fps 影片,沒必要繞這一圈。
來源 · HN #48766005 · fzysingularity、cortexosmain
裝成 Claude Code 技能後, 貼連結就會自己去看。
場景:你把一支 YouTube 產品發表會連結貼進 Claude Code,想知道對方提到的定價策略是什麼。裝好 skills/claude-real-video 後,Claude 會自己判斷要呼叫 crv,而不用你手動打指令。
$ You ›
https://youtu.be/XXXXXXXXXXX 這支發表會,幫我找出他們的定價策略,
結果存到我的筆記資料夾。
claude: Claude ›
我沒辦法直接讀影片檔,先用 crv 把它轉成關鍵幀 + 逐字稿。
> crv "https://youtu.be/XXXXXXXXXXX" -o crv-out --grid \
> --why "find the pricing strategy" --kb ~/notes
ok: crv-out/frames/*.jpg + transcript.txt + MANIFEST.txt
ok: ~/notes/2026-07-06-pricing-strategy.md 已寫入
$ You › (Claude 讀取 MANIFEST.txt 與 grids/)
claude: Claude ›
找到了。在 08:42,投影片切到定價比較表,
逐字稿同時提到「三層訂閱,年繳打八折」。
11:15 又出現一張加購方案的表,逐字稿沒講到細節,
建議直接看 crv-out/frames/frame_0114.jpg 這張近拍。
ok: 已寫入 ~/notes/2026-07-06-pricing-strategy.md,含兩個時間戳截圖引用。
This tool is for everything that can't [ingest video natively] — Claude, ChatGPT web, local models — it turns the video into frames + transcript on your machine so any of them can read it.
這個流程為什麼成立
Claude 本身讀不了影片檔,--why 讓它不是漫無目的地摘要,而是帶著「找定價策略」這個焦點去讀 MANIFEST.txt;--grid 讓它看到的是有先後順序的連環圖,不是一堆散圖;--kb 則讓結果離開 crv-out、進到你自己會再打開的筆記裡。三個旗標分別解決「看什麼、怎麼看、看完存哪」三個各自獨立的問題。
不是影片理解。知道邊界再上路。
從 CLI 玩具, 接進你自己的管線。
crv 不只是一個獨立指令,它也是一支可以直接 import 的 Python 套件,而且從單支影片分析可以往上疊到批次處理、自己的知識庫、甚至完全不碰 LLM 的一般用途。
進階玩法地圖
**1. 用 --report 視覺化調參。**不確定 --scene、--dedup-threshold 該設多少時,加 --report 生成 report.html,對照每一次去留判斷的差異百分比,再回頭微調。
**2. 從 Python 直接呼叫。**不想走 CLI,可以 from claude_real_video import process,拿到 frame_count、transcript_path 這類物件,接進自己的批次腳本或資料管線。
**3. 裝成 Claude Code 技能常駐。**把 skills/claude-real-video 複製進 ~/.claude/skills/ 後,以後貼影片連結進對話,Claude 會自己判斷要不要呼叫 crv,不用每次手動打指令。
**4. 用 --keep-audio 餵給聽得懂聲音的模型。**逐字稿只留下文字,語氣、配樂、環境音都不在裡面——如果下游模型是 GPT-4o 或 Gemini 這類支援音訊輸入的模型,加這個旗標把完整音軌一起送過去。
**5. 需要拍攝手法分析,才考慮付費版。**免費版的邊界很清楚:幀、逐字稿、manifest。鏡頭運動分類、剪輯節奏、聲音情緒時間軸屬於另一個付費產品 crv Pro,不是這支開源 CLI 的範圍。
最該讀的三份延伸閱讀
① README.md——完整旗標表、Why not fixed-interval sampling 的技術對照、Python API 範例。 ② skills/claude-real-video/SKILL.md——Claude Code 技能整合的完整步驟。 ③ Hacker News #48766005——上線討論串,命名爭議、隱私措辭、成本質疑都在這裡,作者本人也有逐條回應。
Hi HN! I built this because I was frustrated that no LLM actually "sees" a video — Claude won't accept video files, ChatGPT reads the transcript only, and Gemini samples at a fixed 1fps (missing fast cuts, over-sampling static slides).