как определить устойчивость к шуму, чтобы использовать его в фильтре обнаружения заморозки в ffmpeg

как определить устойчивость к шуму, чтобы использовать его в фильтре обнаружения заморозки в ffmpeg

Я пытаюсь использовать фильтр обнаружения заморозки в ffmpeg.

ffmpeg -i Trial.mp4 -vf "freezedetect=n=-60dB:d=0.5,metadata=mode=print:file=freeze.txt" -map 0:v:0 -f null -

Использовал указанную выше команду и вывод говорит, что заморозки нет. Но видео - это видео без движения, снятое на мобильном телефоне.

Если я установлю уровень шума на 0,05, будут наблюдаться зависания.

Как определить это значение?

решение1

Определить это можно только методом проб и ошибок.

Фильтр вычисляет разницу между двумя кадрами как отношение их суммы абсолютных разностей (ГРУСТНЫЙ). В псевдокоде:

is_frozen(reference, frame) {
    sad = 0
    count = 0
    for plane in planes[frame] {
        sad += sad_of_plane(plane, reference, frame)
        count += width[plane] * height[plane]
    }
    ratio = sad / count
    return ratio <= noise
}

Поскольку фактическая разница между двумя кадрами определяется их шумностью, она будет очень зависимой от контента. Обратите внимание, что даже если объект не изменился, «шум» может означать шум камеры/сенсора, который всегда будет отличаться между двумя захваченными кадрами.

Только для контента, созданного на компьютере, разница между кадрами с одним и тем же сюжетом будет равна нулю (или очень близка к нулю).

Связанный контент