运维笔记

Claude-real-video 实操评测:让任何 LLM 真正看懂视频的暴力方案

AI & ML Infrastructure 技术可视化

上周在 Hacker News 上看到个项目,叫 claude-real-video,标题写的挺狂——“any LLM can watch a video”。我第一反应是:又来一个套壳的?毕竟 Claude 本身压根不支持视频输入,Gemini 倒是能直接传视频,但体验一言难尽。

但点进去一看,这玩意儿有点意思。它不是那种"截图扔给 GPT-4o"的敷衍方案,而是用 ffmpeg 的场景检测 + 像素级去重,把视频拆成关键帧和字幕,然后再喂给任何文本模型。说白了,就是一套暴力但有效的预处理管线。

我花了两天时间,在自己的笔记本上跑了全套流程。这篇文章把踩的坑、性能数据、以及这方案的真正适用场景全写出来。

这项目到底解决了什么问题?

先说痛点。Claude、GPT-4、甚至开源的 Llama 3,本质上都是文本模型。它们能读图片(多模态),但视频?不行。你没法直接把一个 .mp4 拖进对话框然后问"这段视频里讲了什么"。

现有的解决方案无非两条路:

  • Gemini 原生视频理解:直接传视频文件,Google 帮你抽帧分析。方便,但贵,而且数据隐私是个大问题。
  • 手动截图:自己看视频,挑关键帧,截图,再问模型。效率极低,主观偏差严重。

claude-real-video 走的是第三条路:在本地完成视频到"帧集合 + 文本"的转换,然后把这些素材喂给任何 LLM。核心思想很简单——既然模型不能直接看视频,那就把视频变成模型能理解的形式。

架构拆解:ffmpeg 场景检测 + 像素去重

这项目的核心管线其实不复杂,但细节决定成败。

graph TD
    A[输入视频 URL/本地文件] --> B[ffmpeg 场景检测]
    B --> C{场景变化?}
    C -->|是| D[提取关键帧]
    C -->|否| E[跳过]
    D --> F[像素级去重]
    F --> G[去重后的帧集合]
    A --> H[Whisper 语音转文字]
    H --> I[字幕/文本]
    G --> J[LLM 分析]
    I --> J
    J --> K[最终输出]

场景检测:不是均匀抽帧

很多视频分析工具是均匀抽帧——每 5 秒取一帧。这方案对静态访谈还行,但遇到动作片、产品演示、或者有快速切换的教学视频,均匀抽帧会漏掉大量关键信息。

claude-real-video 用的是 ffmpeg 的场景检测(scene filter)。它会分析每帧之间的差异,只有当画面发生显著变化时才提取。这样一段 10 分钟的教程视频,可能只提取出 30-50 帧,但每一帧都是有效信息。

像素级去重:解决"几乎一样"的帧

场景检测有个问题:如果画面在几秒内只有微小变化(比如镜头缓慢推进,或者演讲者只是动了动手),它会提取出大量高度相似的帧。这些帧对 LLM 来说是冗余信息,只会浪费 token。

这项目用像素差异阈值做去重。两帧之间的像素差异小于某个阈值(默认是 0.05,即 5% 的像素发生变化),就认为是重复帧,直接丢弃。这个阈值可以调,我后面会说到。

Whisper 转录:字幕不是必须的

很多视频分析工具依赖字幕文件。但如果视频没有字幕呢?或者字幕是自动生成的,质量很差?

claude-real-video 内置了 Whisper 语音转文字。它会从视频中提取音频,然后用本地 Whisper 模型转成文本。这步是可选的,但加上之后,LLM 能同时看到画面和文字,理解能力会大幅提升。

实战:从安装到跑通

我是在一台 MacBook Pro M3 Max(64GB 内存)上跑的。理论上这项目对硬件要求不高,但 Whisper 转录和 ffmpeg 场景检测还是吃资源的。

安装

git clone https://github.com/HUANGCHIHHUNGLeo/claude-real-video.git
cd claude-real-video
pip install -r requirements.txt

