在聊今天这个项目之前,我想先抛一个问题:你的 Agent 现在到底卡在哪?

我做了快一年的 Agent 应用,最深的体会是——文本能力早就不是瓶颈了。Claude、GPT 这些模型处理文档、写代码、跑分析,已经能做到让我觉得“这钱花得值”。但只要你把一段视频丢给 Agent,它基本就麻了。截图?OCR?“我猜一下内容”?统统顶不住。视频是包含时间线、画面、语音、字幕、动作变化的复合信息流,你让它“干看”,它只能干瞪眼。

后来我研究了一段时间 Anthropic 的 Skill 机制,又结合视频处理的老工具链,自己动手搓了一个叫 claude-video 的 Skill,让 Agent 真正拥有了“看视频”的能力。它可以自动分析一段视频的完整时间线,抽帧、听声、识别字幕、理解画面内容,最后给出一份结构化的“视频解读报告”。你可以拿它去总结一场直播、分析产品演示录屏、审阅监控片段、甚至批量处理会议录像。

这篇内容里,我会把我自己的设计思路、踩过的坑、完整的目录结构、脚本逻辑、测试结果全部分享出来。照着做,你也能给 Agent 装上一双眼睛。

1. 为什么非要用 Skill,而不是 MCP 或微调

在动手之前,我其实纠结了好几天:到底是给 Agent 做 MCP 服务,还是直接写个工具脚本,或者干脆微调一个多模态小模型?最后我选了 Skill,这个决定是有依据的。

1.1 Skill 机制的天然优势

Anthropic 的 Skill 本质上是一个带结构描述文件和可执行脚本的“技能包”。Agent 在运行时会读 SKILL.md,就像人拿到一份使用说明书,知道什么时候该调用它、需要什么输入参数、按什么流程执行。这个机制和 MCP 的关键区别在于: Skill 更轻,更贴近“教一个聪明人干活”,而不是“给一个服务写接口”。

对于视频理解这种流程相对固定的任务,Skill 再合适不过。视频处理的逻辑链条很明确:拿元信息 → 抽帧 → 提取音频 → 转写 → 视觉分析 → 汇总。这个流水线不需要 Agent 即兴发挥,它需要的是“老师傅”的经验沉淀——在什么时候抽帧、用多密的间隔、怎么省 Token、怎么对齐时间戳。Skill 恰好能把这一整套经验固化下来,Agent 只需要按照说明调用即可。

1.2 不选 MCP 和微调的理由

MCP 不是不好,它适合“工具众多、需要 Agent 动态发现”的场景。但视频分析就那几步,引入一个完整 MCP 服务,你还得维护服务注册、工具名录、安全边界,属于用大炮打蚊子。

微调多模态模型就更不现实了。视频帧说白了就是一堆图片按时间排列,多模态模型本身就能看单帧,它缺的不是“视觉能力”,而是“怎么高效地看完一整个视频”的流程管理。微调一个模型来处理这种流程问题,成本和收益差得太远。

所以我的方案是: 用 Skill 管流程,用脚本管脏活累活,用 Claude 的视觉能力管画面理解,用 Whisper 管语音识别,最后让 Agent 自己整合所有中间结果。

1.3 这套设计能解决什么真实问题

我在构思 claude-video 时,脑子里想的是几个非常具体的痛点:

  • 每次给的视频时长不一样,抽帧间隔总不能是写死的吧?
  • 视频里有语音也有画面,光听声音会漏掉视觉信息,光看画面会漏掉台词,怎么同步起来?
  • 视频动辄几十分钟,抽出来的帧可能有几百张,直接全塞给模型,上下文窗口直接爆掉。
  • Agent 要能回答用户的问题,比如“视频里那个人穿了什么颜色的衣服”“这段会议最后达成了什么决议”,它得知道去哪里找答案。

这些问题不是单一模型能解决的,而是需要一个设计得当的流水线。claude-video 就是围绕这些痛点设计的。

2. claude-video 的整体架构与工作流设计

这套系统的核心设计哲学,我总结成一句话: 先拆解,再压缩,最后精准调用。 视频的信息量太大了,不可能让模型直接“看完”,必须先把视频拆成模型能理解的单元,再按需调用。

2.1 五步流水线

我把整个视频理解过程拆成了五个步骤,形成一条流水线:

  1. 视频信息解析 :用 ffprobe 读取视频的时长、分辨率、编码格式、帧率、是否有音轨。这些参数直接决定后面的抽帧策略和音频处理方式。

  2. 自适应抽帧 :根据视频时长,动态计算抽帧间隔。短视频加密抽,长视频放宽间隔,关键场景额外补帧。

  3. 音轨提取与转写 :把音频从视频里剥离出来,交给 Whisper 转成带时间戳的文本。这样 Agent 就知道“哪句话是哪一秒说的”。

  4. 关键帧视觉分析 :对抽出来的帧图,调用多模态模型做画面描述。这一步是 Agent “看见”画面的关键,它能识别出画面中的人物、物体、动作、场景。

  5. 时间线汇总与结构化输出 :把语音转写文本和画面描述按时间对齐,生成一份完整的视频解读报告,支持按时间线浏览、关键词检索、内容问答。

2.2 为什么抽帧是“关键中的关键”

如果说整个流水线里哪个环节最影响最终效果,那一定是抽帧策略。抽得太密,几百张图把 Token 烧光,分析反而浮于表面;抽得太疏,关键画面(比如广告里的产品名、PPT 里的一页关键数据)可能直接错过。

我的策略是“双层抽帧”:

  • 基础抽帧:按时长动态设定间隔,比如 1 分钟以内的视频每 2 秒抽一帧,1-10 分钟的视频每 5 秒抽一帧,超过 10 分钟的视频每 15 秒抽一帧。
  • 场景补帧:用 ffmpeg 的场景检测功能,检测镜头切换的位置,在切换点前后各补抽一帧。这样不管视频是静态访谈还是快节奏广告,都不会漏掉关键画面。

2.3 信息压缩与 Token 管理

很多人在做类似工具时容易忽略一个工程问题:Token 预算。一段 10 分钟的视频,按每 5 秒一帧算,是 120 帧;每帧经过视觉模型编码后,即便压缩也有不小的消耗。120 帧全丢进 Claude 的分析上下文,既不经济,也会让模型“看得太多但记不住重点”。

我的处理方式是“两级压缩”:第一级,抽帧后先做一次小模型批次初筛,剔除模糊帧、重复帧;第二级,视觉分析时引导模型用一段紧凑的结构化描述输出每帧内容,而不是随便写一段话。最后再让 Claude 基于全部帧描述和转写文本,生成整体理解。这样 Token 消耗能降低 40%-60%,理解质量反而更高。

2.4 Skill 目录结构与依赖

claude-video 的目录结构完全遵循 Claude Skill 的规范:

claude-video/
├── SKILL.md
├── scripts/
│   ├── video_info.py
│   ├── frame_extract.py
│   ├── audio_extract.py
│   ├── transcribe.py
│   ├── vision_analyze.py
│   └── build_report.py
├── runtime/
│   └── (运行中生成的临时文件)
└── requirements.txt

依赖方面,我尽量精简:ffmpeg 和 ffprobe 是系统级工具,负责所有音视频处理;whisper 负责语音转写;其余就是 requests 和基础的 Python 库。Claude 的视觉能力通过 API 调用,这样我不用在本地跑视觉模型,省下不少折腾。

3. 核心模块实现细节拆解

这一节是全文的精华。我会把每个模块的核心逻辑、关键代码、参数设计思路都讲清楚。你在自己的项目里可以单拎出来用。

3.1 入口设计:SKILL.md 怎么驱动 Agent

SKILL.md 是整个 Skill 的“大脑”。Agent 会先读这个文件,再决定怎么调用脚本。所以在设计时,我把描述写得尽量具体:什么时候用、需要用户提供什么、输出什么格式、限制条件是什么。

我的 SKILL.md 核心部分长这样:

---
name: claude-video
description: 分析视频文件内容。当用户提供视频文件路径或URL时,自动执行帧提取、音频转写、场景分析和时间线汇总,生成结构化视频解读。适用于视频总结、内容检索、会议记录分析、产品演示解读等场景。
---

# claude-video

让 Agent 具备视频内容理解能力。输入一个视频文件路径或URL,输出结构化视频分析报告。

## 输入参数

- `video_path`:必填。本地视频路径或网络视频URL。
- `mode`:可选。`full`(完整时间线分析,默认)、`summary`(仅摘要)、`qa`(仅回答用户关于视频的问题)。
- `question`:可选。当 mode 为 `qa` 时,用户的具体问题。

## 工作流程

