免费POC, 零成本试错
AI知识库

AI知识库

学习大模型的前沿技术与行业落地应用


收藏

我用一段说话声,让 AI 完整翻唱了一首歌

发布日期:2026-09-01 17:38:20 浏览次数: 1832
作者:AI贺贺

微信搜一搜,关注“AI贺贺”

推荐语

一文详解AI翻唱全链路:从工具使用到Mac实操,附完整成果与避坑指南。
核心内容:
1. AI翻唱核心概念澄清(非TTS,实为Singing Voice Conversion)
2. 完整五步技术链路拆解(授权→分离→声纹转换→混音→导出)
3. 工具与环境准备及实操流程(Mac配置、工具安装、项目搭建与问题解决)

杨芳贤
53AI创始人/腾讯云(TVP)最具价值专家

从人声分离、声纹转换到最终混音,用 Demucs、Seed-VC 和 FFmpeg 在 Apple Silicon Mac 上完成一次真实的 AI 翻唱。

这篇文章不只是介绍几个工具。我会从一个空目录开始,把整条链路完整跑一遍,并把我真实遇到的 macOS 问题一起讲清楚。

完成后,你将得到:

  • 一条与原唱时长一致的 AI 歌声轨。
  • 一条从原曲分离出来的伴奏轨。
  • 一个可以继续编辑的 WAV 母带。
  • 一个方便试听的 M4A 成品。

**重要前提:**只处理你有权使用的歌曲、录音和人声。本文不鼓励冒充他人,也不代表获得了原曲或伴奏的发布权。


AI 翻唱到底是怎么做的?

先澄清一个最容易误解的地方:

AI 翻唱不是让 TTS 照着歌词读一遍。

TTS 擅长的是“把文字变成说话”,而翻唱还需要保留原唱的旋律、音高、节奏、咬字和情感。这类任务更准确的名称是 Singing Voice Conversion,歌声转换。

整条链路可以压缩成五步:

授权歌曲
  -> Demucs 分离原唱和伴奏
  -> Seed-VC 读取原唱的演唱信息
  -> Seed-VC 读取目标参考声的声纹
  -> 生成新歌声,再与伴奏混合

各个工具的分工如下:

工具
负责什么
Demucs
把原曲拆成人声和伴奏
Seed-VC
保留演唱,替换声纹
豆包 TTS(可选)
生成已授权的目标说话参考声
FFmpeg
格式转换、混音、限幅和导出

Seed-VC 内部还会调用几个重要模块:

  • Whisper-small
    :提取原唱的发音和内容特征。
  • RMVPE
    :提取基频 F0,也就是歌曲的音高轨迹。
  • CAMPPlus
    :识别目标参考声属于“谁”。
  • BigVGAN
    :把模型生成的频谱还原成真正可播放的声音。

开始前要准备什么

本文以 Apple Silicon Mac 为例。我的实际环境是 Python 3.10.18、PyTorch 2.13.0、Demucs 4.1.0 和 FFmpeg 8.0.1。

你需要:

  1. 一台剩余空间至少为 6 GB 的 Mac。
  2. Python 3.10。
  3. Git 和 FFmpeg。
  4. 一首你有权处理的本地歌曲。
  5. 一段经过授权的目标说话声。

首次运行会下载约 2.3 GB 模型,再加上 Python 环境和中间 WAV,整个项目占用 4–5 GB 很正常。

安装系统工具

brew install ffmpeg git python@3.10

确认安装成功:

ffmpeg -version
git --version
python3.10 --version

创建项目

mkdir ai-cover-demo
cd ai-cover-demo

mkdir -p input reference stems converted final tools

python3.10 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip

如果终端行首出现 (.venv),说明虚拟环境已经启用。

安装 Demucs 和 Seed-VC

pip install demucs

git clone https://github.com/Plachtaa/seed-vc.git tools/seed-vc
git -C tools/seed-vc checkout 51383efd921027683c89e5348211d93ff12ac2a8

