# claude-real-video ─ 让任何大语言模型（LLM）都能观看视频

- 来源：Hacker News 热门（buzzing.cc 中文翻译）
- 作者：cortexosmain
- 发布时间：2026-07-03 12:56
- AIHOT 分数：81
- AIHOT 标记：精选
- AIHOT 链接：https://aihot.virxact.com/items/cmr4hb6x001txsll5jfiiy9u3
- 原文链接：https://github.com/HUANGCHIHHUNGLeo/claude-real-video

## 精选理由

这个工具把视频喂给 LLM 的过程从「固定采样 + 上传云」变成了「场景感知 + 本地去重」，大幅节省 token 且避免隐私泄露，用 Whisper 转录也更完整。是让任何 LLM 真正「看」视频的实用方案。

## AI 摘要

claude-real-video 是一个开源工具，让大语言模型基于视频画面而非字幕进行理解。它通过场景变化检测提取关键帧、滑动窗口去重并转录音频，生成干净的本地文件夹供模型读取。支持 YouTube 链接或本地文件，依赖 ffmpeg 和 Whisper，通过 pip 安装。全部处理在本地完成，不上传云端。

## 正文

claude-real-video

让 Claude —— 或者任意大语言模型 —— 真正看一段视频。

大部分 AI 工具并不能真正“看”视频。你把一个 YouTube 链接粘贴到 ChatGPT 里，它读的是字幕文本，而不是画面。Claude 根本不接受视频文件。即使是原生的 Gemini，能直接读取视频，也得把视频上传到谷歌，并以固定间隔（默认每秒 1 帧）采样帧，因此快速切换的镜头就会漏掉。

claude-real-video 的做法不同，而且是本地运行的：指向一个 URL 或文件，它会提取真正有意义的帧（每次场景切换，而不是固定数量），丢弃近乎重复的帧，转录音频，然后在你自己的电脑上整理出一个干净的文件夹，任何大语言模型都能读取——数据不上传。

crv "https://www.youtube.com/watch?v=..."
# → crv-out/frames/*.jpg + crv-out/transcript.txt + crv-out/MANIFEST.txt

接着把帧加上 `MANIFEST.txt` 拖入 Claude / ChatGPT / Gemini，然后随便提问。

为什么不直接按固定间隔采样帧？

大多数“让大语言模型看视频”的脚本（以及 Gemini 自身的流程）都是按固定间隔抓取帧——比如每秒一帧。这样对静态屏幕录制会过度采样，而对快速切换的剪辑则采样不足。claude-real-video 更聪明：

固定间隔采样 claude-real-video

帧选择 每 N 秒一帧 场景变化检测 + 密度下限

重复镜头（A-B-A 剪切） 每次都重复发送 滑动窗口去重，每个镜头只发送一次

静态幻灯片（10 分钟） 约 600 张近乎相同的帧 压缩为 1 帧（去重）

快速切换剪辑 会漏掉采样间隔之间的帧 捕捉每一次视觉变化

音频 通常被忽略 Whisper 转录，含语言检测

视频去向 通常上传到云端 留在你的机器上

输入方式 通常仅支持本地文件 支持 URL（yt-dlp）或本地文件

你喂给模型的帧更少，但更有意义——上下文成本更低，理解效果更好。

安装

pip install claude-real-video # core (frames + dedup)
pip install "claude-real-video[whisper]" # + audio transcription

系统要求：ffmpeg

ffmpeg / ffprobe 用于帧提取和音频处理，不能通过 pip 安装。请先安装一次：

操作系统 命令

macOS brew install ffmpeg

Linux sudo apt install ffmpeg（或使用你的发行版包管理器）

Windows winget install Gyan.FFmpeg — 或 choco install ffmpeg — 或下载一个构建版本，将其 bin\ 文件夹加入 PATH

确认它已在 PATH 中：

ffmpeg -version

