У меня загружены 3-часовые файлы MP3, и каждые ~ 15 минут воспроизводится отчетливый 1-секундный звуковой эффект, который сигнализирует о начале новой главы.
Можно ли идентифицировать каждый раз, когда воспроизводится этот звуковой эффект, чтобы я мог отметить временные смещения?
Звуковой эффект каждый раз одинаков, но, поскольку он был закодирован в формате файла с потерями, вариации будут небольшими.
Смещения по времени будут храниться в метаданных кадра главы ID3.
Пример источника, где звуковой эффект воспроизводится дважды.
ffmpeg -ss 0.9 -i source.mp3 -t 0.95 sample1.mp3 -acodec copy -y
ffmpeg -ss 4.5 -i source.mp3 -t 0.95 sample2.mp3 -acodec copy -y
Я очень новичок в обработке звука, но моей первоначальной мыслью было извлечь образец 1-секундного звукового эффекта, а затем использовать librosa
в python для извлечения временной ряд с плавающей запятой для обоих файлов, округлить числа с плавающей запятой и попытаться найти совпадение.
import numpy
import librosa
print("Load files")
source_series, source_rate = librosa.load('source.mp3') # 3 hour file
sample_series, sample_rate = librosa.load('sample.mp3') # 1 second file
print("Round series")
source_series = numpy.around(source_series, decimals=5);
sample_series = numpy.around(sample_series, decimals=5);
print("Process series")
source_start = 0
sample_matching = 0
sample_length = len(sample_series)
for source_id, source_sample in enumerate(source_series):
if source_sample == sample_series[sample_matching]:
sample_matching += 1
if sample_matching >= sample_length:
print(float(source_start) / source_rate)
sample_matching = 0
elif sample_matching == 1:
source_start = source_id;
else:
sample_matching = 0
Это не работает с файлами MP3, указанными выше, но работает с версией MP4, где он смог найти образец, который я извлек, но это был только один образец (не все 12).
Я также должен отметить, что этому сценарию требуется чуть более 1 минуты для обработки 3-часового файла (который включает 237 426 624 образца). Поэтому я могу представить, что какое-то усреднение в каждом цикле может привести к тому, что это займет значительно больше времени.
frames_to_time
, но должен признать, что не уверен, что делаю это правильно (хотя буду продолжать попытки). Спасибо еще раз. - person Craig Francis   schedule 30.09.2018