dsh-video-eyes: Enabling Pure-Text Agents to Understand Video

前言

在 DeepSeek Harness(DSH)里,对话模型往往只有文本通道,本地视频文件既进不了上下文,也没有统一的时间轴。常见做法是手动截几张图、另开工具转写,再把片段拼进提示词——步骤散、时间码对不齐,模型很难把画面和台词对应起来。

视频之眼(dsh-video-eyes) 把抽帧、烧入真实时间码、拼图、音轨转写和可选的逐页画面描述收成一条流水线,并通过 read_video / read_video_transcript 暴露给 Agent。插件由社区维护者 fj7937290-sys 发布,在插件目录中归类为模型推理;仓库当前在 GitHub 上星标为 0,不代表功能完整性,安装前仍建议阅读源码与 MIT 许可证。

下面介绍它是什么、能做什么,以及如何安装与使用。

这是什么

一句话:让纯文本模型理解视频——按可调间隔抽帧,拼成带真实时间码的总览图,提取音轨并转写成带时间戳的台词;在 DSH 插件形态下还可自行调用 Host 的视觉模型逐页描述画面。

仓库里有两套交付物,逻辑与产物格式一致:

形态 位置 给谁用
DSH 插件 仓库根目录(package.json / index.js / client.js / cordis.patch.yml) DSH:注册工具,并在 Web 输入框上方提供抽帧间隔滑块
通用 skill skills/video-eyes/ 任意 Agent 或脚本:纯 Node + ffmpeg,无第三方依赖

插件独立工作,README 明确写不依赖其他视觉插件;describe=true(默认)时由插件经 Host 的 LLM 服务完成识图,不必安装 vision-router。

核心功能

工具

工具 说明
read_video 抽帧 → 烧入时间码 → 拼图 → 提取音轨 → 转写 → 默认再自行调用视觉模型逐页描述
read_video_transcript 按 record id 取回完整转写与自动纪要

两种输入都支持:

  • 视频:抽帧拼图 + 音轨转写 + 逐页描述(可配置关闭转写或识图)
  • 纯音频(无视频流):跳过抽帧,只做转写,返回 hasVideo: false、sheetCount: 0

Web 界面:抽帧间隔滑块

输入框上方有一条滑轨(conversation.input.dock),范围 0.1–10 秒:

  • 拖动即生效,无需重新发消息;下一次 read_video 会把它当作默认 interval
  • 显示形如 0.5s;非默认值时可点「恢复默认」
  • 值存在 Host 进程内存,重启后回到配置里的 defaultInterval

Host 通过本地路由读写间隔,不经过第三方:

方法 路径 作用
GET /_dsh/video-eyes/interval 读当前值(含 min/max/configured/runtime)
POST /_dsh/video-eyes/interval 设值;{"interval": 0} 或空值表示恢复默认

执行时优先级为:工具参数里的 interval > 运行时滑块值 > 配置默认。

为什么叫 read_video 而不是 vision_*

dsh-vision-router 会接管所有以 vision_ 开头的工具:在 Vision 模式关闭时调用会报错,且工具可能从模型可见列表中被整段过滤。若视频工具也落在 vision_ 命名空间,用户关掉 Vision 开关后视频能力会莫名消失。本插件因此使用 read_video*,与 vision-router 改名后不冲突,各自消耗各自的视觉调用配额。

与 vision-router 共处

运行时若检测到 vision_describe(vision-router 在场),工具结果头部会提示两者互不干涉。任何其他插件若也注册同名 read_video,会在 DSH 层因重复名而注册失败。

安装与启用

在 web profile 下安装插件(命令来自仓库 README):

dsh plugin --profile web add github:fj7937290-sys/dsh-video-eyes

package.json 要求 Node >= 18、dsh >= 0.1.5;插件面向 Web 客户端注入输入框滑块。

若只想在任意 Agent 里用同一套抽帧与转写逻辑,可复制 skill 到工作区:

cp -r skills/video-eyes <你的工作区>/.dsh/skills/

典型用法

DSH 内

安装后,模型在需要理解本地视频或音频时调用 read_video,需要完整转写或纪要时用 read_video_transcript 按 record id 取回。抽帧间隔可在界面滑块上调整,或在单次调用中显式传入 interval。

命令行 skill(与插件产物格式一致)

node <你的工作区>/.dsh/skills/video-eyes/scripts/video-eyes.mjs run demo.mp4 --interval 0.5

README 示例说明:例如 2 分钟竖屏视频,每 2 秒一帧、4×4 拼图,每格左上角为真实时间码(见仓库 docs/sample-real-video.jpg)。

配置项

可在 DSH 插件配置中调整(键名与默认值以 README 为准):

键 默认 说明
artifactDir <cwd>/.dsh-video-eyes 产物目录,必须可写;Host cwd 与子进程 ffmpeg 可写路径可能不一致,web profile 示例配到工作区 _video-eyes
defaultInterval 0.5 默认抽帧间隔(秒),范围 0.1–10
columns / rows 4 / 4 每页网格
cellWidth 480 单格宽度;竖屏会自动压缩
maxSheets 4 最多页数
enableTranscribe true 是否默认转写
enableDescribe true 是否默认识图
visionProvider / visionModel 空 指定识图路由;空则自动挑选
itingnaoApiKey 空 听脑 Key;空则读 ITINGNAO_API_KEY,Windows 下再读用户级环境变量
ffmpegPath 空 空则依次:FFMPEG_PATH → 包内 bin/ffmpeg.exe → PATH

找不到可用视觉模型时,read_video 不会整体失败:describe.status = unavailable 并给出原因,拼图与转写仍可使用。

代码会按 artifactDir → cwd/.dsh-video-eyes → 系统临时目录 顺序实测写入,采用第一个真正成功的路径。

适用场景与注意

适合:需要在 DSH 或通用 Agent 里把本地视频/音频变成「带时间码的画面总览 + 带时间戳转写」、再交给文本或多模态模型推理的场景;与 vision-router 并存、各自识图时也可选用本插件处理视频专用流水线。

务必留意:

  • 插件运行在 DSH Host 进程里,不受会话文件沙箱约束(沙箱只约束 Agent 的 shell 工具)。安装前应检查源码与 MIT 许可证,并确认 artifactDir 对 ffmpeg 子进程可写。
  • 转写依赖听脑相关 Key 配置;抽帧依赖 ffmpeg(可配置路径或使用包内 Windows 二进制)。
  • DSH 生态理念是「一切皆插件」;社区目录站点与 DeepSeek / 幻方无官方从属关系,本文仅介绍社区插件能力。

结尾

dsh-video-eyes 把「抽帧 + 时间码 + 转写 + 可选自描述」做成可复用流水线,并刻意避开 vision_ 工具命名空间,方便与 vision-router 同场使用。需要安装命令、配置与共处规则时,以仓库 README 为准。

  • 插件目录页:https://www.skillhub.cn/plugins/fj7937290-sys/dsh-video-eyes
  • GitHub:https://github.com/fj7937290-sys/dsh-video-eyes
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye