DSH 右侧栏媒体台:抖音/YouTube 链接进来,本机 yt-dlp 下载 + ffmpeg 转码 + 官方…
30.4/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/12 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add lemonhall/dsh-media-dock该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · tool
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 24 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(unknown · 2026/10/5) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 20 处,展示前 18 条)
- 执行外部命令来自配置/变量lib/index.js:105
const child = spawn(exe, args, { - 读取本地文件lib/index.js:140
if (configured && existsSync(configured)) return configured - 读取本地文件lib/index.js:147
return readdirSync(dir) - 读取本地文件lib/index.js:152
return statSync(path).isFile() - 写入本地文件lib/index.js:168
mkdirSync(outputDir, { recursive: true }) - 读取本地文件lib/index.js:311
if (!existsSync(state) || !existsSync(cookies)) return null - 写入本地文件lib/index.js:314
mkdirSync(join(target, 'Default', 'Network'), { recursive: true }) - 写入本地文件lib/index.js:315
copyFileSync(state, join(target, 'Local State')) - 写入本地文件lib/index.js:316
copyFileSync(cookies, join(target, 'Default', 'Network', 'Cookies')) - 读取本地文件lib/index.js:446
.filter((line) => line && !line.startsWith('[') && existsSync(line)) - 读取本地文件lib/index.js:453
return { path, mtime: statSync(path).mtimeMs, name: basename(path) } - 执行外部命令来自配置/变量lib/index.js:927
child = spawn(opener, openerArgs, { windowsHide: true, detached: true, stdio: 'ignore' }) - 发起网络请求lib/client.js:81
return fetch(ROUTE_STATE) - 发起网络请求lib/client.js:105
return fetch(ROUTE_STATE, { - 读取本地文件lib/state.js:35
const parsed = JSON.parse(readFileSync(file, 'utf8')) - 写入本地文件lib/state.js:62
mkdirSync(dirname(file), { recursive: true }) - 写入本地文件lib/state.js:64
writeFileSync(tmp, JSON.stringify(state, null, 2), 'utf8') - 写入本地文件lib/state.js:65
renameSync(tmp, file)
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- ffmpeg转码
- 本地语音转写
展开完整介绍(105 字)↓
DSH 右侧栏媒体台:抖音/YouTube 链接进来,本机 yt-dlp 下载 + ffmpeg 转码 + 官方 speechToText(SenseVoice)本地转写,字幕进面板,一键让 Agent 总结。
README
由 DeepSeek 最新模型翻译生成dsh-media-dock 📺
DSH 右侧栏的媒体台 —— 把抖音 / YouTube 链接丢进来,本机下载、本机转写,字幕进面板,一键让 Agent 总结。
这是给 DSH(DeepSeek Harness) 右侧栏做的一排日常插件之一。
右侧栏本来就是 DSH 的「apps 入口」—— 官方的文件/终端/浏览器和第三方插件走完全同一套机制。
它解决的是什么
看一个 11 分钟的长视频,我想要的是它的文字,不是那 11 分钟。
而「视频 → 文字 → 总结」这条链,别人做不成:下载要本机 yt-dlp,转写要本机模型,总结要一个能读文件的 Agent —— 三样凑齐才有意义。所以它天然是个 DSH 插件,而不是一个网页工具。
展开完整文档(README 剩余 1 节)
dsh-media-dock 📺
DSH 右侧栏的媒体台 —— 把抖音 / YouTube 链接丢进来,本机下载、本机转写,字幕进面板,一键让 Agent 总结。
这是给 DSH(DeepSeek Harness) 右侧栏做的一排日常插件之一。
右侧栏本来就是 DSH 的「apps 入口」—— 官方的文件/终端/浏览器和第三方插件走完全同一套机制。
它解决的是什么
看一个 11 分钟的长视频,我想要的是它的文字,不是那 11 分钟。
而「视频 → 文字 → 总结」这条链,别人做不成:下载要本机 yt-dlp,转写要本机模型,总结要一个能读文件的 Agent —— 三样凑齐才有意义。所以它天然是个 DSH 插件,而不是一个网页工具。
流水线(每一步都踩过坑)
贴链接 / 按「📋 扒剪贴板」 ↓ ① yt-dlp 下载(走 video-download SKILL 那套:代理按站点、cookie 阶梯、重试) ↓ 优先抓现成字幕(零成本、最准) ↓ ② 没字幕才 ffmpeg → 16kHz 单声道 PCM16 WAV(按官方上限切段) ↓ ③ ctx.speechToText.transcribe()(SenseVoice,本地跑,中文强) ↓ ④ 字幕存进本插件状态 ↓ ⑤ 面板里点「让 Agent 总结」→ 直接在对话里开始总结
效果
面板
(图只截右侧栏面板。我这台机器桌面左下角有真名,所以截图从来不整屏。)
它能干什么
- 抖音 / YouTube / B站 / X 等(认不出站点也照样交给 yt-dlp —— 它支持 1000+ 站点)
- 两段式:先抓现成字幕(YouTube 大多有),没有才本地转写
- 长视频自动切段 —— 段长问官方要(maxAudioBytes / maxDurationSeconds),不拍脑袋
- 「📋 扒剪贴板」:刷抖音时点「分享 → 复制链接」,回来按一下直接开工
- 「让 Agent 总结」:走客户端 ISession.prompt,按下就在对话里开始(不是写个留言等我发现)
- media_panel 工具:add / list / read / status / retry / remove / clear —— Agent 能直接读字幕全文
依赖(三样)
| 依赖 | 作用 | 备注 |
| yt-dlp | 下载 + 抓字幕 | 本机已装(WinGet\Links\yt-dlp.exe) |
| ffmpeg | 转 16kHz 单声道 PCM16 WAV | 本机已装(chocolatey) |
| 官方 speechToText | 本地转写 | 可选 —— 没装就只能抓现成字幕 |
STT 是可选接入(按官方契约用 ctx.get('speechToText') + undefined 检查):装了就用 SenseVoice 本地转写,没装就只抓现成字幕,不会因为缺它而报错。
装
桌面版 GUI:右侧栏「插件 → 添加插件」→ 填 dsh-media-dock 或者 CLI:
dsh plugin --profile desktop add dsh-media-dock
开发者想用本地目录直接挂: plugin_manager install_bundle target=link:E:\development\dsh-media-dock
装完重启一次(界面半边在启动时固化),然后右侧栏点「+」选「媒体台」。
它是怎么work的
lib/index.js 宿主半:yt-dlp/ffmpeg 流水线 + 路由 + media_panel 工具 lib/url.js 纯函数:URL 解析 / 时长 / 切段 / 字幕清洗(36 项单测) lib/state.js 本地状态(原子写) lib/client.js 右侧栏 tab(整个模块包在 IIFE 里 —— DSH 把所有客户端插件拼成一个脚本,顶层 const 会跨插件撞名,实测撞过一次直接把应用挡在启动之外)
已知限制
- 抖音不能嵌在侧栏里看(X 大概率同理)。这不是"还没做",是四条路都试过、全堵,都实测过:
| 试的路 | 结果 |
| 侧栏 webview 开桌面版 | 页面外壳能加载、播放器一直"加载中" —— 它认出了 Electron 的 UA |
| 启动参数 --user-agent=<普通 Chrome> | 被应用自己的 setUserAgent 覆盖(UA 字符串里带 dsh-desktop),无效 |
| 插件里 import('electron') 改 session.defaultSession | 只拿到 npm 空壳包;createRequire 也 Cannot find module 'electron' |
| m.douyin.com / ?is_from_mobile_home=1 | 404(TLB)—— 移动页要移动 UA,同一把锁 |
| 换开发版的 web profile(那边是 ) | 抖音回 X-Frame-Options: DENY + CSP frame-ancestors 白名单,连页面都不给 |
根因只有一个:webview 的 User-Agent 由应用主进程设死,插件改不到。官方那个 browser tab 不归第三方管,而第三方自己渲染 <webview> 会白屏(实测)。所以:抖音走系统浏览器刷 + 「📋 扒剪贴板」扒字幕。
YouTube 完全不受影响 —— 能嵌、能播、直播都能播,可以真"边看边扒"。
- 抖音必须带 cookie(Fresh cookies (not necessarily logged in) are needed)。默认会自动把 Chrome 的 把 cookie 库复制成迷你 profile 再读(绕开 issue 7271 的锁,Chrome 开着也行);也可以配 cookiesFile 指向导出的 cookies.txt(最稳,不受 Chrome 运行状态影响)。
- 转写是有界的:官方限制 maxAudioBytes=4MB / maxDurationSeconds=120,所以长视频必然切段(11 分钟 = 7 段)。段与段是独立识别的,跨段的一句话可能被切断。
- 转写有听错:SenseVoiceSmall (INT8) 日常叙述很准,专业术语容易错(实测:共沸物 → "供废物"、辛烷值 → "锌烷值"、蔗渣 → "热扎"、葡语 → "普语")。
要更准要么换更大的模型,要么加术语纠正表。
- 不做:视频摘要之外的二次加工(剪辑/翻译/配音)、播放列表批量、字幕时间轴对齐。
踩过的坑(都写进代码注释了)
这个插件是这批里最折腾的一个,六个 bug 每个都是实测出来的:
1. client.download() 不是 async iterable(那是 imapflow 的坑)—— 类似地,yt-dlp --print 的路径在这台机器上压根没给出可用路径,得扫目录兜底;这个 bug 藏了很久,因为"现成字幕"那条路提前 return 了。
2. Invalid speech WAV:ffmpeg 默认往 WAV 里塞 LIST/INFO/ISFT "Lavf…" 元数据 chunk,官方校验的是规范 PCM16 —— 加 -fflags +bitexact -map_metadata -1。
3. Invalid speech audio size:我把段长拍成 180 秒(5.8MB),而官方上限是 4MB / 120 秒 —— 得问它要,不能猜。
4. 一个漏掉的 cookie 换了两张脸:探元数据那步没走 cookie 阶梯 → durationSec 变 0 → 切段算出空方案 → 退化成"整段当一段" → 又报大小错。看起来是大小问题,其实是探测问题。
5. 代理按站点:抖音/B站这类国内站点绝不能走代理;而且即使不走代理也要显式传 --proxy "",否则 yt-dlp 会读环境变量里的 HTTP_PROXY,等于偷偷走了。
6. "关窗口 ≠ 退进程":Chrome 关了窗口还剩 12 个进程,锁着 cookie 库 —— 所以要复制成迷你 profile。
License
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
lemonhall/dsh-media-dock
DSH 右侧栏媒体台:抖音/YouTube 链接进来,本机 yt-dlp 下载 + ffmpeg 转码 + 官方…
相关插件 · 工具 / 效率
破甲管控台kingcharleslzy-ai/dsh-purge
dsh-purge Community · DeepSeek Harness 社区维护版:宿主兼容、状态诊断、提示词管理、更新与本机备份回滚。基于小杨 / YuJunZhiXue 的 dsh-purge。
★ 3,801已汉化DeepSeek 客户端
74.5
网文长卷lingfengQAQ/webnovel-writer
基于 Claude Code 的长篇网文辅助创作系统,解决 AI 写作中的「遗忘」和「幻觉」问题,支持 200…
★ 7,636已汉化DSH
72.2
多智能体协作HKUDS/AutoSwarm
AutoSwarm: Unify Your Agents. Unify Your Context (Codex · Claude Code · DeepSeek Harness · Muse · Grok · WorkBuddy· nanobot · and more)
★ 2,082已汉化DSH
71.7
Vox 拼贴视频生成Alisa0808/vox-director
🎬 Vox Director拼贴动效导演
★ 2,129已汉化DSH
71.4
Agent 演化引擎Q00/ouroboros
智能体 OS:智能体自己变聪明,我们只守住底线:面试准入、分阶段评估、带预算的进化循环。MCP 服务器,14 种运行时:Claude Code、Codex CLI、Gemini CLI、OpenCode、Copilot、Kiro 等。
★ 6,292已汉化DSH
71.3
智能体运行框架路由HarnessRouter/harnessrouter
智能体运行框架的统一接口。
★ 3,800已汉化DSH
71.2