转录使用 whisper CLI（通过 [whisper] 额外选项安装，或 pip install openai-whisper）。Whisper 也依赖 ffmpeg。

支持 macOS、Windows 和 Linux——Python 3.10 以上。

使用方法

# A YouTube / Instagram / TikTok / ... link
crv "https://www.instagram.com/reel/XXXX/"

# A local file, English transcript, output to ./out
crv lecture.mp4 -o out --lang en

# Frames only, no transcription
crv clip.mp4 --no-transcribe

# A login-gated video (your own / authorised use): pass a Netscape cookie file
crv "https://..." --cookies cookies.txt

python -m claude_real_video ... 也可以简写为 crv。

选项

标志 默认值 含义

-o, --out crv-out 输出目录

--scene 0.30 场景切换敏感度（值越低，提取的帧数越多）

--fps-floor 1.0 每 N 秒至少提取一帧

--max-frames 150 总帧数的硬上限

--lang auto Whisper 语言（en, zh, auto, ...）

--dedup-threshold 8 像素变化比例，超过该比例才视为新帧；值越高，帧数越少

--dedup-window 4 与最近保留的 N 帧进行比较——模型已看过的镜头不会在切回后再次出现（1 表示仅与前一帧比较）

--report off 将丢弃的帧保存在 ./dropped 中，并写入 report.html，可视化展示每一帧的保留/丢弃决策

--no-transcribe off 跳过音频转录

--keep-audio off 同时保存完整音轨（audio.m4a），以便音频模型可以收听

--cookies – 用于登录受限源的 Netscape cookie 文件

通过 Python 使用

from claude_real_video import process

r = process("https://youtu.be/...", "out", lang="en")
print(r.frame_count, r.transcript_path)

工作原理

获取（Fetch）——使用 yt-dlp 处理 URL（可选 cookie），或直接复制本地文件。

提取（Extract）——通过一次时序 ffmpeg 选择通道，捕获每个场景切换点，并确保密度下限（每 --fps-floor 秒至少一帧），从而同时覆盖快速剪辑和慢速录屏。

去重（Dedup）——基于真实像素差异（降采样 RGB，而非感知哈希——哈希在纯色和等亮度色相变化时会失效），与最近 --dedup-window 个保留帧构成的滑动窗口进行比较，从而避免 A-B-A 切回镜头向模型重复发送已看过的画面。启用 --report 会生成 report.html，展示每个保留/丢弃决策及其差异百分比，便于调参。

文本（Text）——如果视频已有字幕（本地文件旁挂载的 .srt/.vtt，或内嵌字幕轨道），则直接使用这些字幕作为转录文本——比重新转录更快、更准确。仅在没有字幕时才回退到对音频使用 Whisper（若无声轨则干净跳过）。

音频（可选，--keep-audio）——保存完整原始音轨（audio.m4a：音乐+语音+音效，尽可能无损复制）。转录仅包含文字部分；音频文件则允许支持听力的模型（如 Gemini、GPT-4o 等）实际听到音乐和语调。

清单文件（Manifest）——MANIFEST.txt 汇总所有信息，供模型使用。

因此，模型能够看到（关键帧）、读取（文字记录），并且——使用 --keep-audio 参数——听到（完整音轨）视频内容。文字记录是任何模型都能读取的纯文本；该工具不会将字幕烧录到视频中——烧录是一种呈现选择，并非让视频可被 AI 读取的必要条件。

备注

仅下载你有权访问的内容。--cookies 选项用于你自己的授权访问——切勿在仓库中提交凭证。

重新运行会覆盖输出目录。

许可证

MIT

关于

让 Claude（或任何大语言模型）真正观看视频——具有场景感知、去重帧与文字记录，支持来自 URL 或本地文件。本地运行，采用 MIT 许可证。

资源

自述文件

许可证

MIT 许可证

动态

星标

230 个星标

关注者

0 关注

派生

8 个派生

举报仓库

版本发布

尚未发布任何版本

包

贡献者

语言

Python 100.0%