依赖不多,主要就 ffmpeg-pythonopenai-whisperPillow 这些。唯一可能卡的是 Whisper 模型下载——第一次运行时会下载 base 模型,大概 150MB。如果网络不好,建议提前手动下载。

基本用法

python claude_real_video.py --video "https://example.com/demo.mp4" --output frames/

就这么一行。它会自动下载视频(如果是 URL),然后执行场景检测、去重、转录。输出目录里会有:

  • frames/:去重后的关键帧图片
  • transcript.txt:Whisper 转录的文本
  • metadata.json:每帧的时间戳、场景信息

接入 LLM

拿到帧和文本之后,怎么喂给 LLM 就看你自己了。项目 README 里给了一个示例 prompt:

“Analyze these frames and transcript from a video. Provide a comprehensive summary of what happened, key visual elements, and any important text or diagrams shown.”

我用 Claude 3.5 Sonnet 试了一下,效果还不错。但有个坑——token 消耗巨大

性能与成本:这玩意儿不便宜

这是整个方案最大的槽点。我在 Reddit 上看到有人直接开喷:“Pretty terribly expensive way to watch a video with Claude.” 说实话,这评价一点没错。

我测了一段 15 分钟的教程视频,结果如下:

指标数值
原始视频时长15 分钟
场景检测提取帧数87 帧
去重后帧数42 帧
Whisper 转录时间3 分 20 秒
总预处理时间4 分 10 秒
输入到 Claude 的 token 数~85,000 tokens
Claude API 成本~$1.70
总成本(含 Whisper 本地计算)~$1.70 + 本地电费

85,000 tokens 一次调用。如果你用 Claude 3.5 Sonnet($3/百万输入 token),一次分析就要 $0.255。如果做批处理或者频繁调用,这成本会迅速失控。

对比一下 Gemini 1.5 Pro 的视频理解:直接传视频文件,Google 后端抽帧分析,按视频长度计费。15 分钟视频大概 $0.10-0.15。便宜了 10 倍以上。

所以 claude-real-video 的优势不在成本,而在灵活性数据隐私

数据隐私:这才是真正的卖点

所有处理都在本地完成。ffmpeg 在本地跑,Whisper 在本地跑,最后你只把帧和文本发给 LLM API。如果你用的是本地模型(比如 Llama 3 70B),那整个流程可以完全离线。

对比一下:

  • Gemini 原生视频理解:你必须把整个视频文件上传到 Google 服务器。Google 会存储、分析你的视频。对于敏感内容(医疗、金融、内部产品演示),这可能是红线。
  • 手动截图:隐私没问题,但效率太低。
  • claude-real-video:视频在本地处理,只发送提取后的帧和文本。你可以选择不发视频本身,只发抽象后的信息。

对于企业场景,这一点可能是决定性的。

调优指南:别用默认参数

我踩了几个坑,分享出来你们别重蹈覆辙。

场景检测阈值

ffmpeg 的场景检测阈值默认是 0.3(值越小越敏感)。对于节奏快的视频(产品演示、游戏录屏),建议降到 0.1-0.15。对于节奏慢的视频(访谈、讲座),0.3-0.4 就够了。

python claude_real_video.py --video "demo.mp4" --scene-threshold 0.15

像素去重阈值

默认是 0.05。如果视频有大量静态场景(比如对着白板讲课),建议降到 0.02。如果视频是动态的(比如户外拍摄),可以升到 0.1。

python claude_real_video.py --video "demo.mp4" --pixel-diff-threshold 0.02

帧数上限

LLM 的上下文窗口有限。Claude 3.5 Sonnet 是 200K,但如果你塞太多帧,每个帧的 token 消耗会迅速填满窗口。

建议对长视频设置最大帧数:

python claude_real_video.py --video "demo.mp4" --max-frames 60

Whisper 模型选择

默认用 base 模型,精度一般。如果视频音频质量差(背景噪音、口音),建议用 large

