把一段本地参考视频变成人工策展过的镜头清单:ffmpeg scdet 找镜头切点,每镜一帧带毫秒时间码的缩略图,勾掉不要的帧后导出 frames.csv(UTF-8 BOM)、shots.json、编号 JPEG 和一张带时间码标签的联系表。全程本机处理、不上传,零运行时依赖,39 个 node --test 测试(含真实 ffmpeg 集成用例)。需自行安装 ffmpeg 5.1+(含 ffprobe)。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:dingchenhui0618-arch/dsh-take-sheet
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
把一段参考视频按镜头切开,逐镜抽一帧,人工勾选后导出带时间码的参考帧清单和一张联系表。

这是 DeepSeek Harness 的一个插件:在对话视图里多一个「参考帧」页签。视频、帧和导出物都只在本机处理,不上传。
为什么做这个
做视频、广告或产品动画时,真正要交给下游的不是「一段参考视频」,而是「第 2 秒这一帧、第 6 秒这一帧,按这个顺序」。现成的抽帧工具通常把帧直接喂给模型,或者按固定间隔抽一堆;人还是要自己对着播放器找镜头、记时间码、截图、拼表。
这个插件把这段手工活收成一条流程:
- 一次解码,检测镜头切点;
- 每个镜头给一帧缩略图,带精确到毫秒的时间码;
- 勾掉不要的,留下要用的;
- 导出
frames.csv、shots.json、frames/和一张带时间码标签的联系表。
功能
- 按镜头切:用 ffmpeg 的
scdet镜头检测,而不是固定间隔。切点阈值可选「敏感 / 标准 / 稳健」。 - 人工勾选:每镜一张 16:9 缩略图,点击卡片或复选框切换;全选 / 全不选;未选中的卡片会变暗。
- 时间码是帧自己的:缩略图上的
00:00:02.000就是导出文件名和 CSV 里的时间码,不是近似的镜头起点。 - 联系表:自动按接近 3:2 的网格排版,黑底、每格左上角标
#01 00:00:00.200;字体找不到时退化为无标签版本,不会让导出失败。 - 导出即文件:CSV / JSON / JPEG / 帧文件都可直接打开、拷进 brief 或提交到项目里。
- 不离开本机:没有网络请求,不读
~/.dsh以外的配置。
导出后的联系表:

导出结果面板(联系表预览 + 三个下载链接 + 本机输出目录):