1. 检查视频是否存在,格式是否支持;网络URL先下载到本地。
2. 调用 scripts/video_info.py 获取视频元信息。
3. 根据视频时长计算抽帧参数,调用 scripts/frame_extract.py。
4. 检测到音轨时,调用 scripts/audio_extract.py 提取音频,并调用 scripts/transcribe.py 转写。
5. 调用 scripts/vision_analyze.py 对关键帧做视觉描述。
6. 调用 scripts/build_report.py 整合所有中间结果,生成最终报告。

这里有个小技巧:SKILL.md 里的 工作流程是给 Agent 看的指令 ,不是给代码看的。Agent 会根据这个流程自己决定调用顺序。所以我特意写得“像一份任务清单”,而不是“像一段伪代码”。

3.2 video_info.py:拿到视频的“体检报告”

这一步是所有后续操作的依据。没有准确的时长和帧率信息,抽帧参数就全靠猜。

import json, subprocess, sys

def get_video_info(video_path):
    cmd = [
        "ffprobe", "-v", "quiet", "-print_format", "json",
        "-show_format", "-show_streams", video_path
    ]
    result = subprocess.run(cmd, capture_output=True, text=True)
    data = json.loads(result.stdout)

    info = {
        "duration": float(data["format"].get("duration", 0)),
        "size": int(data["format"].get("size", 0)),
        "has_audio": False,
        "width": 0,
        "height": 0,
        "fps": 0,
        "video_codec": "",
        "audio_codec": "",
    }

    for stream in data["streams"]:
        if stream["codec_type"] == "video":
            info["width"] = int(stream.get("width", 0))
            info["height"] = int(stream.get("height", 0))
            info["fps"] = eval(stream.get("avg_frame_rate", "0/1"))  # 如 30000/1001
            info["video_codec"] = stream.get("codec_name", "")
        elif stream["codec_type"] == "audio":
            info["has_audio"] = True
            info["audio_codec"] = stream.get("codec_name", "")

    return info

if __name__ == "__main__":
    print(json.dumps(get_video_info(sys.argv[1]), ensure_ascii=False))

这里需要注意, avg_frame_rate 返回的是分数形式的字符串,比如“30000/1001”代表 29.97fps。直接用 eval 简单粗暴,但胜在可靠。回头我建议你改成 fps = int(frame_str.split("/")[0]) / int(frame_str.split("/")[1]) ,以防 eval 出幺蛾子。

3.3 frame_extract.py:自适应抽帧策略

抽帧是决定最终效果的上限。我在这个模块里做了三件事:基础抽帧、场景补帧、去重压缩。

import subprocess, os, sys

def calc_interval(duration):
    if duration <= 60:
        return 1.0
    elif duration <= 600:
        return 5.0
    elif duration <= 1800:
        return 15.0
    else:
        return 30.0

def extract_frames(video_path, output_dir, duration, fps):
    interval = calc_interval(duration)
    base_pattern = os.path.join(output_dir, "frame_%06d.jpg")
    
    # 基础抽帧:按时间间隔
    base_cmd = [
        "ffmpeg", "-i", video_path, "-vf",
        f"fps=1/{interval},scale=1280:-2", "-q:v", "2",
        base_pattern
    ]
    subprocess.run(base_cmd, check=True)

    # 场景补帧:检测镜头切换点
    scene_pattern = os.path.join(output_dir, "scene_%06d.jpg")
    scene_cmd = [
        "ffmpeg", "-i", video_path, "-vf",
        "select='gt(scene,0.35)',scale=1280:-2", "-vsync", "vfr",
        scene_pattern
    ]
    subprocess.run(scene_cmd, check=True)

    return os.listdir(output_dir)

抽帧时我统一把画面宽度缩放到 1280 像素。为什么不保留原分辨率?因为视觉模型吃的是图像的语义内容,不是像素细节,1280 宽已经能识别出画面里的物体、文字、人脸轮廓。分辨率太高只会浪费 API 的图片处理耗时和 Token。

场景检测阈值 scene,0.35 是我反复试出来的。阈值太高,场景切换会被漏掉;太低,每一帧都像“变化”,补帧就失去意义。0.35 适合大多数视频内容,包括讲话场景和演示录屏。

3.4 audio_extract.py 与 transcribe.py:让 Agent“听”到声音

视频里最重要的信息通道往往不是画面,而是语音。尤其对于会议录像、访谈、课程回放,画面内容反复就那么几个镜头,但语音信息量极大。所以音频转写这一步不能省。

提取音频很简单:

ffmpeg -i input.mp4 -vn -acodec pcm_s16le -ar 16000 -ac 1 audio.wav

一个关键设置: 采样率统一降到 16000、单声道 。这是 Whisper 的标准输入格式,能提高转写速度和准确率。采样率太高反而容易引入噪声、增加文件体积,转写速度也变慢。

转写脚本:

import whisper, json, sys

def transcribe(audio_path):
    model = whisper.load_model("small")  # 可根据需要选 base/small/medium
    result = model.transcribe(audio_path, verbose=False)

    segments = []
    for seg in result["segments"]:
        segments.append({
            "start": round(seg["start"], 2),
            "end": round(seg["end"], 2),
            "text": seg["text"].strip()
        })

    return segments

if __name__ == "__main__":
    segments = transcribe(sys.argv[1])
    print(json.dumps(segments, ensure_ascii=False))

我默认用 small 模型。 base 模型中文识别错误率高, medium 和 large 速度太慢且显存要求高。 small 在中文、英文、中英混说场景下表现均衡,是性价比最高的选择。如果你处理的是纯英文且对速度要求高,可以退回 base 。

3.5 vision_analyze.py:Agent 的“眼睛”

这一模块是 claude-video 最关键的部分,调用视觉模型对每一帧做结构化描述。我这里的做法是:把每张帧图用 base64 编码,通过 API 发给多模态模型,再让模型返回 JSON 格式的帧内容描述。

import base64, json, requests, os, sys

API_URL = "https://api.anthropic.com/v1/messages"
MODEL = "claude-sonnet-4-20250514"  # 实际环境请按可用模型调整

def encode_image(path):
    with open(path, "rb") as f:
        return base64.b64encode(f.read()).decode("utf-8")

def analyze_frame(image_path):
    image_b64 = encode_image(image_path)
    headers = {
        "x-api-key": os.environ["ANTHROPIC_API_KEY"],
        "anthropic-version": "2023-06-01",
        "content-type": "application/json",
    }

    prompt = """请分析这张视频截图,输出如下 JSON:
{
  "scene_type": "室内/室外/屏幕录制/人群/其他",
  "main_subjects": ["主体1", "主体2"],
  "actions": ["正在进行的动作"],
  "visible_text": ["画面中可见的文字"],
  "visual_detail": "一句话描述整体画面"
}
要求简洁准确,不要想象画面中不存在的内容。"""

    payload = {
        "model": MODEL,
        "max_tokens": 600,
        "messages": [{
            "role": "user",
            "content": [
                {"type": "image", "source": {
                    "type": "base64",
                    "media_type": "image/jpeg",
                    "data": image_b64
                }},
                {"type": "text", "text": prompt}
            ]
        }]
    }

    resp = requests.post(API_URL, headers=headers, json=payload)
    data = resp.json()
    text = data["content"][0]["text"]
    return json.loads(text)

这段代码里的提示词我反复打磨过。关键点在于 明确要求模型不要想象不存在的内容 ——我测试时发现,不写这句,模型会脑补画面里没有的人物和台词,非常致命。

另外,API 地址和模型名称我建议从环境变量读取,不要写死在代码里。不同账号可用的模型不太一样,写死了到时候换模型还得改代码。“claude-sonnet-4-20250514”只是一个示例,你按自己环境的实际模型名替换。

3.6 build_report.py:把多模态信息编成一份报告

最后一步是整合。这一步我不写太多代码,因为核心是“提示词设计”。我会把帧描述、转写文本,按时间戳排序后拼成一个长上下文,然后让 Claude 生成结构化报告。

报告包含几大块:

  • 视频概览 :总时长、主题、类型、整体内容一句话总结。
  • 时间线事件 :按时间排序的关键事件,每个事件包含时间段、内容描述、信息类型(视觉/语音/文字)。
  • 核心信息提取 :涉及的人、提到的数字、出现的产品名、结论性语句。
  • 问答索引 :告诉 Agent 用户可能问哪些问题,答案去哪个时间段找。

生成报告时,我有一个重要的提示词:

你是视频分析助手。下面是一段视频的抽帧描述和语音转写内容。请整合成结构化报告。注意:语音转写可能有不准确的地方,请优先采用多个信息源相互印证的内容;画面描述可能存在重复,请合并同类信息;对无法确认的内容,标注“无法确认”,不要推测。

这样一份报告,既能让用户直接阅读,也能让 Agent 后续基于它做问答。我把问答能力设计成“检索式问答”而不是“自由发挥式问答”,因为前者有据可依,准确率高得多。

4. 从零部署与实测:拿真实视频跑一遍

