如何用FFmpeg提取歌曲人声?现有命令仅生成伴奏求解决
FFmpeg能否提取人声?
你使用的ffmpeg -i song.mp3 -af pan="stereo|c0=c0|c1=-1*c1" -ac 1 karaoke.mp3命令,原理是相位抵消——人声通常被混音在立体声的中央(左右声道波形一致),反转其中一个声道后合并,就会抵消掉中央的人声,剩下的是伴奏。这也是你得到无人声音乐的原因。
FFmpeg本身可以尝试提取人声,但效果受原始音频混音质量影响较大,目前有两种主流方式:
1. 使用AI驱动的arnndn滤镜
arnndn是FFmpeg内置的AI音频分离滤镜,搭配预训练模型文件使用,是FFmpeg原生方案里效果最好的。示例命令:
ffmpeg -i song.mp3 -af arnndn=m=path/to/人声分离模型.rnnn vocals.mp3
模型文件需自行下载,不同模型对应不同分离场景(如流行乐、古典乐),可从FFmpeg官方社区或开源音频模型仓库获取。
2. 尝试降噪类滤镜(效果有限)
如果没有AI模型,也可以用降噪滤镜尝试突出人声,但仅适合人声清晰、背景伴奏干扰小的音频。示例命令:
ffmpeg -i song.mp3 -afftdn=nf=-20 vocals.mp3
该命令通过自适应频率域降噪弱化背景伴奏,对复杂混音的音频效果一般。
替代方案
如果FFmpeg的效果达不到预期,这些工具的人声分离表现更稳定:
Spleeter:开源AI音频分离工具,基于TensorFlow,支持将音频分离为2轨(人声/伴奏)、4轨或5轨(人声+鼓+贝斯+其他+钢琴)。示例命令:
spleeter separate -i song.mp3 -o output_directory安装后直接运行即可,无需额外配置模型,适合批量处理。
Adobe Audition:专业音频编辑软件,内置“提取人声”功能,通过可视化操作调整参数,能处理大多数常见音频的人声分离,适合非技术用户。
iZotope RX:专业音频修复工具,其“人声分离”模块对复杂混音的音频处理效果出色,能保留更多人声细节,但属于付费软件。
注意:所有人声提取工具的效果都依赖原始音频的混音方式,如果人声与伴奏完全混叠(比如单声道音频、人声和伴奏频率高度重合),任何工具都无法做到完美分离。
内容的提问来源于stack exchange,提问作者x27x

