关于 demusic
demusic 是本地运行的命令行工具和 MCP 服务,可检测并移除 AI 生成视频中的背景音乐,同时保留对白、音效和环境声。它只替换检测到音乐的片段,其他音频和视频流保持不变。
主要功能
- 01检测含音乐的片段
- 02仅替换检测到的区段
- 03保留对白和演唱人声
- 04使用本地 Demucs 或 fal.ai 分离
- 05批量处理并输出 JSON
适用场景
- 01清除生成视频中的背景音乐
- 02在 CI 流程中检查片段是否含音乐
- 03剪辑前批量处理视频文件夹
MCP 相关
MCP 服务提供只读检测工具 `check_music`,以及将清理后的副本写入新文件且不覆盖输入的 `remove_music`。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx demusicDEMUSIC_SEPARATORdemucs (local, needs demusic[demucs]) | fal (needs FAL_KEY) - default demucsFAL_KEY密钥Optional: your fal.ai key when DEMUSIC_SEPARATOR=falDEMUSIC_FFMPEGPath to ffmpeg (default: ffmpeg on PATH)本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
2收录的工具列表 · 更新于 1 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| path | string | 是 | |
| threshold | number | 否 |
详细介绍
demusic
demusic 会移除 AI 视频模型(Seedance、Kling、Veo、Hailuo、 Wan 等)在生成片段时混入的背景音乐,同时保留对白、音效和环境声。 它会找出音乐所在的位置,只替换那些位置的音频,因此片段的其余部分 不会受到影响。本地运行、免费,支持命令行和 MCP 服务。
为什么需要 demusic
原生音频视频模型经常会擅自添加背景音乐:镜头开头几秒的配乐,或对白下方的铺底音乐。把十个这样的片段剪在一起,就会有十段音乐互相干扰,而且你也无法叠加自己的配乐。
常见的解决办法是使用人声移除工具,只保留人声——这样会连同音乐一起丢掉脚步声、关门声、雨声和室内底噪,而且对原本没有音乐的片段也不适用。我们在 Dawnwood 制作 AI 剧集时,会用 demusic 处理每个片段:
- 分离:将音频分离为多个音轨(Demucs
htdemucs_6s,在本地运行或使用你的 fal key)。 - 音量够作为背景音乐吗? 旋律音轨必须达到可听音量(> -50 dBFS)。
- 确实是音乐吗? AudioSet 分类器必须在伴奏上检测到持续 2 秒以上的音乐。引擎声、枪声和室内底噪能通过第 2 步,但无法通过这一步。
- 仅移除这些片段:这些位置的音频会变为对白 + 打击乐/撞击声,并添加 0.25 秒交叉淡化;其他位置则保留原始音频。画面采用流复制(不重新编码)。
它的设计刻意偏保守。在 164 个没有音乐的片段中,误判了 2 个;在人工凭听觉标记的 87 个片段中,它检测出了 33 个。漏检的都是音量很低的背景音乐——可以调低 --threshold,或者在确定片段有音乐时使用 --mode force。
校准详情。
安装
需要 Python >= 3.10,且 ffmpeg 必须位于 PATH 中。
pip install "demusic[demucs]" # local separation (pulls in PyTorch; CPU is fine)
# or, no torch, separation on fal.ai with your own key:
pip install "demusic[fal]" && export FAL_KEY=...
音乐分类器(约 90 MB 的 ONNX,BSD-3)会下载到 ~/.cache/demusic,只需下载一次。
快速开始
# where is the music?
demusic check shot_012.mp4
# shot_012.mp4: MUSIC spans 0-2.8s melodic -42.1 dBFS p=0.34
# write shot_012.demusic.mp4 with the music removed
demusic strip shot_012.mp4
# a whole folder; clean copies of every file (unchanged ones copied) into clean/
demusic strip renders/*.mp4 --out-dir clean/
| 选项 | 含义 |
|---|---|
--separator demucs|fal|DIR | 本地 Demucs(默认)、使用 FAL_KEY 的 fal.ai,或存放已分离音轨的文件夹(vocals.wav、drums.wav、bass/guitar/piano/other.wav 或 music.wav) |
--mode spans|whole|force | 仅替换检测到音乐的位置(默认)/检测到音乐时替换整条音轨/始终替换,不进行检测 |
--threshold 0.3 | 分类器的音乐概率;0.2 能检测到音量更低的背景音乐,但误报率更高 |
--loud-floor -50 | 旋律音轨的音量门限(dBFS) |
-o FILE / --out-dir DIR | 单个文件的输出路径/批处理的输出目录 |
--json | 在标准输出上输出一个 JSON 对象(files[],包含 music、spans、melodic_dbfs、strength、action、output) |
退出代码:0 正常(对于 check:未检测到音乐),1 check 检测到音乐,2 用法错误,3 失败。
在 CI 或渲染流水线中运行 demusic check,即可在片段存在背景音乐时让构建失败。
速度:在笔记本 CPU 上分离音频约需实时速度(10 秒的片段约需 10–20 秒),使用 GPU 时会快得多。检测本身只需几百毫秒。
Python
from demusic.core import process
r = process("shot.mp4", "shot.clean.mp4") # strip
r = process("shot.mp4", strip=False) # check only
print(r["music"], r["spans"])
AI Agent(MCP)
claude mcp add demusic -- demusic mcp # Claude Code
# or any MCP client: command "uvx", args ["--from", "demusic[demucs]", "demusic", "mcp"]
工具:check_music(只读)和 remove_music(写入新文件,不会覆盖输入文件)。在服务环境中设置 DEMUSIC_SEPARATOR=fal 即可使用 fal。此外还有一个 Claude skill 和 AGENTS.md。
限制
- 如果检测到场景中本应存在的音乐(画面中的乐队、收音机),也会将其移除。请跳过这些片段。
- 在剥离出的片段内,非打击乐音效(水龙头流水声、风声)会和音乐一起被移除;Demucs 没有单独的音效声部。片段范围外不会有任何变化。
- 演唱的人声会进入人声声部并予以保留。
致谢
Apache-2.0。demusic 会在每个输出文件的 comment 标签中写入 cleaned with demusic by Dawnwood。如果它为你节省了时间,请保留这条信息,并注明“demusic by Dawnwood”——这是请求,并非使用条件(参见 NOTICE)。
由 Dawnwood 制作,这是一家 AI 剧集工作室。我们在制作中使用的其他工具:dramapack(短剧交付包和质量检查) · 我们所有的开源项目。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。