🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

视频联系表 Elysia126/dsh-video-grab

DeepSeek Harness
Elysia12620 天前有提交已提供中文文档扫描:含敏感能力

把整条视频拼成一张图,让智能体一次看懂

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Elysia126/dsh-video-grab
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · other
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
数据截至 2026/11/03·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 20 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 30 处,展示前 18 条)
  • 读取本地文件
    lib/index.js:79
    try { if (existsSync(candidate)) return candidate } catch { }
  • 写入本地文件
    lib/index.js:89
    try { mkdirSync(base, { recursive: true }) } catch { }
  • 写入本地文件
    lib/index.js:97
    mkdirSync(dir, { recursive: true })
  • 读取本地文件
    lib/index.js:133
    if (!existsSync(APP_MAIN)) {
  • 执行外部命令来自配置/变量
    lib/index.js:139
    child = spawn(exe, args, {
  • 读取本地文件
    lib/index.js:170
    if (existsSync(receipt)) payload = JSON.parse(readFileSync(receipt, 'utf8'))
  • 读取本地文件
    lib/index.js:170
    if (existsSync(receipt)) payload = JSON.parse(readFileSync(receipt, 'utf8'))
  • 读取本地文件
    lib/index.js:186
    const text = readFileSync(join(outDir, '_sheet.log'), 'utf8')
  • 读取本地文件
    lib/index.js:228
    if (dir && existsSync(join(dir, 'model.bin')) && existsSync(join(dir, 'config.json'))) {
  • 执行外部命令来自配置/变量
    lib/index.js:254
    child = spawn(python, args, {
  • 发起网络请求
    lib/index.js:614
    const response = await fetch(url, { headers })
  • 发起网络请求
    lib/index.js:638
    const download = await fetch(direct, { headers })
  • 写入本地文件
    lib/index.js:641
    writeFileSync(outFile, buffer)
  • 写入本地文件
    lib/electron/main.cjs:41
    fs.mkdirSync(outDir, { recursive: true })
  • 写入本地文件
    lib/electron/main.cjs:42
    fs.appendFileSync(logFile, new Date().toISOString() + ' ' + message + '\n', 'utf8')
  • 写入本地文件
    lib/electron/main.cjs:47
    fs.mkdirSync(outDir, { recursive: true })
  • 写入本地文件
    lib/electron/main.cjs:48
    fs.writeFileSync(resultFile, JSON.stringify(obj, null, 2), 'utf8')
  • 读取本地文件
    lib/electron/main.cjs:76
    } else if (!videoPath || !fs.existsSync(videoPath)) {
扫描于 2026/11/4(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

README

由 DeepSeek 最新模型翻译生成
dsh-video-grab —— 让智能体真的「看」视频(免 ffmpeg) 给 DSH 用的 host 插件。核心不是「能抓帧」,而是用得起:一条 33 秒的视频,逐帧读完约 61 万 token(爆),拼成一张联系表约 2200 token(一次读图看完整条)。 一、它解决的问题 智能体看视频有个硬约束:读一张图的成本 ≈ 宽×高÷750 token。 | 做法 | 33 秒 / 720×720 / 883 帧 | | 逐帧读原图 | 883 × 约 690 ≈ 61 万 token(任何上下文都装不下) | | 一张联系表(20 格) | 1440×1152 ≈ 2200 token,一次读完 | 所以「看完一条视频」的正确姿势是联系表,不是抽一堆帧再一张张读。 第二个约束:这台机器上没有 ffmpeg,也没有 yt-dlp。解法是借本机已有的 Electron(electron.exe 自带 ffmpeg.dll,即 Chromium 的解码器):插件拉起一个隐藏窗口播 ,seek 到采样点,drawImage 到 canvas,导出 PNG。
展开完整文档(README 剩余 1 节)
dsh-video-grab —— 让智能体真的「看」视频(免 ffmpeg)

给 DSH 用的 host 插件。核心不是「能抓帧」,而是用得起:一条 33 秒的视频,逐帧读完约 61 万 token(爆),拼成一张联系表约 2200 token(一次读图看完整条)。

一、它解决的问题

智能体看视频有个硬约束:读一张图的成本 ≈ 宽×高÷750 token。

| 做法 | 33 秒 / 720×720 / 883 帧 |
| 逐帧读原图 | 883 × 约 690 ≈ 61 万 token(任何上下文都装不下) |
| 一张联系表(20 格) | 1440×1152 ≈ 2200 token,一次读完 |

所以「看完一条视频」的正确姿势是联系表,不是抽一堆帧再一张张读。

第二个约束:这台机器上没有 ffmpeg,也没有 yt-dlp。解法是借本机已有的 Electron(electron.exe 自带 ffmpeg.dll,即 Chromium 的解码器):插件拉起一个隐藏窗口播 ,seek 到采样点,drawImage 到 canvas,导出 PNG。

二、四个工具

| 工具 | 作用 |
| video_probe | 只读容器结构:轨道、编码、分辨率、样本数、时长(不解码,毫秒级) |
| video_sheet | 主力:按时间点采样拼一张联系表,返回 PNG 绝对路径(用 read_image 读) |
| video_frames | 均匀抽 N 帧存 PNG(只在需要逐帧细看时用,token 贵) |
| video_fetch_bilibili | 匿名取 B 站公开视频直链并下载到本地(不需要账号/登录) |

典型流程:

video_fetch_bilibili { bvid: "BV1WLpA6uEB1" } → 本地 mp4 路径
video_sheet { path: "<上一步的路径>" } → PNG 路径
read_image { file_path: "<PNG 路径>" } → 真的看到内容

三、实测数据(2026-10-12,本机)

| 项 | 结果 |
| video_probe 33 秒片 | 0.0s,720x720 avc1 32.7s 883 样本(音频轨 mp4a 1407 样本) |
| video_sheet 12 格 | 23.9s,成图 1440x864,2.1 MB |
| video_sheet 20 格 | 41s,成图 1440x1152,2.9 MB |
| video_frames 4 帧 | 8.8s |
| video_fetch_bilibili | 1.8s,下回 1571 KB |

耗时几乎全花在 seek 上:格数越多越慢(约 1.5-2s/格)。20 格 ≈ 40s 是常态。

四、⚠️ 六个实测过的坑(别「简化」掉)

1. ELECTRON_RUN_AS_NODE=1 会让 electron 变成纯 Node:它是 DSH 宿主注入给子进程的,一旦存在,electron.exe 不建窗口、不跑应用代码、静默退出(exit=1,约 100ms)。
本插件显式构造子进程环境(只保留 Electron 需要的键),这个变量根本不在里面。
注意:Windows PowerShell 5.1 里 Remove-Item Env: 实测清不掉它。
2. "type": "module" 会连累 Electron helper:本包 host 侧是 ESM,所以 package.json 有 "type": "module" —— 这个 type 会一并套到 helper 上。helper 必须叫 main.cjs,否则 require('electron') 抛 ReferenceError: require is not defined in ES module scope,表现为「启动即退、没有任何输出」。
3. 带值开关会吃掉入口脚本:electron --disable-gpu main.cjs ... 里, electron 把入口脚本当成了 --disable-gpu 的值(--disable-gpu=main.cjs), argv 整体位移。所以参数按「第一个 .cjs/.js 之后的」来取,不按位置取。
4. app.exit() 可能抢在文件落盘前:回执一律写文件(_result.json),退出前留 300ms。
5. 不要捕获子进程 stdio:往被关闭的管道写日志会 EPIPE,Electron 把它升级成用户桌面上的模态错误框。插件的 stdio 固定 'ignore',进度写 <outDir>/_sheet.log。
6. MP4 里 VisualSampleEntry 的宽高偏移:从 box 起点算 +32/+34(8 头 + 6 保留 + 2 dataRefIdx
+ 16 预定义 + 4 宽高)。写成 +24/+26 会稳定读出 0x0,且不报错 —— 实测踩过。

排查顺序建议:先看 <outDir>/_sheet.log(每步都有时间戳),再看 _result.json,最后才怀疑环境。「没有日志」本身就是结论:说明进程没进到应用代码。

五、依赖与边界

- 零 npm 依赖(只用 node: 内置模块 + 本机 electron.exe)。
- Electron 位置:DSH_ELECTRON / VIDEO_GRAB_ELECTRON 环境变量优先,否则找 %USERPROFILE%\.dsh\electron\electron.exe。
- 只支持 Chromium 能解的编码(H.264/H.265/VP9/AV1…)。本机是精简版 Electron, 专有编码可能缺失;遇到解不了的情况会如实报「没有可解码的画面」,不会假装成功。
- 音频听不到:只处理画面。台词要靠视频自带的字幕/画面文字,或另行转写。
- 只能看定格:联系表是 N 张静态图,运动过程、节奏、音效都拿不到。
- B 站下载只处理公开视频,付费/仅登录可见会如实失败;文件名里的非法字符会被替换。

六、安装 / 卸载

powershell
$dsh = "C:\Users\Elysia\AppData\Local\Programs\DeepSeek Harness\resources\runtime\cli\bin\dsh.cmd"
& $dsh plugin --profile desktop add D:\workspace\workplace2\dsh-video-grab-0.1.0.tgz
& $dsh plugin --profile desktop remove dsh-video-grab

装完要重启 / 开新会话才会出现这四个工具(host 侧的 JS 是加载时进内存的); helper 的改动则立即生效(每次调用现读磁盘)。

七、许可与出处

- MIT。解码借用本机已安装的 Electron,不随包分发任何运行时。
- B 站接口按公开页面所见的调用方式使用,仅取公开视频、匿名访问;请自行遵守平台条款。
预览分享卡片长什么样 ↓Elysia126/dsh-video-grab
分享 · DeepSeek Harness Hub
Elysia126/dsh-video-grab

把整条视频拼成一张图,让智能体一次看懂

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部