我正在寻找一种从视频中消除人声的方法。最初,我有以下几点:

  • video1.mp4
  • voice1.mp3

  • video1有图像,只有没有人声,而voice1只有一个人声。然后我将video1和voice1组合在一起,创建video2.m4,因此在video2中,我既可以听到video1的声音,也可以听到voice1的声音。值得一提的是video1和voice1的长度相同,约为2分钟。

    这是一年前。我不小心删除了video1.mp4,但仍然有video2和voice1。现在,我需要再次获取video1.mp4。换句话说,如何从video2中删除voice1? 如何从video2消除人的声音?

    我不在乎是通过软件,命令行,甚至是计算机代码(也许是Phyton;我听说Python可以用音频做一些很棒的事情)。

    注意:StackOverflow(Removal of Human Voice from a video or audio file)中也有类似的问题,但是没有说明如何删除音频。

    最佳答案

    问题

    与其将其视为消除不必要声音的问题,不如将其视为消除两个信号之和。目前,我们要考虑三个音频信号,让我们称之为

  • A:video1.mp4的音轨
  • B:voice1.mp3的音频
  • C:AB(即C = A + B)之和,现在是video2.mp4
  • 的音轨

    我们不再可以访问A,但是仍然可以使用BC

    理想情况

    理想情况假设:
  • AB的长度相同
  • 对两个信号求和,无需任何滤波。



  • 这种情况下的解决方案相当简单,我们要做的就是将B乘以-1的增益值(即反相),然后将其与信号C相加。

    如果
    C = A + B
    

    然后
    A = C - B
    A = C + (B * -1)
    

    首先考虑到这些信号的总和,我假设您可以使用某些音频/视频编辑软件。要反转B,可以将文件导入以下内容之一:
  • Audacity
  • Garage Band
  • FFMPEG
  • Adobe Premier / Audition
  • Final Cut Pro

  • 任何可以编辑音频的软件也应该能够转换音频信号。对于正在使用中进行即时调整的DAW,将CB放在同一个项目中可能是理想的。

    注意事项
  • 如果更改了B的增益(即C = A + xB),则解决方案仍然是微不足道的,因为您只需将-B乘以一个系数x
  • 如果BA的长度不同,则需要正确地将-BC对齐,以消除信号。

  • 非理想情况

    如果您考虑对B进行了某些处理,则解决方案会涉及更多一点。该过程可以是任何东西,包括滤波(EQ),延迟,混响,音高变化,速度变化。让我们将此过程称为H()函数,如果B是该过程的输入,则为:H(B)

    ,即
    C = A + H(B)
    

    我们可以在更长的时间内简单地反转B,我们现在需要首先将完全相同的过程应用于B,然后反转,因为H(B)可能不等于H(-B)。您应该首先以完全相同的方式处理B,然后最后将其反转。

    如果由于某种原因您不记得应用于B的过程,那么您可能会有些困惑。在这种情况下,您最好的选择是尝试通过错误尝试重新创建流程。除非您完全匹配该过程,否则H(B)可能会有些残留。

    10-08 02:45