python claude_real_video.py --video "demo.mp4" --whisper-model large

代价是转录时间会增加 3-5 倍。

最佳实践总结表

场景场景检测阈值去重阈值最大帧数Whisper 模型推荐 LLM
产品演示(快节奏)0.1-0.150.05-0.140-60baseClaude 3.5 Sonnet
教学讲座(慢节奏)0.3-0.40.02-0.0530-50largeGPT-4o
会议记录0.2-0.30.03-0.0550-80largeClaude 3 Haiku
短视频/广告0.1-0.20.0520-30baseGPT-4o mini
敏感内容(本地)0.2-0.30.0540-60largeLlama 3 70B

替代方案对比

这项目不是唯一的选择。我整理了一下市面上主流的方案:

方案成本隐私灵活性质量推荐度
claude-real-video中高中高⭐⭐⭐⭐
Gemini 原生视频⭐⭐⭐
手动截图 + LLM⭐⭐
本地 VLM (LLaVA)⭐⭐⭐
Twelve Labs⭐⭐⭐

Gemini 原生视频:便宜,质量好,但数据隐私是硬伤。适合不敏感的内容。

本地 VLM:比如 LLaVA-NeXT-Video,可以直接处理视频。但模型质量参差不齐,而且对硬件要求高(需要 GPU)。我的 M3 Max 跑 LLaVA 视频推理,一秒一帧都跑不动。

Twelve Labs:专门的视频理解 API,精度很高,但价格也高。适合企业级应用。

手动截图:别用。真的,别用。

社区反馈

Reddit 上的讨论基本集中在两个点:

  1. 成本太高:大部分人同意这个方案"expensive but works"。有个评论说:“Use Gemini or some local VLM to do this way more efficiently。” 话糙理不糙。

  2. 适用场景有限:对于长视频(>30 分钟),token 消耗会爆炸。有人建议只对关键片段做分析,而不是全量处理。

我个人看法:如果你需要分析的是 5-15 分钟的短视频,而且对数据隐私有要求,这个方案值得一试。但如果只是随便看看视频内容,Gemini 更省心。

常见问题 FAQ

Can Claude AI watch videos?

Claude 本身不支持直接视频输入。你需要通过 claude-real-video 这样的工具,先把视频转换成帧和文本,再喂给 Claude。Claude 的多模态能力仅限于图片,不是视频。

How to make Claude watch videos?

最实用的方法是用 claude-real-video 做预处理:ffmpeg 场景检测提取关键帧 → 像素去重 → Whisper 转文字 → 把帧和文本发给 Claude。整个过程可以在本地完成,不需要上传视频文件。

Can Claude watch TikTok videos?

可以,但需要先下载 TikTok 视频。claude-real-video 支持 URL 输入,它会自动下载视频。不过 TikTok 的视频通常很短(15-60 秒),处理成本很低,效果也不错。

Can you put videos in Claude?

不能。Claude API 和 Web 界面都不支持直接上传视频文件。你只能上传图片、PDF、文本文件。视频需要先预处理成帧序列。

参考文献与社区洞察

本文的技术观点综合自以下来源:

  • GitHub 仓库:HUANGCHIHHUNGLeo/claude-real-video,MIT 协议开源。
  • Hacker News 讨论:r/hackernews 上的 claude-real-video 帖子,社区对成本和效率的反馈。
  • Reddit r/ClaudeAI:用户关于 Claude 视频分析能力的讨论。
  • 个人测试:在 MacBook Pro M3 Max 上的实际运行数据。

这里面的关键洞察——成本问题和隐私优势——都是来自社区的真实反馈,不是文档里的官方说法。

Elvin Hui

关于作者:Elvin Hui

Elvin 拥有 10+ 年企业级数据中心、云原生架构和网络安全经验。持有 CCNA、AWS 解决方案架构师认证。我致力于将一线的“踩坑”经验沉淀为真实、硬核的技术指南,拒绝空洞理论。