Как в видеофайле найти пики громкости?
Есть видеофайлы, разбиты по суткам, там есть метки с камер датчика движения. По движению отмечаются некоторые точки, от которых в интервале 5 секунд видео считается активным. Объединяем все активные периоды, остальное вырезаем из файла.
И всё бы ничего, только там почти всегда что-то движется :) Т.е. итоговый файл длится около 23 часов. Видео файл со звуком, так вот интересующие нас события(а их всего около 200 в сутки) не плохо так шумят. Нужно как то понять по видео ряду в какие моменты времени амплитуда звукогого сигнала превышает заданную... Дальше я уже ffmpeg, например, всё сам сделаю.
Желательно что-нить на python или java.
Но если есть какие-то решения бесплатные, от совета не откажусь.
Изначально формат видео .flv, но тут сконвертнуть не проблема.
Ответы (1 шт):
Наличие энергии в звуковом файле можно определить с помощью этих двух функций:
# мощность дискретного сигнала (пропорциональна энергии)
def power(signal):
return np.dot(signal, signal) / signal.shape[0]
# величина SPL в децибелах
def spl(signal):
rms = np.sqrt(np.dot(signal, signal) / signal.shape[0])
spl = 20 * np.log10(rms / 0.00002)
return spl
Сам звуковой сигнал в python можно получить с помощью библиотеки soundfile или librosa.