用Skill给Agent装上“眼睛”:视频理解与抽帧转写实战指南
做 Agent 开发的人应该都有过这个念头:模型啥都好,就是好像有点“瞎”。文字、代码、图片都能处理,但你扔给它一个视频,它就愣住了。我最早遇到这个场景,是想让 Agent 帮我整理一套录播课的重点,结果它只能干瞪眼。后来我琢磨着,既然模型有视觉能力,那我能不能把视频拆开,喂给它“看”?这就是我折腾出 claude-video 这个 Skill 的起点。折腾完之后发现,这东西不只是能处理录播课,短视频、发布会回放、产品演示视频,甚至监控录像,都能派上用场。这篇文章就把我整个实现过程、踩过的坑、以及一些好用的技巧全部分享出来,希望对正在搞 Agent 开发或者想给自己的 Agent 加点“感知能力”的朋友有实际帮助。
1. 这个 Skill 解决的是什么问题
1.1 Agent 为什么天生看不了视频
先说清楚一个基础事实:目前主流的多模态大模型,确实能处理图像,但视频对它们来说是个很尴尬的输入格式。视频文件本身体积大、编码复杂,模型没法像读文本那样直接吞进去。即便某些 API 支持视频输入,要么有严格的时长限制,要么成本高得吓人,要么只抽取了极少的关键帧,信息丢失非常严重。
我实测过一些号称支持视频理解的接口,本质上也是后端帮你抽帧,但抽帧策略非常粗糙,经常是每隔几秒取一帧,遇到快速运动的画面,核心信息早就过去了,结果就是模型答非所问。而 Agent 本身是一个执行框架,它的强项是规划任务、调用工具、推理决策,而不是直接处理视频这种非结构化数据。所以你让 Agent“看视频”,它其实不知道该从何下手。
claude-video 的思路很简单,就是把“看视频”这件事,从模型能力问题,变成工程问题。用工具把视频拆解成模型擅长的模态,比如图像、文本、音频转写文本,然后再交给 Agent 去分析和总结。这样一来,Agent 不需要天生会处理视频,只要会调用 Skill,它就能完成“看视频”这个任务。
提示:核心思路就是“不做超能力,只做转换器”。把视频变成模型能理解的东西,Agent 自然就能处理了。
1.2 Skill 机制与“给 Agent 装技能”的底层逻辑
在深入之前,得先把 Skill 这个东西讲明白。在 Agent 的生态里,Skill 可以理解成一个可复用的能力模块,它不是一个独立的 Agent,而是给 Agent 用的“外挂工具箱”。一个 Skill 通常包含三个部分:触发条件说明、执行脚本或工具、输出格式约定。
为什么我建议用 Skill 封装,而不是直接写死在 Agent 代码里?因为 Skill 的设计哲学是职责单一和即插即用。你可以在一个 Agent 里挂多个 Skill,视频分析、文档总结、网页抓取各干各的,互不干扰。Agent 拿到任务后,会根据任务描述自动选择合适的 Skill 来执行。这个模式特别适合现在主流的 Agent 框架,比如 Claude Code、Codex、OpenCode 这类工具链里的 Skill 体系,原理都是相通的。
claude-video 这个 Skill 的设计目标非常聚焦:输入一个本地视频路径,输出一份结构化的视频分析报告。Agent 拿到这个报告之后,就能基于它做各种后续任务,比如写总结、提炼要点、回答具体问题。整个过程对 Agent 来说,就是“调一个函数,拿到一份文档”这么简单。
2. 核心实现原理:视频是怎么被“看懂”的
2.1 视频拆解:抽帧是最稳的起点
要让模型“看懂”视频,我试过好几条路子,最后验证下来,最稳的还是抽帧。视频本质上是一连串的静态图像按时间顺序播放,人眼看起来是连续的,但模型不需要这种连续性,它只需要足够多的关键画面就能理解内容。
抽帧的关键决策点是“怎么抽”。我初期试过均匀抽帧,直接指定数量,比如一个 10 分钟的视频抽 20 帧,每 30 秒取一帧。这种做法简单,但问题很大。如果视频里有快速变化的画面,比如产品演示中的操作步骤、教学视频里的板书切换,30 秒一帧完全不够用,关键信息直接漏掉。后来我改用基于场景切换的抽帧策略,通过检测画面的亮度、色彩、边缘特征变化,找到视频中画面发生剧烈变化的瞬间,在这些节点上抽帧。这样既能保证关键画面不丢,又能避免连续相似帧造成的信息冗余,效果好得多。
在具体实现上,我用的是 ffmpeg 的
select
滤镜配合
scene
参数。这个参数检测画面的变化程度,超过阈值就认为是场景切换,输出该帧。阈值调得太低会抽出大量相似帧,调得太高又会漏掉重要画面,我最终定在 0.3 左右,对大多数视频效果都不错。抽完帧之后,我会用
scale
把帧图统一缩放到模型能接受的尺寸,避免过大的图片拖慢处理速度,然后按时间顺序编号保存。
2.2 多模态识别的两条路线
抽帧只是第一步,拿到了图像序列后,需要让模型真正“看”这些图。这里有两条路线可选。
第一条路线,也是最直接的,就是把抽到的帧图直接交给多模态大模型,让模型针对每一帧输出文字描述。这种方式的好处是,模型能看到真实的画面信息,比如 PPT 上的文字、产品的实物外观、人物的表情动作,视觉还原度最高。缺点是逐帧调用成本较高,而且如果一帧图里信息量很大,模型的描述可能会漏掉细节。
第二条路线是结合 OCR 和视频中的字幕轨道。很多视频,尤其是教程类和会议类,都有清晰的字幕或讲解词,这些文本信息其实是理解视频内容的捷径。我通常的做法是:先用 OCR 工具识别视频画面中的文字,同时用 ffmpeg 提取视频的字幕轨,如果视频没有字幕轨,就用 ASR(自动语音识别)工具把音频转写成文本。文本信息非常密集,模型处理起来又快又准。
在实际的 Skill 设计里,我两条路线都会走。先提取文本级信息,让模型对整个视频的内容框架有个基本认知,再结合关键帧图像补充视觉细节,最后将两份信息合并输出。这样既保证了内容的完整性,又控制了成本,两条腿走路的稳定性远高于单条路线。
2.3 字幕与音频:被忽视的信息富矿
很多人在做视频理解的时候,会下意识地只关注图像,这其实是捡了芝麻丢了西瓜。我做了几个测试视频的分析对比,发现字幕和音频转写文本的信息密度,远远高于抽帧图片。原因很简单,视频里的语言信息往往是经过精心组织的,像录播课、讲解视频、会议录像,核心内容几乎全部在语言里,画面反而只是辅助。
所以我在 Skill 里把音频转写放在了一个非常靠前的位置。技术上用的是 ffmpeg 提取音频轨,然后调用 ASR 服务把音频转成带时间戳的文本。转写完成后,会生成一个类似“对话记录”的文本文件,每一条都包含开始时间、结束时间和说话内容。这份文本文件对 Agent 来说,就是一份结构清晰的视频内容索引,后续的所有分析都能基于它展开。
有个细节值得提一下,就是不同说话人的区分。如果视频是多人对话,转写工具通常能区分不同的说话人,生成类似“说话人 0”“说话人 1”这样的标签。有了这个标签,Agent 就能做更精细的分析,比如统计每个说话人的发言时长、提炼每个人的核心观点,这在会议纪要场景下非常有用。
2.4 整条流水线怎么串起来
理解了单点技术之后,整条流水线的设计就水到渠成了。我把 Skill 的内部流程设计成五个阶段:任务解析、媒体拆解、信息抽取、语义理解、报告生成。
任务解析阶段,Agent 会读取用户的输入,判断视频文件的路径、时长、以及用户希望分析的重点,比如“总结要点”还是“找某个片段”。媒体拆解阶段,调用 ffmpeg 完成抽帧、音频提取、字幕提取三个任务。信息抽取阶段,分别处理帧图和音频转写文本,生成多个中间文件。语义理解阶段,模型把中间文件聚合成一个整体的理解,这里通常会分几步走,先分别总结视觉信息和语言信息,再做信息融合。报告生成阶段,将理解结果按照预设的模板输出成结构化报告。
整个流程设计成一个链式结构,上一个步骤的输出是下一个步骤的输入。这样做的好处是每一步都可以单独替换或者优化,比如你有更好的抽帧算法,只替换媒体拆解这一层就行了,完全不需要动其他部分。
3. 实操过程与核心环节实现
3.1 工具选型与安装清单
先给出我实际使用的工具清单,都是开源或者免费的工具,没有特殊环境要求,普通开发机就能跑。
- ffmpeg:版本 4.4 以上,负责视频解码、抽帧、音频提取。安装方式不展开说了,Windows、macOS、Linux 都有现成的包。
- Python 3.9+:用于编写 Skill 的执行脚本,主要调用 ffmpeg 和后续的模型 API。
- faster-whisper:开源 ASR 工具,基于 Whisper 的优化版本,CPU 环境下速度还不错,准确率也能接受。
- 多模态模型 API:例如 Claude 或者支持视觉输入的模型接口,用于帧图分析和文本理解。
- Pillow:Python 图像处理库,用于帧图的尺寸调整和基础校验。
安装完毕之后,写一个环境检查脚本,确认 ffmpeg 是否在 PATH 里、模型 API 的 key 是否能正常调用。这个步骤很基础,但很多人会跳过,结果在运行 Skill 的时候卡在环境问题上,排查半天才发现是 ffmpeg 没装好。
3.2 Skill 的目录结构与配置说明
一个标准的 Skill 要能被 Agent 正确加载,目录结构必须符合框架约定。我的 claude-video Skill 结构是这样的:
claude-video/
├── SKILL.md # Skill 的说明书,Agent 通过它了解这个 Skill 的用法
├── requirements.txt # Python 依赖列表
├── scripts/
│ ├── preprocess.py # 视频拆解脚本:抽帧、提音频、转写
│ ├── analyze.py # 图像语义理解脚本
│ └── report.py # 报告生成脚本
└── config/
└── settings.yaml # 模型 API 配置、抽帧参数、输出偏好
SKILL.md 是整个 Skill 的门面,Agent 每次执行任务之前都会先读它。里面需要写清楚这个 Skill 是干什么的、输入参数有哪些、输出格式是什么样的、有哪些限制。如果这份说明写得太模糊,Agent 可能会误调用或者不知道怎么调用,所以一定要写得详细具体。我自己的 SKILL.md 里甚至会写一个简短的示例用法,Agent 看了之后就能照着做。
config/settings.yaml 里放的是可调参数。抽帧的场景检测阈值、输出图片的尺寸、是否启用音频转写、ASR 的语言选项,都在这里配置。这样调参的时候不需要改代码,改配置文件就行,对非技术人员也友好。
3.3 核心脚本的工作流程解析
preprocess.py 是整个 Skill 的技术核心,我拆开讲讲它的逻辑。
脚本接收一个视频路径参数后,首先用 ffprobe 获取视频的基本信息,包括时长、分辨率、是否有音轨和字幕轨。这个信息的用途是动态调整后续参数。比如视频时长只有 30 秒,那抽帧数量就应该少一些;视频分辨率是 4K,帧图就得缩小,不然处理起来太慢。
接着抽取音频,用 ffmpeg 转成 16kHz 单声道的 WAV 格式,交给 faster-whisper 转写。这个采样率是语音识别里常用的配置,既能保证识别效果,又不会产生过大的文件。转写结果保存为带时间戳的 JSON 文件,每一段都记录起止时间和文本。
抽帧逻辑我前面提到过,就是用 scene 滤镜检测场景变化。这里有一个小优化,我会设定一个最长间隔,即使画面一直没有太大变化(比如一个静态的课堂画面持续了很久),也至少每 60 秒抽一帧。因为长时间的静态画面可能也隐含重要信息,比如黑板上的字、屏幕上的代码,给模型看一眼没有坏处。
analyze.py 负责把抽出来的帧图分批交给多模态模型理解。这里对并发和上下文窗口的管理比较讲究,一次性把几十张图全塞进去,输出质量会下降。我测试下来,一批处理 5 到 8 张图效果最平衡。每张图要求模型输出“画面描述 + 画面中的关键文字信息”,这样信息结构化程度高,后续融合时不容易乱。
report.py 将前两步的产物整合起来,配合预设的提示词模板,让模型生成最终的分析报告。报告输出为 Markdown 格式,内容包含视频概览、分段内容摘要、关键信息提取、以及按用户需求定制的重点分析。
3.4 从输入到输出的完整演示
拿一段 8 分钟的产品演示视频举例。用户对 Agent 说:“帮我看一下这个视频,然后告诉我这个产品的主要功能和使用流程。”
Agent 解析任务之后,调用 claude-video Skill。preprocess.py 开始工作,ffmpeg 抽取了约 120 张场景帧,提取了音频并转写成约 2000 字的文本。analyze.py 分批处理了这些帧图,生成了画面描述和关键文字信息。report.py 综合所有信息,最终输出如下报告:
- 视频概览:这是一个名为 XX 的 SaaS 产品的 8 分钟演示视频,主讲人从头到尾演示了产品的主要操作路径。
- 产品功能点:报告列出登录、项目创建、成员协作、权限管理、报表导出等 8 个功能点,每个功能点都附上了对应的视频时间戳和画面描述。
- 使用流程:报告梳理出从注册到导出报表的完整使用链路,标注了每个步骤中操作的关键位置。
- 补充信息:报告额外指出演示中提到了产品的定价页面和试用限制,这些信息隐藏在画面的角落文字里,如果只看转写文本很容易漏掉。
整个过程大约耗时 3 分钟,其中大部分时间花费在音频转写上,抽帧和图像理解相对较快。将这个过程与手动看视频做笔记相比,效率和信息完整度都有了质的提升。
4. 常见问题与排查技巧实录
4.1 问题速查表
我把自己在实际使用中遇到的典型问题整理成了一张表,这些问题几乎每个人都会碰到。
| 问题 | 现象 | 根本原因 | 排查与解决办法 |
|---|---|---|---|
| 抽帧数量过多或过少 | 报告信息冗余或关键信息缺失 | scene 阈值设得不合适 | 调节 config 里的 scene 阈值,同时检查是否设置了最长间隔,两者配合使用 |
| 视频无音频轨 | 音频转写为空 | 视频本身是无声的 | 启动 Skill 时先检测音轨,无音轨则直接跳过 ASR,靠把帧图分析作为主要信息源 |
| ASR 转写准确率低 | 出现大量同音错字 | 背景音乐干扰或专业术语未识别 | 尝试用 ffmpeg 做简单降噪或人声增强,或在 ASR 参数里指定领域或语言模型 |
| 帧图尺寸过大 | API 调用超时或费用暴涨 | 原视频分辨率过高 | 在 preprocess.py 里统一缩放帧图,长边限定为 1024 像素 |
| 报告出现幻觉 | 模型描述了视频中不存在的画面 | 多模态模型对模糊帧图脑补 | 在提示词中严格要求模型“仅根据提供的画面和文本作答,不确定的部分明确标注”;同时对模糊帧图直接丢弃,不送入模型 |
4.2 几个容易踩坑的细节
除了表格里的问题,还有几个隐蔽的坑值得单独拿出来说。
第一个坑:直接把视频文件作为 API 输入。即便某些模型接口宣称支持视频输入,我也强烈建议不要这么做,除非你的视频非常短。视频文件本身包含大量冗余信息,直接送进去,不仅费用高,处理时间也长,而且模型内部的实际处理逻辑对你不可见,你很难判断它是否真的“看”到了关键内容。用自己控制的抽帧管线,每一步都可控、可审计,这是工程上更稳妥的做法。
第二个坑:忽视视频的音频信息。我见过很多初版的视频理解 Skill,只抽帧不做音频转写,效果差得惊人。视频里的人物对话、讲解、旁白,承载了大量语义信息,不经过 ASR 提取就是巨大的浪费。如果有条件,音频转写这块千万别省。
第三个坑:提示词写得太随意。不少人在调用多模态模型分析帧图时,只写一句“描述这张图片”,这样得到的描述质量通常很一般。我后期会在提示词里明确指出分析重点,例如“这是一段产品演示视频的某一帧,请提取画面中所有可见的文字信息,并描述当前界面所展示的功能模块”。提示词越具体,输出越可控。
4.3 提升识别质量的三条心得
第一,善用“过采样 + 后筛选”的组合策略。抽帧宁可多抽,也先别担心成本。我把每批图片送入模型后,都会要求模型标注每张图的信息价值(高、中、低)。最终生成报告的时候,信息价值高的图会被重点描述,信息价值低的图就直接略过。这样既不会漏信息,也不会让输出变得冗长。
第二,区分场景,采用不同的 ASR 参数。如果视频是多人会议,开启说话人分离;如果视频带有明显的专业术语,比如医疗、法律、编程,尽量在 ASR 工具里指定对应领域的语言模型或提示词,准确率能提升不少。
第三,时间一致性很关键。在抽取帧图和转写文本时,所有产物都必须保留绝对时间戳。这样在报告生成阶段,模型可以准确地说出“在 02:35 处,画面上出现了 xx”,而不是模糊的描述“在视频中段”。时间戳是后续用户按图索骥、回看视频的关键锚点,不能丢。
5. 应用场景、效果边界与扩展方向
5.1 什么场景下效果最好
根据不同视频类型的实测,我总结出一张效果对照表。
| 视频类型 | 推荐分析策略 | 效果评价与说明 |
|---|---|---|
| 录播教程、网课 | 音频转写为主 + 关键帧为辅 | 效果极好。课程内容基本全在语言里,转写文本可准确提炼知识点,帧图补充课件的公式和图表 |
| 产品演示视频 | 帧图分析为主 + 音频转写为辅 | 效果优秀。画面操作路径是核心信息,帧图的界面文字识别很有价值 |
| 多人会议录像 | 音频转写 + 说话人分离 | 效果良好。能自动生成会议纪要,按说话人提炼观点,但需要讲话人声音清晰 |
| 短视频(弹幕版) | 音频转写 + 字幕提取 | 效果一般。短视频信息密度低,有时画面创意比语言内容更重要,纯文本模式容易漏掉重点 |
| 长时间监控录像 | 帧图分析为主,按时间间隔采样 | 效果普通。监控画面通常静态内容多,抽帧信息量低,如果要做异常检测,建议用专门的行为识别模型,这类通用分析 Skill 并不擅长 |
5.2 这个 Skill 做不了的
这里想很诚实地讲一讲边界,免得有人拿去用之后觉得不靠谱。
最明显的问题:复杂场景的行为理解。比如“视频里这个人是在鼓掌还是在挥手”这种问题,这类 Skill 是无法有效处理的。因为帧图是离散的,行为是连续的变化过程,从几帧静态图推断行为,准确率很低。真要处理这类需求,得用专门的行为识别模型或者视频理解的专项模型,不是一个用抽帧 + 多模态 API 的 Skill 能覆盖的。
另一个问题是长视频的上下文管理。如果视频超过 1 小时,抽出来的帧图很容易超过几百张,转写文本也动辄上万字。把这么多内容一次性放进上下文窗口里,再让模型做综合提炼,效果会明显下降。我的处理方式是把视频按语义切成多个片段,分别生成片段级摘要,再在更高层级把摘要合并成整体报告。这种方式能缓解长距离信息关联的问题,但比真正端到端的视频理解模型还是差一些。
5.3 后续可以怎么扩展
如果你用这个 Skill 跑通了基础流程,又想让它的能力更进一步,有几个方向值得探索。
第一个方向:把生成的报告反过来用于下游任务。比如把视频分析报告喂给 RAG 知识库,用户之后就可以用自然语言向 Agent 提问“视频里 XX 功能的具体操作步骤是什么”,Agent 会从报告库中检索相关片段,并带上时间戳返回给用户。这就相当于把不可搜索的视频,变成了可检索的知识资产。
第二个方向:做成多 Agent 协作的流水线。视频分析本身可以拆成多个子任务,一个 Agent 专门做帧图分析,一个专门做文本理解,还有一个负责最终的信息融合。通过编排层把多个 Agent 串起来,处理效率和并行度能得到明显提升,特别是对批量处理大量视频的场景很有用。
第三个方向:增加人机交互校验。目前整个流程是全自动的,但有些高风险场景,比如医疗手术教学视频的分析,输出的准确性要求极高。可以考虑在流水线中加入一个人工确认节点,让人类对模糊画面或关键片段做二次确认,再生成最终报告。
6. 一点实际体会
我做完这个 Skill 之后,最大的感受是:Agent 的能力边界往往取决于你给它配了什么工具,而不是模型本身有多聪明。模型的能力在那摆着,但如果没有合适的介质去连接视频这种非结构化数据,再强的模型也使不上劲。claude-video 这个项目本质上就是在做这种连接,把视频“翻译”成模型能读懂的语言,剩下的推理和总结就交给模型发挥即可。
如果你也想在自己项目里试试,我的建议是别一上来就想着做得多完善,先把最简版本跑通:抽帧、转写、分析、出报告,四步走通之后,再根据你的具体场景逐步优化。我一开始甚至没有用场景检测抽帧,只是简单均匀抽样,效果也能接受,后续才慢慢加上各种优化。工具这东西,先跑起来比什么都重要。
更多推荐

所有评论(0)