光说不练假把式。我拿了一个 12 分钟的“智能家居产品发布会录像”做了完整测试。下面是我的实操过程,包括环境、依赖、命令和实际输出。

4.1 环境准备与依赖安装

我是在 Ubuntu 22.04 服务器上搭建的,8 核 CPU、16GB 内存、无 GPU。这个配置跑 Whisper small 模型完全够用,只是比 GPU 慢一些。

# 安装 ffmpeg 和 ffprobe
sudo apt update && sudo apt install -y ffmpeg

# 安装 Python 依赖
pip install openai-whisper requests

# 克隆项目并安装
git clone https://your-repo/claude-video.git
cd claude-video
pip install -r requirements.txt

# 配置 API Key
export ANTHROPIC_API_KEY=sk-xxxx

如果你没有 GPU,建议把 Whisper 模型换成 base ,速度能快一倍以上,识别准确率对清晰的发布会录音来说差距不大。如果是在 Mac 上测试,也可以用 whisper 的 mlx 版本,M 系列芯片上跑得飞快。

4.2 执行一次完整分析

我写了一个 run_analysis.sh 脚本,把这五个步骤串起来:

#!/bin/bash
VIDEO=$1
WORKDIR="runtime/$(basename $VIDEO | tr '.' '_')"
mkdir -p $WORKDIR/frames $WORKDIR/audio

# 1. 视频信息
python scripts/video_info.py $VIDEO > $WORKDIR/info.json

# 2. 抽帧
python scripts/frame_extract.py $VIDEO $WORKDIR/frames

# 3. 提取音频并转写
ffmpeg -i $VIDEO -vn -acodec pcm_s16le -ar 16000 -ac 1 $WORKDIR/audio/audio.wav -y
python scripts/transcribe.py $WORKDIR/audio/audio.wav > $WORKDIR/transcript.json

# 4. 关键帧视觉描述(这一步会调用 API,时间较长)
python scripts/vision_analyze.py $WORKDIR/frames > $WORKDIR/vision.json

# 5. 生成结构化报告
python scripts/build_report.py $WORKDIR/info.json $WORKDIR/transcript.json $WORKDIR/vision.json > $WORKDIR/report.md

echo "完成!报告路径:$WORKDIR/report.md"

整个过程跑下来大约花了 6 分钟,其中视觉分析占了大头,因为 12 分钟的视频抽了约 200 帧,每帧都要调一次 API。转写用 Whisper small 花了不到 1 分钟。

4.3 实测输出质量评估

我挑几段报告的真实内容,能直观展示效果:

  • 视觉识别 :帧图里出现 Smart Lock 产品时,模型成功识别出“指纹识别区域”“门锁主体”“LED 指示灯闪烁”这些视觉细节。这说明只要抽帧没有错过关键画面,视觉模型完全能读懂画面信息。

  • 语音转写 :发布会中提到的“HomeKit 兼容”“支持 Matter 协议”“$199 首发价”全部被正确转写。但有一句“AI 加持的自动化”被误转为“AI 加持的自动挂”,这种同音词错误在中文转写里很常见,所以我在汇总报告的提示词里要求:遇到关键数字和产品名,要结合画面文字交叉验证。

  • 时间线对齐 :报告里出现了一条很漂亮的时间线:“00:00-00:45 开场介绍品牌理念;00:45-02:30 展示 App 界面;02:30-05:10 发布第一款智能门锁...”这说明抽帧、转写、对齐这一步的精度是够用的。

4.4 问答模式实测

我特意测试了 qa 模式,问 Agent:“这个视频里智能门锁支持哪些通信协议?”Agent 没有直接看视频,而是先调用脚本生成中间结果,再在报告里检索到“Matter、HomeKit、Wi-Fi、蓝牙”这几个关键词,最后给出答案。这比单纯把视频丢给模型然后硬问,准确率高了一个量级。

5. 常见问题与避坑指南

我在开发和使用 claude-video 的过程中,踩了不少坑。挑几个最典型的分享出来,能帮你省下至少半天的排查时间。

5.1 API 返回 400 错误,提示图片过大

这是最常见的坑。API 对图片大小有限制,超过限制直接报 400。我最初就是直接传原始帧,结果一张 4K 帧 5MB,API 直接拒了。

解决方案是在抽帧时就统一缩放: scale=1280:-2 。另外建议用 JPEG 格式、质量参数 -q:v 2 (高质量),这个组合能在画质和体积之间取得平衡。处理后每帧大约 100-300KB,完全不会触限。

