前言¶
做短视频或口播类内容时,常见做法是人工逐条看样片、记钩子与段落节奏,再凭感觉仿写。这个过程费时,且很难把「结构」和「语言指纹」说清楚。DeepSeek Harness(DSH)把能力做成插件后,可以在对话里指定本地视频目录,让模型先拿到可核对的多模态材料,再按固定流程拆解并出稿。
下面介绍社区插件 dsh-video-distill(视频蒸馏):读目录里的视频,完成口播转写、关键帧、镜头切点与元数据抽取,再拆成可复用模板并生成多条差异化同款文案。插件由 yiz-dev 维护,在 SkillHub 分类为工作流;当前 GitHub 星标为 0,许可证 MIT,package 版本 0.1.0。
这是什么¶
dsh-video-distill 是 DSH 插件,定位可以概括为:
读视频 → 转写口播 → 抽关键帧 → 数镜头切点 → 拆成结构模板 → 按模板写新文案。
它不替代你的选题判断,而是把「一条视频里模型该看什么」拆成四叠材料,避免模型对着空转写硬编文案。转写或抽帧失败时,插件会明确报告「口播没拿到」并给出修法,而不是返回空文本。
核心功能¶
四叠材料¶
每条视频会被整理成下表中的材料,供 DSH 模型理解:
| 材料 | 来源 | 用途 |
|---|---|---|
口播全文 + [mm:ss] 时间轴 + 语速 |
同名字幕 / 内嵌字幕 / 本地 faster-whisper / 兼容 OpenAI 的转写 API | 拆钩子、拆结构、学语言指纹 |
| 关键帧 6 张 + 一张拼图 | ffmpeg 均匀抽帧(避开片头片尾) | 看构图、字幕样式、出镜方式、画面情绪 |
| 镜头切点时间表 | scene 检测 | 判断快剪还是长镜头 |
| 元数据 | ffprobe | 时长、横竖屏、帧率、码率、是否有人声 |
蒸馏与成稿¶
按插件自带手册 prompts/distill.md 做十项拆解,抽出一个可复用模板,再生成 3 条故意不同的同款文案(同骨架 / 同钩子换骨架 / 同人群换切口)。
暴露的工具与产出目录¶
对话中无需记工具名,模型会调用例如 video_scan、video_distill、video_guide、video_save、video_config 等能力。运行数据落在 $DSH_HOME/video-distill/,插件包本身只读,升级重装不丢配置与缓存:
$DSH_HOME/video-distill/
├── config.json
├── secret.json
├── work/<视频名>-<指纹>/ # transcript、frames、sheet.jpg、bundle.json 等
├── out/<日期>/<标题>.md # 拆解与文案成稿
└── logs/
安装与启用¶
通过 DSH 设置添加(README 原文)¶
在 DSH「设置 → 插件 → 添加」中粘贴下列来源,然后重启 DSH(bundle 层需重启才组装):
github:Mrliu12345/dsh-video-distill
连不上 GitHub 时的替代装法、装完需补的依赖,见仓库内 INSTALL.md。
本地 link 安装(开发或改代码即生效)¶
已有仓库目录时,可用 CLI 装进当前 profile:
# <本目录> = 仓库绝对路径
dsh plugin --profile desktop add link:<本目录>
装完后同样必须重启 DSH。
无 dsh CLI 时的手动方式¶
New-Item -ItemType Junction `
-Path "$env:USERPROFILE\.dsh\profiles\desktop\node_modules\dsh-video-distill" `
-Target "<本目录的绝对路径>"
并在 profile 的 cordis.patch.yml 末尾追加:
- id: video-distill
name: dsh-video-distill
装完自检¶
不依赖 DSH 时可运行:
node tools/selftest.mjs
node tools/e2e.mjs <一个放视频的目录>
selftest.mjs 为 187 项离线检查;e2e.mjs 会真实调用 7 个工具跑一遍。
依赖与环境¶
| 依赖 | 必须 | 说明 |
|---|---|---|
| ffmpeg + ffprobe | 是 | 抽音轨、抽帧、切点检测;可用 winget install Gyan.FFmpeg,或配置 ffmpegPath |
| 转写 | 是(否则只能看画面) | 四条路径见下,backend=auto 按顺序尝试 |
| Node | ≥ 22 | DSH 要求 |
| Python | ≥ 3.9 | 仅本地 faster-whisper 需要;插件自建 venv |
转写四条路:
- sidecar:视频旁同名
.srt/.vtt/.ass/.json - embedded:容器内嵌字幕,ffmpeg 抽取
- local:本地 faster-whisper;对话中说「装一下本地转写」,或
node tools/cli.mjs asr-install --wait;默认small模型 - api:兼容 OpenAI
/v1/audio/transcriptions的服务;Key 存$DSH_HOME/video-distill/secret.json或环境变量DSH_ASR_KEY
引擎要求:dsh ≥ 0.1.7-rc.1(见 package.json)。
典型用法¶
对话示例¶
你:D:\videos\口播样例 里有些视频,先看看有什么
DSH:video_scan → 2 条,一条 20 秒竖屏有声,一条 16 秒竖屏带字幕
你:把带字幕那条拆给我看
DSH:video_distill + video_guide → 十项拆解 + 可复用模板(读完还要 read_image 看拼图)
你:照这个模子写三条文案,存下来
DSH:video_save → out/2025-xx-xx/<标题>.md
命令行(不开 DSH)¶
node tools/cli.mjs status --verbose
node tools/cli.mjs scan D:\videos\样例
node tools/cli.mjs distill D:\videos\a.mp4
node tools/cli.mjs guide
node tools/cli.mjs asr-install --wait
常用配置(可通过 video_config 或改 config.json)¶
| 项 | 默认 | 说明 |
|---|---|---|
dir |
空 | 默认视频目录 |
backend |
auto |
auto/sidecar/embedded/local/api/none |
language |
zh |
转写语言 |
modelSize |
small |
本地模型规模 |
frames |
6 |
关键帧数量(1–16) |
sceneDetect |
true |
是否检测镜头切点 |
sceneThreshold |
0.3 |
切点阈值 |
maxVideos |
20 |
单次扫描上限 |
minSec / maxSec |
3 / 1800 |
时长过滤 |
改 config.json 后生效,无需重启 DSH。
适用场景与注意¶
适合:本地有一批口播或短视频样片,需要快速摸清结构、钩子与节奏,并在同一骨架下批量试写文案的创作者或智能体工作流搭建者。
注意:
- 插件以当前 DSH 进程权限访问本地路径与调用 ffmpeg、转写服务;安装前应自行查看源码与 MIT 许可证,确认路径与 Key 的存放方式可接受。
- 硬字幕(烧在画面里)不是字幕流,无法当口播文本抽出,需依赖关键帧与模型读图。
- 切点数为 0 但明显有换镜时,可将
sceneThreshold调到0.2。 - 「口播没拿到」时运行
node tools/cli.mjs status,检查 ffmpeg 与local.ok/api.ok。 - SkillHub 社区目录与 DeepSeek / 幻方无官方从属关系;DSH 生态是「一切皆插件」,本插件是其中一条工作流扩展。
结尾¶
dsh-video-distill 把样片分析从「凭感觉看片」变成「转写 + 画面 + 节奏 + 元数据」的可复现流水线,再在模板约束下出多条差异化文案。目录页与源码:
- SkillHub:https://www.skillhub.cn/plugins/yiz-dev/dsh-video-distill
- GitHub:https://github.com/yiz-dev/dsh-video-distill
README 中另给出仓库 Mrliu12345/dsh-video-distill 作为 DSH 插件添加源;若与 fork 同步情况不一致,以你实际添加成功的来源为准。