Как в видеофайле найти пики громкости?

Есть видеофайлы, разбиты по суткам, там есть метки с камер датчика движения. По движению отмечаются некоторые точки, от которых в интервале 5 секунд видео считается активным. Объединяем все активные периоды, остальное вырезаем из файла.

И всё бы ничего, только там почти всегда что-то движется :) Т.е. итоговый файл длится около 23 часов. Видео файл со звуком, так вот интересующие нас события(а их всего около 200 в сутки) не плохо так шумят. Нужно как то понять по видео ряду в какие моменты времени амплитуда звукогого сигнала превышает заданную... Дальше я уже ffmpeg, например, всё сам сделаю.

Желательно что-нить на python или java.

Но если есть какие-то решения бесплатные, от совета не откажусь.

Изначально формат видео .flv, но тут сконвертнуть не проблема.


Ответы (1 шт):

Автор решения: Gawain

Наличие энергии в звуковом файле можно определить с помощью этих двух функций:

# мощность дискретного сигнала (пропорциональна энергии)
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.

→ Ссылка