安装
需要 ffmpeg 5.1+(含 ffprobe)。插件不会替你安装它,但会自动在这些位置找:
DSH_FFMPEG_PATH/FFMPEG_PATH环境变量;- Windows 的 WinGet Links 目录(
winget install Gyan.FFmpeg后就在那里); C:\ffmpeg\bin、Chocolatey、PATH;- macOS 的 Homebrew、Linux 的
/usr/bin。
安装到某个 DSH profile:
dsh plugin --profile desktop add D:\Projects\dsh-take-sheet
lib/ 已随仓库提交,检出后不需要构建。装好后刷新 Web GUI,在任意会话的页签里点「参考帧」。运行中才装 ffmpeg 也不用重启:面板会提示缺少 ffmpeg,装好后点「重新检测」即可。
使用
- 粘贴视频的绝对路径(本地文件,不支持 URL),例如
D:\refs\clip.mp4; - 选灵敏度和最多镜头数,点「扫描」;
- 扫完会列出每个镜头的一帧;点卡片或复选框保留 / 去掉;
- 点「导出参考帧清单」;面板下方出现联系表预览和三个下载链接。
「敏感」更容易把轻微转场也切成新镜头;「稳健」只认硬切。默认「标准」。如果一段片子里切点太多,会按时间均匀保留,并在面板上说明丢弃了多少个切点。
输出
每次导出写到 $DSH_HOME/take-sheet/jobs/<job-id>/export/:
export/
frames.csv
shots.json
contact-sheet.jpg
frames/
01_00-00-00.200.jpg
02_00-00-02.000.jpg
...
frames.csv(UTF-8 BOM,CRLF,Excel 直接打开):
shot,timecode,seconds,start,end,duration,file,source
1,00:00:00.200,0.200,0.000,2.000,2.000,frames/01_00-00-00.200.jpg,"D:\refs\clip.mp4"
shots.json 额外记录源视频的 probe 信息(时长、分辨率、fps、编码)、扫描参数、每个镜头的起止时间和联系表尺寸,方便脚本消费。
文件名里的时间码用 - 代替 :,因为 Windows 文件名不允许冒号;CSV 和画面上的标签仍是标准 HH:MM:SS.mmm。
与已有方案的关系
调研时看过三个 DSH 视频相关插件:
Something11235/dsh-video-skin:把视频做成壁纸 / 启动动画,不做抽帧;HongtaoWang75/dsh-video-see:调用 ffmpeg 抽帧给模型看,带时间戳,也有拼图模式;shisuiqingqian/dsh-video-kit:转写 + 关键帧,主要也是给 agent 做上下文。
所以「视频抽帧」这件事并不新,日报里「没人做视频理解」的说法不准确。本项目的差别只在流程的重心:镜头切分 + 人在环勾选 + 可交付的时间码清单/联系表,是给人做参考板用的,而不是给模型补上下文。没有复制上述任何项目的代码;抽帧命令是按 ffmpeg 文档和本机实测写的。插件的构建骨架(零依赖 lib/、cordis.patch.yml、host/client 两半、测试结构)沿用了同作者的 dsh-warden,业务代码是重新实现的。
一个实现上的选择:镜头检测用 scdet 而不是 select='gt(scene,T)'。在深色、低对比的产品渲染片上,scene 分数只有 0.24 左右,硬切也只有 ~0.26,很难分;scdet 在同一段素材上硬切约 9–10、普通帧约 0.005,阈值好定得多。
限制
- 只处理本地文件;不下载 URL、不读流媒体。
- 没有音频分析,也没有转写;镜头切分只看画面。
- 单次最多 200 个镜头(默认 60),极长视频需要多扫几段。
- 联系表的字体优先 Consolas / Segoe UI / Arial / DejaVu / Liberation;都没有时导出无标签版本。
- 导出会覆盖同一 job 的上一次导出(
export/会先清空)。
开发
node scripts/build.mjs # src/ -> lib/,并把 CSS 内联进 client bundle
node --test test/*.test.mjs
测试共 39 个:纯函数(时间码、切点规划、CSV/ffmpeg 转义、网格)、media 层参数与版本门禁、host 路由与导出(假 media + 真 store)、client bundle 契约。test/integration.test.mjs 会用真实 ffmpeg 生成一段 6 秒三色视频,验证「两个切点 → 三个镜头 → 带标签联系表」;没有 ffmpeg 的机器上这组会自动 skip,而不是假装通过。
lib/ 是提交进仓库的构建产物。改了 src/ 必须重新 node scripts/build.mjs 并一起提交,CI 会检查 lib/ 与 src/ 是否一致。
License
MIT
链接
同类插件
DayuanJiang/next-ai-draw-io#dsh-plugin★ 36802
dsh 的 draw.io 绘图插件:通过 next-ai-drawio MCP 服务器作图,点回复里的链接在右侧栏打开实时预览,可以手动修改图,AI 的每次修改都是可以恢复的版本。需 Node.js 18+,首次使用由 npx 下载 MCP 服务器。
Tencent/WeKnora#dsh-weknora★ 36302
把 WeKnora 知识库接入 dsh 的四个只读工具:列出知识库、混合检索原文片段、按顺序还原单篇文档,以及直接取用 WeKnora 自己带引用的 RAG 或 ReAct agent 回答(含可续聊的 session id)。
superdesigndev/treg★ 7042
给 Agent 的工具目录:按「要做的事」检索约 2,600 个外部接口(SEO 与 SERP、外链、社交、人物与公司信息补全、广告库、抓取),查看参数与单次调用价格后直接调用,凭据由服务端注入。附带技能,MCP 行在未设置 TREG_TOKEN 前保持禁用。
T-Auto/dsh-ops★ 5074
为 Windows 的 DSH 提供 bash、PowerShell 7 及 Rust 高性能工具,减少 token 消耗。
sixtysevenlf/dsh-blender-plugin★ 1575
让 DSH agent 通过直连 TCP 通道驱动本地 Blender,提供 15 个工具:视口帧、自定义视角渲染、Python 执行、无头与作业卸载、事务回滚,以及 34 个 family / 228 个 op 的规划层。
TencentCloudBase/CloudBase-AI-Toolkit#dsh-plugin★ 1155
把腾讯云 CloudBase 后端接入 DeepSeek Harness——在对话里搭好并部署全栈应用,查询结果渲染为表格卡片(分页、排序、导出 CSV),部署后可预览真实域名,并提供 CloudBase MCP 工具集(`mcp__cloudbase__*`),登录走 device-code 流程。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。