我知道如何使用 SoX 去除人声。命令是
sox 源.wav mono.wav oops
这意味着将立体声混合成双单声道,其中每个单声道包含左右立体声声道之间的差异。这相当于
sox 源.wav mono.wav 混音 1,2i 1,2i
但是我怎样才能提取人声呢?
我尝试将源文件与单声道文件重新混合
sox -M 源.wav 单声道.wav 人声.wav 混音 1,2i 1,2i
但它不起作用。
如果 SoX 无法实现,我们也欢迎任何其他命令行解决方案。
答案1
如果不进行大量处理,您无法完全提取声音文件中的人声。
问题是,从数学上讲,软件没有足够的信息来分离它。
让我简单解释一下,你可以将立体声文件分解为三个数据。纯左声道的声音 ( L
)、纯右声道的声音 ( R
) 和纯中声道的声音 ( M
)。
如果我们将两个立体声通道命名为X
和Y
,那么我们只需:
X = R + M/2
Y = L + M/2
我们知道的是X
和Y
,另外三个是我们想要分离的未知数。
你去除人声的方法的理念是,人声是几乎总是在中间部分。所以你可以计算
X - Y = R - L
由于左右数据完全不同,因此不会产生干扰,听起来也不错。但是,它也会删除所有中间乐器,如果人声不是完全居中,效果就不太好。
您想要的是隔离M
,并且给定数据,从数学上讲,通过简单地组合2个通道是不可能的:它是一个具有3个未知数的2方程线性系统,没有足够的数据来求解它,并且提取M意味着要求解它。
你也可以尝试用更复杂的方法提取人声,但会花费你很多时间,而且效果也不太好。分离人声和乐器非常困难,因为它们主要处于相同的频率范围内。