dsh-song-id:给视频链接听出歌名(Shazam + 网易云双引擎)

前言

在 DSH 对话里处理视频相关问题时,常见需求是「这条片子背景乐是什么」「第几十秒那首叫什么」。自己打开链接、拖进度条、再换 App 识曲,步骤多,也不方便让 agent 串进后续流程。若把「取链、抽音频、识曲、整理元数据」收成一条工具调用,智能体可以直接根据 URL 或时间点返回答案。

下面介绍社区插件 dsh-song-id(维护者 A-2788553793,分类:联网工具)。它在 DSH 中注册工具 song_identify:用 yt-dlp 解析链接并取音频,ffmpeg 切片后并行查询 Shazam(shazamio)与网易云音乐两个识曲引擎,返回歌名、歌手、专辑、流派、封面与命中位置等信息。README 写明目前主要测过 B 站链接;url 也支持 yt-dlp 能处理的其它站点。

这是什么

dsh-song-id 是标准 DSH bundle(package.json 里 dsh.bundle.patch 指向 cordis.patch.yml),npm 包名 dsh-song-id,当前版本 0.1.1,许可证 MIT,要求 Node >= 20。插件本身零 npm 依赖;识曲依赖本机上的 yt-dlp、ffmpeg、Python 3.9+,以及首次运行时自动装进插件目录 vendor/py 的 shazamio。网易云侧使用自带 wasm 指纹器(vendor/afp/),无需 API key 或登录。

串烧、混剪、DJ 串烧类视频会在输出里汇总多段采样命中的不同曲目,而不是只报第一首。

核心功能

工具与参数

agent 调用 song_identify。主要参数如下(摘自 README):

参数 默认 说明
url 必填 B 站链接 / BV 号 / av 号 / b23.tv 短链 / yt-dlp 支持的任意链接
at — 从第几秒开始认;指定后从该点往后连续取样,不再按比例撒点
clips 3 试几段(1–5)
clipSeconds 12 每段长度(5–30)
cookies — cookies.txt 路径,或环境变量 DSH_VIDEO_COOKIES

工具声明为并发安全,timeoutMs 为 300 秒。未认出时会返回 ❓ 没认出来 及已试位置,并建议调整 at / clipSeconds。

识别流程(概要)

  1. 归一化链接并查缓存($DSH_HOME/storages/song-id/cache.json,TTL 7 天)。
  2. yt-dlp 仅解析元数据;直播、播放列表会拒绝;超过 60 分钟且未给 at 会拒绝。
  3. 默认在时长约 12% / 42% / 72% 取 3 段;必要时追加更多采样点或变调(×1.06 / ×1.12)再试。
  4. 每段经 ffmpeg 切成识曲用音频后,Shazam 与网易云并行查询;合并时 Shazam 同片段有结果则丢弃该处网易云候选,主答案优先 Shazam,仅网易云命中时标「存疑」,变调命中会标「可能不准」。

环境变量(可选)

除 DSH_VIDEO_COOKIES 外,README 还提到:DSH_YTDLP_PATH、DSH_FFMPEG_PATH、DSH_PYTHON_PATH,用于指定可执行文件路径。

安装与启用

插件以 DSH 的 bundle 方式安装。安装命令须使用资料原文,不要凭仓库名拼接其它 add 命令。

1. 安装 bundle

在 DSH 对话中让 agent 执行,或使用 DSH 插件管理;将 <插件目录> 换成本仓库的绝对路径:

plugin_manager install_bundle  target="link:<插件目录>"

装完后会更新 profile 的 package.json、把 dsh-song-id 写入 dsh.profile.bundles,并在 node_modules 建立指向该目录的符号链接。开发时也可在 profile 的 package.json 中手工添加 link:<插件目录> 依赖并列入 bundles。

装完必须重启一次 DSH;bundle 树在宿主启动时组合,热装进 profile 不会动态加载。

2. 安装外部依赖

组件 作用 Linux 示例
yt-dlp 解析链接、下载音频 pipx install yt-dlp 或发行版包管理器
ffmpeg 切片、转码 sudo apt install ffmpeg
Python 3.9+ 运行 shazamio sudo apt install python3

B 站接口变动频繁,建议定期更新 yt-dlp(如 yt-dlp -U)。shazamio 首次识曲时自动 pip install 到插件 vendor/py;也可预装:

node scripts/install-vendor.mjs

3. 自检

在插件目录执行:

node bin/doctor.mjs

检查 yt-dlp、ffmpeg、python、shazamio、网易云指纹器与接口可达性;任一项失败会给出修复提示。

典型用法

在对话里

重启 DSH 后,直接用自然语言附带链接即可,例如:

  • 「试试能不能听歌识曲 https://www.bilibili.com/video/BVxxxxxxxxxx/」
  • 「BVxxxxxxxxxx 第 75 秒那首是什么」
  • 「这个视频的 BGM 是什么:https://b23.tv/xxxx」

agent 会调用 song_identify 并以 Markdown 汇总结果(含引擎来源、视频标题、命中时间点、Shazam 链接等)。

命令行调试

node scripts/smoke.mjs "https://www.bilibili.com/video/BVxxxxxxxxxx" 70
node scripts/smoke.mjs "https://www.bilibili.com/video/BVxxxxxxxxxx" --fresh

第二行用于忽略缓存。

适用场景与注意

适合:需要在 DSH 工作流里根据视频 URL 或时间点查 BGM、验证混剪曲目列表、区分降调版与曲库 DJ 版等场景;愿意在本机安装 yt-dlp / ffmpeg / Python 的开发者。

注意:

  1. 插件在当前 DSH 进程权限下运行,会访问网络(yt-dlp、Shazam、网易云接口)并在 $DSH_HOME/storages/song-id/ 读写缓存与临时文件。安装前请查阅仓库源码与 MIT 许可证,自行评估隐私与合规(README「隐私」一节有说明)。
  2. README 写明「目前只测试了 b 站视频链接」;其它站点依赖 yt-dlp 支持情况,需自行验证。
  3. 变调识别易误判;输出中的变调、存疑标记应作为核对提示,而非最终裁断。
  4. 社区目录 SkillHub 插件页 与 GitHub 由社区维护,与 DeepSeek / 幻方无官方从属关系;DSH 生态遵循「一切皆插件」,按需选用即可。

结尾

dsh-song-id 把「视频链接 → 双引擎识曲 → 结构化 Markdown」收成单一 DSH 工具,适合在 agent 对话里直接问 BGM 或指定秒数的曲目。安装以 plugin_manager install_bundle 与本地 link: 路径为准,装依赖后跑 node bin/doctor.mjs,重启 DSH 即可使用。

  • 目录页:https://www.skillhub.cn/plugins/A-2788553793/dsh-song-id
  • 源码与文档:https://github.com/A-2788553793/dsh-song-id
羽毛球分组比赛记分
小程序二维码

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

Xiaoye