dsh-vidora:本机音视频转写与 Markdown 讲义

前言

在 DSH 里处理课堂录像、播客或会议录音时,常见做法是把文件交给云端 ASR,再把长文本丢给主模型总结。转写与讲义一旦经过云端,来源追溯、中断恢复和「整段链路是否留在本机」都不好控。下面介绍的 Vidora(仓库 a49a/dsh-vidora,维护者 a49a)是面向 DeepSeek Harness 的本地优先插件:在本机用 FFmpeg 解码、VAD 分段、Qwen3-ASR 转写、Qwen3-ForcedAligner 对齐,并可调用本地 LLM 生成带来源片段关联的 Markdown 讲义。DSH 提供对话入口与工具编排;核心业务数据(Transcript / Document JSON)不依赖 Harness 私有接口,便于后续扩展到浏览器或桌面端。

这是什么

Vidora 的定位是本地优先的音视频知识文档化工具。输入本地 MP4、MKV、MP3、WAV 等文件后,流水线在本机完成解码与推理,输出 transcript.json、讲义 document.json、notes.md 以及 exports/ 下的导出文件。插件当前版本为 0.1.0(见仓库 package.json),许可证 MIT。社区目录页:SkillHub 插件页;源码:GitHub a49a/dsh-vidora。

处理链路可概括为:

本地音视频
  → FFmpeg 解码 / 16kHz 单声道
  → VAD + 静音感知分段
  → Qwen3-ASR-0.6B(可切换 1.7B)
  → Qwen3-ForcedAligner-0.6B
  → transcript.json
  → 本地 LLM 分窗口提取 → 合并 → 确定性 Markdown 渲染
  → notes.md + document.json + exports/

维护者在 README 中说明:Phase 1–5 最小可运行链路已实现;macOS Apple Silicon(M1 Pro,32GB,MPS)上完成真实推理测试。Linux、Windows 与 Intel Mac 尚未在其本机验证,代码含 CPU fallback,应视为兼容目标而非已验证结果。

核心功能

DSH 工具一览

插件向 Cordis 注册的工具如下(名称与职责以 README 为准):

工具 功能
vidora_transcribe 创建本地转写任务;默认 wait=true 等待完成,也可异步轮询
vidora_task_status 查询阶段、已处理时长、总时长、片段数、错误
vidora_cancel_task 取消任务;检查点保留,可恢复
vidora_get_transcript 分页读取转写正文(仅受信任的本地会话)
vidora_generate_notes 用本地 LLM 生成精简/详细/可读转写/复习提纲
vidora_get_document 读取讲义正文(仅受信任的本地会话)
vidora_export 导出 Markdown / JSON / TXT / SRT(不返回正文)
vidora_list_models 查询模型、设备、FFmpeg、Worker、本地 LLM 与隐私状态

媒体格式

支持 MP3、WAV、FLAC、M4A、MP4、MKV、WebM、OGG、Opus、AAC、MOV、AVI、M4B。

任务恢复与缓存

Python Worker 由 Node 子进程拉起,推理不在 Harness 主进程内执行。任务状态写在 tasks/<id>/task.json,每个 ASR 片段后写 checkpoint.json。取消或崩溃后可用 vidora_transcribe 的 resumeTaskId 恢复。相同源文件在 SHA-256、模型、语言、对齐与 VAD 参数一致时会命中缓存,不重复 ASR。

严格本地与隐私

privacy.strictLocal 默认开启:ASR 在本机不等于整段工作流都在本机——若当前 DSH 主模型是云端,vidora_get_transcript / vidora_get_document 在不可信 provider 下不会出现在工具列表;讲义生成走独立配置的本地 LLM 端点;vidora_export 只返回路径与大小。Vidora 不会自动回退到云端模型。若要在对话里直接读转写正文,需将主模型切到已确认的本地 provider,并将其 id 写入 privacy.trustedLocalProviders;否则用 vidora_export 在本机打开文件。

安装与启用

前提(README「快速安装」):Node.js >= 22、Python >= 3.9、FFmpeg/ffprobe、DSH >= 0.2.2-rc.1 且 < 0.3.0(已在 DSH 0.2.2-rc.1 上实测)。

