You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用librosa等工具从带有对应背景音的歌曲中提取人声

从带伴奏歌曲中提取人声的实现方案

前提要求

  • 你手里的SongName.mp3和SongName_bgm.mp3需要满足三个条件:采样率完全一致、时间轴完全对齐、bgm文件和原曲中的伴奏部分无任何二次修改(包括音量调整、重混、剪辑),否则会出现伴奏残留、杂音等问题。

方法1:使用librosa实现(Python环境)

先安装依赖:
pip install librosa soundfile numpy
运行以下代码即可完成提取:

import librosa
import soundfile as sf
import numpy as np

# 统一采样率,可根据你的源文件采样率调整
target_sr = 44100
# 读取两个音频,保留多声道信息
full_audio, _ = librosa.load("SongName.mp3", sr=target_sr, mono=False)
bgm_audio, _ = librosa.load("SongName_bgm.mp3", sr=target_sr, mono=False)

# 统一两个音频的长度,取较短的长度截断
min_length = min(full_audio.shape[1], bgm_audio.shape[1])
full_audio = full_audio[:, :min_length]
bgm_audio = bgm_audio[:, :min_length]

# 对bgm做反相处理
reversed_bgm = -bgm_audio
# 原曲和反相bgm叠加,伴奏抵消得到人声
extracted_vocals = full_audio + reversed_bgm

# 归一化处理避免爆音
extracted_vocals = librosa.util.normalize(extracted_vocals)

# 导出提取好的人声,soundfile要求维度为(采样点数, 声道数),因此需要转置
sf.write("extracted_vocals.wav", extracted_vocals.T, target_sr)

如果运行后发现伴奏残留较多,大概率是两个音频存在时间偏移,可以自行添加互相关计算偏移量的逻辑修正对齐后再处理。

方法2:使用FFmpeg快速实现(无需写代码)

如果不想配置Python环境,直接用FFmpeg命令即可完成相同的相位抵消操作,前提同样是两个音频已经对齐:
ffmpeg -i SongName.mp3 -i SongName_bgm.mp3 -filter_complex "[1:a]aeval='-val(0)':c=same[bgm_rev];[0:a][bgm_rev]amix=inputs=2:duration=shortest,volume=2[aout]" -map "[aout]" extracted_vocals.wav
命令中的volume=2是为了抵消amix混合时自动降低的音量,避免输出的人声音量过小。

效果优化提示

  • 若两个音频的伴奏音量不匹配,可以先将bgm的音量调整到和原曲中伴奏的音量完全一致后再做抵消,效果会明显提升
  • 若存在轻微残留杂音,可以后续加基础降噪处理,无需使用machine learning相关模型也能得到可用的人声素材

内容的提问来源于stack exchange,提问作者Q.Z. Lin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 06:39:02