python - 如何比较两个或多个音频文件并获取音频不同的时间码?

标签 python audio computer-vision

我正在研究python。我有两个音频文件,其中一个是原始的,一个是编辑过的音频(一半是原始的,一半是插入的音频)。
我使用过像 这样的库inaSpeechSegmenter 语音识别 .使用它,我可以找到音乐、语音或没有音频的音频是否不同。我还可以首先使用inaSpeechSegmenter 找到音频不同的时间。但是当音频在多个地方不同时无法找到时间码。
我也没有找到任何可以帮助我解决问题的 API。
需要一些想法和建议 .

最佳答案

我将讨论两个音频文件由逐个样本相同或不同(例如插入的音频)的区域组成的情况。要识别不匹配区域,您不需要任何高级信号处理。
首先,您需要将音频文件加载到 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

关于python - 如何比较两个或多个音频文件并获取音频不同的时间码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64372271/

相关文章:

python - 在模板中使用 slugify

python - Pulumi运行时找不到pulumi库

android - 如何使用 Androids 的语音与音频示例文件一起发短信

android - Android AudioRecord原始日期为.wav或其他格式

swift URLSession响应数据音频文件保存和播放

android - 适用于 Android 的计算机视觉和 AR 库?

python - 编辑 DataFrame 中的值

python - 在 Selenium 中通过带有特定文本的标签名称选择元素

python - 无法将 tensorflow 卡住图转换为 pbtxt 文件

c++ - 深度图像上的表面法线