news 2026/10/30 6:51:07

字幕只是开始:claude-real-video的--text-anchors文字锚点,让LLM看懂屏幕上的每一行字

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
字幕只是开始:claude-real-video的--text-anchors文字锚点,让LLM看懂屏幕上的每一行字

字幕只是开始:claude-real-video的--text-anchors文字锚点,让LLM看懂屏幕上的每一行字

【免费下载链接】claude-real-videoLet Claude (or any LLM) actually watch a video — scene-aware, deduplicated frames + transcript, from a URL or local file. Runs locally, MIT.项目地址: https://gitcode.com/gh_mirrors/cl/claude-real-video

claude-real-video 是一个让 LLM 真正"看懂"视频的开源工具:它从 URL 或本地文件里提取场景关键帧 + 带时间戳的字幕文本,全程本地运行。而它的--text-anchors(文字锚点)参数更进一步——在每条字幕出现的时间点强制抓取一帧画面,让屏幕上逐行变化的文字、图表、文字卡片,都能被模型亲眼看到,而不是只听到"嘴上说的那部分"。

为什么字幕只是开始?

大多数"让 AI 看视频"的方案,本质是读转录文本。但有一类内容,含义变化得比画面还快:

  • 📺录屏教程:画面静止一分钟,代码却改了十行
  • 🎓课程讲座:幻灯片不动,讲师讲了三个知识点
  • 📱文字卡片短视频:黑底白字,一句一句话术在切换

crv 的核心逻辑是"检测到场景变化才取帧"。画面不动,就取不到帧——于是屏幕上信息最密集的时刻,反而被漏掉了。

上面这张图是一个中文录屏的默认分析结果:crv 只保留了 6 帧。演示中最信息量大的"五条要点完整渲染"的画面,其实被漏掉了——这正是场景检测的盲区。

--text-anchors 是如何工作的?

文字锚点的设计思路很直接:字幕的时间戳,就是文字在屏幕上"换装"的时刻。

第 1 步:找到视频自带的字幕时间戳

crv 按固定顺序找字幕:

  1. 本地文件旁边的.srt/.vtt副字幕文件(sidecar)
  2. 视频内嵌的字幕轨道(比如 YouTube 下载下来的软字幕)

对应实现在_subtitle_cue_times:拿到每一条字幕的起始秒数;如果视频根本没有字幕,就返回空列表,安静跳过。

第 2 步:把时间戳换算成"必须抓取的帧"

_text_anchor_frames把每条字幕的起始时间换算成帧序号,并有一个保护机制:每秒最多强制一帧。密集字幕(卡拉OK式逐字、快速对白)不会把抽取过程拖垮。

这些强制帧会合进 crv 原有的同一次 ffmpeg 抽取路径里(extract_frames),时间顺序、去重逻辑都不受影响。换句话说:

  • 场景检测照旧跑,--scene、去重阈值一律不变
  • 文字锚点只是"额外保底":讲到哪句,就保证有一帧对着那句话
  • 与--adaptive(慢变化内容)兼容,两者可以同时开

第 3 步:窗口模式下依然落在正确位置

如果你用--from/--to只分析视频的一部分,锚点的帧序号会自动重新对齐到窗口起点。这一点有专门的回归测试守护:tests/test_text_anchors.py。

三步上手:最快配置方法

① 安装(需要 ffmpeg,macOS 用brew install ffmpeg):

pip install "claude-real-video[whisper]"

② 准备字幕:本地视频放一个同名的.srt或.vtt在旁边即可,例如lecture.mp4+lecture.srt;软字幕则内嵌在视频里。

③ 运行:

crv "https://www.youtube.com/watch?v=..." --text-anchors # 或本地文件 crv lecture.mp4 --text-anchors --frame-width 1600

💡 文字本身就是信息量时,记得配合--frame-width 1600——默认 640px 的帧能"找到那一刻",但看不清小字。分析完成后,把crv-out/文件夹(帧 +MANIFEST.txt+transcript.txt)丢给 Claude / ChatGPT / Gemini 提问即可,所有帧都带源视频时间戳。

真实效果与诚实的边界

crv 维护者跑过一套基准测试(见 benchmark/benchmark.md),文字类内容正是默认采样的失分点:

场景默认采样结论
中文录屏(58 秒)6 帧,漏掉完整要点画面文字填入固定版式,去重器看不见
快切文字卡片 reel3 帧,漏掉约半数话术卡片--text-anchors正是为此设计的参数

同时要知道它的诚实边界(README 原文):

  • ⚠️ 烧录在画面像素里的字幕检测不到——它是靠字幕时间戳工作的,不是 OCR
  • ⚠️ 视频必须有副字幕文件或内嵌字幕轨道,否则参数静默不生效
  • ✅ 不改变场景检测行为,最多每秒多一帧,token 开销可控

相关源码与文档

  • 参数定义:src/claude_real_video/cli.py
  • 核心实现(锚点换算 + 字幕读取 + 抽取合并):src/claude_real_video/core.py
  • 行为测试:tests/test_text_anchors.py
  • 完整参数表与安装指南:README.md
  • 给 Agent 的技能说明:skills/claude-real-video-for-agents/SKILL.md

小结

想让 LLM 看懂视频,光有"它说了什么"还不够——还得有"它画出了什么"。--text-anchors用字幕时间戳给帧抽取上了一道保险:每一句话,都有一帧对应的画面。一个开关,成本极低,却让录屏、讲座、文字卡这类内容的理解质量发生质变。🎬

【免费下载链接】claude-real-videoLet Claude (or any LLM) actually watch a video — scene-aware, deduplicated frames + transcript, from a URL or local file. Runs locally, MIT.项目地址: https://gitcode.com/gh_mirrors/cl/claude-real-video

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/30 6:50:59

context-mode:从ThreadLocal事故到请求级上下文隔离的工程实践

1. 一次线上事故,让我开始重新审视“context”这件事先说个真实经历。去年年中,我们团队维护的一个中台服务突然出现用户数据串号投诉。现象非常诡异:用户A登录后,在某些接口里能看到用户B的订单信息,概率不高&#xf…

作者头像 李华
网站建设 2026/10/18 2:14:55

当你的论文被AIGC检测标红,趣博思AI让你先别慌

一个几乎每个人都会遇到的场景 论文提交前夜,你想起学校要求附AIGC检测报告。你打开检测系统,上传文档,等待三十秒。结果出来,第一章疑似度62%。 你的心跳漏了一拍。 你开始回想:第一章我确实用了AI帮我理框架&#xf…

作者头像 李华
网站建设 2026/10/20 4:00:54

MCP 核心宝典 | 2025 最新最全!经典MCP案例实操讲解!必读!

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华