【问题标题】:How to compare two or more audio files and obtain timecodes where the audio is different?如何比较两个或多个音频文件并获取音频不同的时间码?
【发布时间】:2020-10-15 13:08:30
【问题描述】:

我正在研究 python。我有两个音频文件,其中一个是原始的,一个是编辑过的音频(一半是原始的,一半是插入的音频)。

我使用过 inaSpeechSegmenterSpeech Recognition 等库。 使用这个我可以找到音频在音乐、语音或没有音频方面是否不同。此外,我还可以使用 inaSpeechSegmenter 首先找到音频不同的时间。但是当音频在多个地方不同时无法找到时间码。

我也没有找到任何可以帮助我解决问题的 API。

需要一些想法和建议

【问题讨论】:

    标签: python audio computer-vision


    【解决方案1】:

    我将讨论两个音频文件由逐个样本相同或不同的区域组成的情况(例如插入的音频)。无需任何高级信号处理即可识别不匹配区域。

    首先您需要将音频文件加载到 python 中。如果您的音频文件是“.wav”文件,您可以使用 python 内置 wave 模块。如果您还需要处理其他类型的音频文件(ogg、flac),一个不错的选择是soundfile,您可以通过pip 安装它(注意它不支持mp3 文件)。

    import soundfile
    import numpy as np
    
    signal_1, samplerate_1 = soundfile.read("audiofile_1.wav")
    signal_2, samplerate_2 = soundfile.read("audiofile_2.wav")
    

    让我们假设samplerate_1 == samplerate_2len(signal_1) == len(signal_2)。您可以像这样定位样本差异:

    mismatch = (signal_1 != signal_2).astype(np.int)
    

    这是一个与信号大小相同的数组,在信号不同的位置其值为 1,在其他位置为 0。现在,如果您对信号不同的区域感兴趣,您可以使用np.diffnp.where 函数:

    region_starts = np.where(np.diff(np.r_[0, mismatch, 0]) == 1)[0]
    region_ends = np.where(np.diff(np.r_[0, mismatch, 0]) == -1)[0]
    

    为了使开始/结束位置正确,mismatch 用前导和尾随 0 填充(使用 np.r_[])。现在您可以将每个区域的开始/结束时间配对,然后除以采样率得到时间戳(以秒为单位):

    mismatching_regions = np.column_stack((region_starts, region_ends))
    mismatching_regions /= samplerate_1
    

    【讨论】:

      猜你喜欢
      • 2018-07-18
      • 1970-01-01
      • 1970-01-01
      • 2011-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-24
      相关资源
      最近更新 更多