pip install -r tools/seed-vc/requirements-mac.txt

本文锁定到我已经实际验证的 commit,避免“同一条命令,换一天就不能跑”。Seed-VC 仓库[1] 已经进入只读归档状态,因此固定版本尤其重要。

先说明:这两个上游仓库都已经归档

本文使用的两个核心项目目前都处于 GitHub 只读归档状态:

  • Seed-VC[2] 于 2025 年 11 月 21 日归档。维护者没有在仓库中给出明确的归档原因。
  • Demucs[3] 于 2025 年 1 月 1 日归档。原作者在 README 中说明自己已经离开 Meta,因此该仓库不再维护;作者另建的 fork 也只计划处理重要错误,不再积极开发新功能。

“归档”不等于模型失效,也不等于已经安装的 Python 包会立即停止工作。它表示上游仓库已经只读,不会再正常合并 PR、修复新依赖兼容问题或持续提供安全更新。

这也是本文固定 Seed-VC commit、Python 版本和实际参数的原因。本次项目已经在 2026 年 8 月 31 日跑通完整歌曲,但未来的 PyTorch、Transformers、TorchCodec 或 macOS 更新仍可能破坏这套环境。适合实践的原则是:

  1. 第一次跑通后导出依赖锁定文件,不要随意升级整个环境。
  2. 保留已经验证的 commit 和本地兼容补丁。
  3. 先用 20 秒音频测试,再决定是否迁移到新项目。
  4. 不把“仓库还能下载”等同于“项目仍被积极维护”。

第一步:准备歌曲和参考声

准备授权歌曲

把本地歌曲放到:

input/source.m4a

如果你的文件是 MP3、FLAC 或 WAV,只需要在后面的命令中替换文件名。

先统一转为 44.1 kHz / 16-bit / stereo WAV:

ffmpeg -y \
  -i input/source.m4a \
  -ar 44100 \
  -ac 2 \
  -c:a pcm_s16le \
  input/source.wav

检查输出:

ffprobe -v error \
  -show_entries stream=codec_name,sample_rate,channels \
  -show_entries format=duration \
  -of json \
  input/source.wav

成功时应看到:

  • codec_name
     是 pcm_s16le。
  • sample_rate
     是 44100。
  • channels
     是 2。

准备目标参考声

这是最影响音色的素材。

对于大多数读者,最简单的方法是:录制自己的声音。

用手机或 Mac 录制 15–30 秒自然说话,保持:

  • 只有一个人说话。
  • 没有背景音乐。
  • 距离麦克风稳定。
  • 不要全程念稿腔,留一点真实的轻重和情绪变化。
  • 不要录得过轻或出现爆音。

豆包声音复刻 2.0 的官方最佳实践也建议使用清晰、单人、无噪声的 14–30 秒 WAV 参考音频。如果你已经拥有经过授权的克隆音色,也可以通过豆包声音复刻[4]生成这段参考声。

对外分享教程时,不要公开真实 Voice ID、API Key 或任何账号凭证。

把录音放到:

reference/voice-raw.wav

标准化为单声道 WAV:

ffmpeg -y \
  -i reference/voice-raw.wav \
  -af "highpass=f=60,loudnorm=I=-18:TP=-2:LRA=7" \
  -ar 44100 \
  -ac 1 \
  -c:a pcm_s16le \
  reference/voice.wav

先播放一遍 reference/voice.wav。如果还能听到音乐、回声、风噪或第二个人的声音,先重新录制,不要指望后面的模型帮你修复。

第二步:把原唱和伴奏分开

执行:

python -m demucs \
  --two-stems=vocals \
  -n htdemucs \
  input/source.wav \
  -o stems

首次运行会自动下载 Demucs 模型。完成后应出现:

stems/htdemucs/source/vocals.wav
stems/htdemucs/source/no_vocals.wav

