Отэтот ответЯ использую эту команду для извлечения только тех компонентов (в основном неизменного) видеопотока, в которых есть движение:
ffmpeg -i input.mp4 -vf "select=gt(scene\,0.0001),setpts=N/(25*TB)" output.mp4
Однако я обнаружил, что при определенных (например, более низких) условиях освещения я начинаю видеть много захвата кадров, хотя на видео, по-видимому, ничего не происходит. В этих условиях, кажется, действительно много шума, который, как я предполагаю, заставляет общее количество изменений превышать порог. Действительно, если я удваиваю порог, большая часть этого уходит — но все равно не все. Однако, если я еще больше повышаю порог, я начинаю пропускать реальное небольшое движение, которое я не хочу пропускать.
Я думал, что если бы фильтр сначала сделал что-то, чтобы уменьшить количество шума в сцене, возможно, что-то вроде легкого размытия при разрешении 2-3 пикселя, это устранило бы ложное обнаружение движения, и я мог бы обнаружить фактическое движение в меньшем масштабе. Я вижу некоторые варианты размытия, но документация пофильтр выборане говорится о том, как использовать их косвенно, т.е. я не хочу, чтобы это влияло на фактический вывод, а только на обнаружение сцены.
решение1
Пробовали ли вы использовать настоящий фильтр шумоподавления перед выбором в своей цепочке фильтров?
Что-то вроде ffmpeg -i input.mp4 -vf "vaguedenoiser=PARAMS,select=gt(scene\,0.0001),setpts=N/(25*TB)" output.mp4
?
Выполните поиск по denoise
запросуhttps://ffmpeg.org/ffmpeg-filters.html#vaguedenoiserдля некоторых других.