在已取得插件源码目录的前提下,先做构建与 Worker、模型准备:

cd dsh-vidora

# 1. 构建 TypeScript 插件
npm install
npm run build

# 2. 安装独立 Python Worker 虚拟环境(不修改全局 Python)
node scripts/install-worker.mjs --yes

# 3. 确认后下载模型权重(默认写入操作系统用户数据目录)
node scripts/prepare-models.mjs --model qwen3-asr-0.6b --yes
node scripts/prepare-models.mjs --model qwen3-forced-aligner-0.6b --yes

下载前会显示模型来源、大小与目标目录;prepare-models 支持 --endpoint https://hf-mirror.com、--dest、--data-dir。Worker 推理时设置 HF_HUB_OFFLINE=1,不会在运行时拉取权重。

安装到 DSH profile(必须使用资料中的 link 方式,路径换成你本机绝对路径):

dsh plugin --profile desktop add link:/absolute/path/to/dsh-vidora

编辑 ~/.dsh/profiles/desktop/cordis.patch.yml,为 vidora 增加配置,例如:

- id: vidora
  config:
    dataDir: /Users/you/Library/Application Support/Vidora
    worker:
      pythonPath: /absolute/path/to/dsh-vidora/python-worker/.venv/bin/python
    asr:
      modelsDir: /Users/you/Library/Application Support/Vidora/models
      device: auto
      align: true
    llm:
      mode: openai            # off | ollama | openai | harness
      baseUrl: http://127.0.0.1:8090/v1
      model: qwen2.5-3b-instruct
    privacy:
      strictLocal: true
      trustedLocalProviders: []

Linux 默认数据目录为 $XDG_DATA_HOME/vidora 或 ~/.local/share/vidora,可用 dataDir 或环境变量 VIDORA_DATA_DIR 覆盖。重启 DSH 或等待 profile 热重载后工具生效。

典型用法

在 DSH 对话中可直接用自然语言驱动,README 示例:

请把 /Users/you/Videos/os-lecture.mp4 转换成文字,并整理成一份精简的 Markdown 教学讲义。

仅转写:

只转文字,不需要总结。

基于已有 Transcript 重新生成讲义:

使用刚才的 Transcript 重新生成一份详细讲义。

本地 LLM 通过 llm.mode 配置:ollama(默认 http://127.0.0.1:11434)、openai(OpenAI 兼容本地端点)、harness(复用 DSH 已注册本地 provider,且须列入 trustedLocalProviders)、off(仅 ASR、缓存与导出)。端点默认须为回环地址;非本机端点需显式 llm.allowNonLoopback=true。

数据落盘结构(节选):

Vidora/
├── meta.json
├── models/
├── projects/
│   └── prj-<source-hash>/
│       ├── transcript.json
│       ├── documents/
│       └── exports/
└── tasks/<task-id>/
    ├── task.json
    └── checkpoint.json

适用场景与注意

适合谁:需要在 DSH 对话里编排「本地转写 → 可选本地讲义 → 导出」,且重视检查点恢复、缓存与 Transcript/Document 契约(毫秒时间戳、source_segment_ids 关联、LLM 不覆盖原始转写)的开发者或自托管用户。

运行权限:插件以当前 DSH 进程的用户权限运行,可读写你配置的 dataDir 与登记的源媒体路径。安装前请阅读仓库 安全与隐私 与 LICENSE,自行核对源码。

平台:官方 README 的真实推理 benchmark 在 Apple Silicon 上完成;在其他平台部署前建议先 vidora_list_models 检查 FFmpeg、Worker 与设备,必要时用 asr.device: cpu 做功能验证。

结尾

a49a/dsh-vidora 把长音视频拆成可恢复的本地 ASR 任务,并把讲义生成与「正文是否进入云端会话」拆开设计,适合作为 DSH 生态里的本地知识文档化插件。更多字段见仓库 配置参考 与 数据契约。

  • 目录页:https://www.skillhub.cn/plugins/a49a/dsh-vidora
  • 源码:https://github.com/a49a/dsh-vidora
羽毛球分组比赛记分
小程序二维码

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

Xiaoye