先不要急着进入下一步,把两个文件都听一遍:

  • vocals.wav
     应该主要是原唱人声。
  • no_vocals.wav
     应该主要是伴奏。

轻微串音很常见。但如果人声轨中还有非常明显的鼓点、合成器或和声,转换后往往会出现金属感和沙哑噪声。

Demucs 官方仓库说明了 htdemucs 以及 two-stem 模式的使用方法,可以参考 facebookresearch/demucs[5]。

第三步:让 Seed-VC 生成新歌声

从项目根目录进入 Seed-VC:

cd tools/seed-vc

执行完整转换:

HF_HUB_DISABLE_XET=1 ../../.venv/bin/python inference.py \
  --source ../../stems/htdemucs/source/vocals.wav \
  --target ../../reference/voice.wav \
  --output ../../converted \
  --diffusion-steps 30 \
  --length-adjust 1.0 \
  --inference-cfg-rate 0.7 \
  --f0-condition True \
  --auto-f0-adjust True \
  --semi-tone-shift 0 \
  --fp16 False

这条命令中,初学者最需要理解的是三个参数:

参数
本文值
作用
diffusion-steps30
质量与速度的折中
f0-conditionTrue
保留歌曲的音高
auto-f0-adjustTrue
自动适配原唱与目标声音的音域

不要一开始就追求 50 或 100 步。干声不干净时,增加扩散步数几乎不会解决根本问题。30 步更适合第一次验证。

首次运行会下载 Seed-VC、Whisper-small、RMVPE、CAMPPlus 和 BigVGAN 等模型,可能要等待几分钟。

完成后,converted/ 中会出现一个以 vc_ 开头的 WAV 文件。把它复制成更好记的名称:

cd ../..

VC_OUTPUT=$(find converted -type f -name 'vc_*.wav' | head -1)
cp "$VC_OUTPUT" converted/ai-vocals.wav

检查它与伴奏时长是否一致:

for file in \
  converted/ai-vocals.wav \
  stems/htdemucs/source/no_vocals.wav
do
  printf '%s: ' "$file"
  ffprobe -v error \
    -show_entries format=duration \
    -of default=nw=1:nk=1 \
    "$file"
done

如果两者差了好几秒,先不要混音。检查是否选错了文件,或 Seed-VC 是否在中途报错。

第四步:把新歌声混回伴奏

现在我们有了:

  • converted/ai-vocals.wav
    :AI 翻唱人声。
  • stems/htdemucs/source/no_vocals.wav
    :伴奏。

执行:

ffmpeg -y \
  -i converted/ai-vocals.wav \
  -i stems/htdemucs/source/no_vocals.wav \
  -filter_complex "\
    [0:a]highpass=f=70,lowpass=f=15000,volume=1.10,\
    pan=stereo|c0=c0|c1=c0[v];\
    [1:a]volume=0.84[m];\
    [v][m]amix=inputs=2:duration=longest:\
    dropout_transition=0:normalize=0,\
    alimiter=limit=0.89:level=false[out]" \
  -map "[out]" \
  -ar 44100 \
  -ac 2 \
  -c:a pcm_s16le \
  final/ai-cover.wav

这里做了四件事:

  1. 清理人声中过低和过高的噪声。
  2. 把单声道人声展开成双声道。
  3. 让人声稍微高于伴奏。
  4. 把峰值限制在约 -1 dB,避免转码时爆音。

FFmpeg 对 amix 和 alimiter 的官方说明可以在 FFmpeg Filters Documentation[6] 中查到。

再生成一份容量更小的 M4A:

ffmpeg -y \
  -i final/ai-cover.wav \
  -c:a aac \
  -b:a 256k \
  final/ai-cover.m4a

第五步:不要省略验收

“命令运行成功”不等于“翻唱已经可用”。

先检查编码、时长和声道:

ffprobe -v error \
  -show_entries stream=codec_name,sample_rate,channels,bit_rate \
  -show_entries format=duration,size,bit_rate \
  -of json \
  final/ai-cover.m4a

再检查音量:

ffmpeg \
  -i final/ai-cover.wav \
  -af volumedetect \
  -f null -

我的实际成品数据是:

  • 原曲与成品均为 242.509 秒。
  • Seed-VC 全曲推理实时系数约为 2.43×。
  • 最终采样率为 44.1 kHz。
  • 输出为双声道 AAC。
  • 峰值约为 -1.0 dB。

最后,请用耳机从头到尾听一遍,重点检查:

  • 是否有整段静音。
  • 句尾是否被截断。
  • 高音是否忽然变成金属声。
  • 齿音和爆破音是否过重。
  • 人声是否被伴奏掩盖。
  • 开头和结尾是否完整。

我真实遇到的三个问题

如果你也在 Apple Silicon Mac 上实践,下面三个问题很可能会遇到。

1. Apple MPS 不支持 float64

报错:

Cannot convert a MPS Tensor to float64 dtype

原因是 RMVPE 返回的 F0 数组可能是 float64,而 Apple MPS 不支持这种精度。

在 tools/seed-vc/inference.py 中找到:

F0_ori = torch.from_numpy(F0_ori).to(device)[None]
F0_alt = torch.from_numpy(F0_alt).to(device)[None]

改成:

F0_ori = torch.from_numpy(F0_ori).float().to(device)[None]
F0_alt = torch.from_numpy(F0_alt).float().to(device)[None]

2. Torchaudio 保存 WAV 时要求 TorchCodec

报错:

TorchCodec is required for save_with_torchcodec

可以安装 TorchCodec,也可以直接用已在依赖中的 SoundFile 保存。

在 inference.py 开头加入:

import soundfile as sf

把最后的 torchaudio.save(...) 替换为:

output_path = os.path.join(
    args.output,
    f"vc_{source_name}_{target_name}_{length_adjust}_{diffusion_steps}_{inference_cfg_rate}.wav",
)
sf.write(output_path, vc_wave.squeeze(0).cpu().numpy(), sr)

3. Hugging Face Xet 一直停在 .incomplete

如果模型下载文件长时间不增长,尝试在命令前增加:

HF_HUB_DISABLE_XET=1

它会让 Hugging Face 改用普通 HTTP 下载。

为什么你做出来的效果可能不好

如果只记住一件事,请记住:

AI 翻唱的上限,首先由素材决定,不是由扩散步数决定。

按影响大小排序:

  1. 人声分离质量
    :串轨和混响会被一起转换。
  2. 参考声质量
    :噪声、多人或过度降噪都会损失声纹。
  3. 音域匹配
    :低音参考声强行转换极高原唱,容易出现失真。
  4. F0 提取
    :半说半唱、强气声和复杂和声更容易误判音高。
  5. 混音比例
    :人声过大会显得干和假,过小则听不出音色变化。

如果效果不理想,按这个顺序调整,而不是一上来就把 diffusion-steps 调到 100。

这条链路的能力边界

这套流程的优点是:

  • 不需要为每个歌手单独训练一个模型。
  • 只需要一段参考声就能开始测试。
  • 歌词、旋律和节奏可以大致保留。
  • 全部推理可以留在本地。

它也有明显局限:

  • 它是声纹转换,不会自动重新设计演唱。
  • 原唱中的咬字问题和节奏问题仍会保留。
  • 复杂和声、强混响和极端高音可能产生伪影。
  • “像某个人”不等于“具有真人的演唱能力”。
  • 本地运行并不会自动解决授权和版权问题。

最后:先做 20 秒,再做全曲

虽然本文给出了全曲流程,但第一次实践时,我强烈建议先裁剪 20 秒副歌:

