☰
在Python中直接调用claude-real-video:process() API参考与自定义视频分析管线
2026/10/8 18:55:55 网站建设 项目流程

在Python中直接调用claude-real-video:process() API参考与自定义视频分析管线

【免费下载链接】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是一个 MIT 协议的开源 Python 工具,让 Claude 或任何 LLM 真正"看懂"视频:场景感知抽帧 + 去重 + Whisper 字幕转录,全部在你本机运行。本文面向 Python 开发者,带你看清它的process()API 每个参数,并教你用它搭出 4 类自定义视频分析管线 🎬

安装与三行代码的最短调用

先装包(推荐带 Whisper 转写能力),并确认系统已装好ffmpeg:

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

核心入口就一个函数——process(),定义在 core.py#L1572-L1581,并从init.py 直接导出:

from claude_real_video import process r = process("lecture.mp4", "out", lang="en", do_transcribe=False) print(r.frame_count, r.transcript_path, r.manifest_path)

传入视频 URL(YouTube/Instagram 等)或本地文件路径,加上输出目录,它会自动完成:下载/复制 → 场景抽帧 → 滑动窗口去重 → 转录 → 写出MANIFEST.txt。命令行crv本身就是对它的薄封装,见 cli.py#L154-L166。

process() 参数速查表

参数默认作用
src/out_dir—视频 URL 或本地路径 / 输出目录
scene0.30场景切换灵敏度(越小抽帧越多)
fps_floor1.0密度保底:每 N 秒至少 1 帧
adaptiveFalse自适应抽帧,捕捉缓慢渐变(慢摇镜头、形变动画)
max_frames按时长自动帧数硬上限
start/endNone只分析指定时间段,支持90、"1:30"等写法
dedup_threshold/dedup_window8/4去重像素变化阈值(%)/ 滑窗大小
do_transcribeTrue设为False跳过音频转录
whisper_model"base"转写模型(tiny~large/turbo)
keep_audioFalse额外保存完整音轨audio.m4a
reportFalse保留被丢弃帧 + 生成可视化report.html
whyNone观看意图,写入MANIFEST.txt引导分析
speakersFalse说话人分离,给每句打[SPEAKER_XX]标签
frame_width640输出帧宽度,小字多时调高

四类自定义视频分析管线

管线一:纯关键帧提取(最快,零模型下载)

不想转录、只要"哪些画面值得看"?do_transcribe=False即可,全程只用 ffmpeg + Pillow,无任何 ML 模型:

r = process("clip.mp4", "out", do_transcribe=False) # 去重后剩下的帧都在 r.frames_dir(out/frames/frame_001.jpg …)

此时它就是一个通用的视频关键帧提取器:场景切换检测 + 去重,适合做素材筛选、内容指纹。

管线二:录屏/小字内容的高清帧

终端、表格、仪表盘这类"意义在小字里"的视频,默认 640px 宽会丢掉细节。调高frame_width再交给多模态 LLM:

r = process("demo.mp4", "out", frame_width=1600, do_transcribe=False)

抽帧逻辑不变,只是每帧保留更多像素——代价是图片 token 成本上升,按需调节。

管线三:慢变化内容用 adaptive 自适应抽帧

2~3 秒的缓慢形变、渐进平移从不触发固定阈值,默认模式会漏掉。adaptive=True改为拿每帧和它前 2 秒的滚动均值比较,"安静环境里的相对变化"也能入选:

r = process("animation-tutorial.mp4", "out", adaptive=True)

管线四:只分析长视频里的一小段

90 分钟会议里只关心 28:00–43:00 的录屏?start/end会让 ffmpeg 直接 seek 而非解码全片,帧预算和字幕也只落在窗口内,而报告的时间戳仍是原片时间码,方便你引用:

r = process("meeting.mp4", "out", start="28:00", end="43:00")

用返回的 Result 接住整条管线

process()返回 Result dataclass,每个字段都是后续管线的"抓手":

字段说明
frame_count/extracted_frames去重后帧数 / 原始抽出帧数
frames_dirframe_XXX.jpg所在目录
frames_json_pathframes.json:每帧的原片时间戳
transcript_pathtranscript.txt(及带时间戳的transcript.json)
manifest_pathMANIFEST.txt:给 LLM 读的分析说明书
audio_pathkeep_audio=True时的完整音轨

frames.json让帧和字幕在同一个时间轴上对齐——你可以自己实现"某句话说的时候画面是什么"的问答逻辑,或把它喂进视频 RAG 管线。MANIFEST.txt里已经写好了给模型的阅读指令(含转录内容的信任边界标记),把整个输出文件夹丢给 Claude/GPT 即可提问。

测试文件 tests/test_smoke.py#L38-L67 演示了完整的端到端用法:生成测试视频 →process()→ 校验frames.json时间戳严格递增,是最好的参考范例。

process() 内部如何做到"场景感知"

了解管线原理有助于你调参(详见 README.md 的 How it works 章节):

  1. 抽取——单次ffmpeg select遍历:所有场景切换帧 + 每fps_floor秒保底一帧,时间顺序天然保持(extract_frames);
  2. 去重——三通道检测对比最近 N 帧滑窗:全局像素差异通道、"静定局部变化"通道(捕捉细笔画、字幕卡、小 UI 更新)、动作通道(捕捉占画面 <1% 的小目标快速运动),A-B-A 切回的镜头不会重复发送(dedup_frames);
  3. 转录——视频自带字幕就直接用(更快更准),否则回退 Whisper;
  4. 清单——汇总为MANIFEST.txt,帧时间戳全程随帧存活。

所以模型拿到的是"更少、更有信息量"的帧——上下文更便宜,理解更到位。

常见问题

process()需要联网吗?处理全程在本地;只有当src是 URL 时才会通过 yt-dlp 下载视频(需要网络和 yt-dlp 已随包安装)。

输出目录非空会怎样?process()默认拒绝向已有分析结果的目录写入(防止两个视频混在一起),重跑同参数请用overwrite=True。

ffmpeg 报错了?帧抽取失败会直接抛RuntimeError并附上 ffmpeg 的原始报错,先确认ffmpeg -version可用。

更多实测数据与参数对比见 benchmark.md,完整选项表见 README.md。

【免费下载链接】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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询