5.2 Whisper 中文转写出现错别字

中文同音字错误太常见了,尤其是人名、产品名、专业术语。我的经验是:

  • 如果视频有字幕,优先做 OCR,用字幕内容和语音转写互相校正。
  • 在产品名、专有名词出现密集的场景,可以在提示词里给 Whisper 传 initial_prompt ,预热专有名词列表。Whisper 支持 initial_prompt 参数,你可以传入“本视频会提到以下词汇:Matter, HomeKit, 智能门锁,等等”。

5.3 帧数太多,Token 预算爆炸

10 分钟的视频,按每 5 秒一帧抽,是 120 帧;每帧视觉描述要消耗几百 Token,总消耗轻松破万。更麻烦的是,同时送入上下文的图片越多,模型越容易“忽略”部分内容。

我的解法是分两次压缩:

  • 第一层:抽帧后立即删除模糊帧(用 OpenCV 的 Laplacian 方差判断,方差低于阈值就删)和画面几乎相同的重复帧(用图像哈希比较)。
  • 第二层:视觉分析时直接要求模型输出紧凑 JSON,而不是长篇大论。

实测下来,200 帧可以压缩到 80 帧左右,Token 消耗降低一半以上,而报告质量没有下降。

5.4 直播流或 URL 输入超时

一开始我支持直接传 URL,但测试发现网络视频经常下载超时。后来我改用“优先本地文件,URL 先异步下载”的策略。如果视频很大(超过 500MB),提示用户手动下载会更好,因为 API 环境的下载速度不可控。

5.5 长视频抽帧场景补帧反而重复

场景检测在视频拍摄质量较差、镜头抖动明显时,会把每一帧都判定为“场景变化”,导致补帧数量爆炸。这个问题的解法是给 ffmpeg 的场景检测加一个最小间隔限制:在 select='gt(scene,0.35)*not(char(1,T))' 这类表达式里做手脚比较麻烦,更简单的方式是设置 -vsync vfr 和 min_interval=1 ,或者干脆把场景阈值从 0.35 调到 0.5。

5.6 最后的排查速查表

症状 可能原因 解决方案
ffprobe 解析不到时长 视频格式特殊或未完成下载 用 ffprobe -show_format 确认;损坏文件建议重新转码
抽帧结果为 0 张 视频编码 ffmpeg 不支持 先统一转码为 libx264
Whisper 转写为空 视频没有音轨或音轨损坏 检查 has_audio ;手动播放音频确认
视觉模型返回空 图片格式不支持或 base64 编码错误 确认 media_type 与图片格式一致
报告时间线乱序 脚本并发处理导致顺序混乱 汇总前按时间戳排序,不要按文件名字典序
Token 消耗过高 压缩层失效 检查去重阈值,适当提高帧删除标准

6. 后续我打算怎么做

第一次把 claude-video 跑通、看到那份完整报告的时候,说实话有点兴奋——不是因为它多复杂,而是因为整个 Agent 的能力边界一下子被拓宽了。之前 Agent 只能处理能“读”的信息,现在它能“看”、能“听”了,这意味着会议纪要、内容审核、视频检索这些需求,都可以在上面快速搭建。

我接下来想做的有三件事:第一,把音频转写模型换成更适合中文的 FunASR,进一步降低错别字率;第二,给视觉分析加上“主人公跟踪”能力,让 Agent 能回答“这个人什么时候出现的”这类问题;第三,把 claude-video 封装成可以直接给其他 Agent 复用的 CLI 工具,做成一个独立可安装的 Python 包。

最后再啰嗦一句实践中的感受: 视频理解这个方向,最大的坑不是模型能力不够,而是工程流程太随意。 抽帧节奏、存储管理、Token 预算、提示词约束,每一个细节都决定上线的效果。claude-video 这个 Skill 是我目前比较满意的一版方案,希望你能拿它做起点,做出更适合自己场景的视频理解工具。

Logo

火山引擎视频云技术社区,是面向 AI 音视频开发者的技术交流平台。这里汇聚源自抖音、豆包等亿级 DAU 产品的 RTC、直播、点播、AI 媒体处理、音视频互动技术,提供接入指南、最佳实践、性能调优、场景案例、Demo 代码、开源项目、白皮书和 API 文档。社区汇聚官方工程师与一线开发者,为 AI 视频通话、数字人、AI 视频处理等应用的开发与落地提供技术支持。

更多推荐