ffmpeg -y \
  -ss 60 \
  -t 20 \
  -i input/source.wav \
  -c:a pcm_s16le \
  input/test-20s.wav

先用这 20 秒验证:

  • Demucs 分离是否干净。
  • 目标声音是否明显可辨。
  • 高音是否破音。
  • 人声与伴奏比例是否舒服。

确认方向正确以后,再处理 3–5 分钟的全曲。这会节省大量时间,也更容易判断问题出在哪一环。

还有哪些更新的技术值得尝试?

本文的 Seed-VC + Demucs 是本机完整验证过的基线。下面这些项目代表更近期的路线,但除特别说明外,还没有在本文这首歌上做同条件听感对比,因此应把它们当作下一步实验候选,而不是无条件替换。

目标
推荐尝试
适合谁
需要注意
尽量少改现有流程
demucs-infer[7]
已经习惯 Demucs,希望继续使用原模型的人
社区维护的推理版,不是 Meta 官方续作;强调 PyTorch 2.x、精简依赖和原模型权重兼容
追求更干净的人声分离
audio-separator[8] + MelBand Roformer
愿意比较多个分离模型、优化干声质量的人
支持 MDX、Demucs、MDXC 和 Roformer;不同歌曲的最佳模型可能不同,需要用同一段副歌盲听比较
探索新一代零样本歌声转换
Amphion Vevo2[9]
想研究歌声编辑、风格转换、哼唱转歌唱的人
功能比 Seed-VC 更完整,但环境、模型体积和推理链路也更复杂,适合独立环境测试
为固定音色追求稳定相似度
RVC[10]
能准备至少约 10 分钟干净授权素材、愿意训练专属模型的人
不是一段参考声即可完成的零样本路线;需要训练和数据清洗,但固定角色可能更稳定

我会怎么选择

  • 第一次实操
    :继续使用本文锁定版本,先理解分轨、声纹转换和混音的完整链路。
  • 只想改善分轨
    :保持 Seed-VC 不变,单独把 Demucs 替换成 audio-separator 的 Roformer 模型做 A/B 对比。
  • 担心 Demucs 依赖老化
    :先测试 demucs-infer,确认同一模型、同一音频的输出没有明显退化,再迁移。
  • 想做更现代的歌声生成实验
    :给 Amphion Vevo2 建立全新虚拟环境,不要直接覆盖已经跑通的 Seed-VC 环境。
  • 长期经营一个经过授权的固定虚拟歌手
    :比较 RVC 与零样本方案;前者增加训练成本,换取更稳定的专属音色。

最值得优化的通常不是一次性把所有模型换新,而是把链路拆开测试:先比较人声分离,再比较音色转换,最后比较混音。否则成片变好或变差时,你很难知道究竟是哪一环造成的。

如果你已经跑到这里,你已经完成了一条真正的本地 AI 翻唱链路:不是在网页上点一个按钮,而是知道每一条音轨怎么来、每个模型在做什么,以及效果不好时该从哪里查。


53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询

扫码登录
登录即表示您同意《53AI网站服务协议》
服务协议

欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。

在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。

一、 定义

本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。

会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。

知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。

二、 账号注册与登录

登录方式:本网站支持以下登录方式,您可根据实际情况选择:

微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。

手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。

账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。

实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。

未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。

三、 服务内容与规范

知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。

服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。

禁止行为:您在使用服务时不得实施以下行为:

利用技术手段批量爬取、下载、转存知识库内容;

将知识库内容用于商业目的或未经授权地向第三方传播;

干扰本网站正常运行或侵犯其他用户合法权益;

发布违法违规信息或从事违反公序良俗的活动。

四、 知识产权声明

权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。

有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。

侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。

五、 个人信息保护

我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。

您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。

您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。

六、 免责声明

内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。

不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。

第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。

七、 违约责任

如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。

如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。

八、 法律适用与争议解决

本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。

因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。

九、 其他

本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。

本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。

我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。


已查阅