Alter.Org.UA
 << Back Home EN en   Donate Donate

Обнаружение/удаление статических фрагментов видео с помощью ffmpeg
(детектирование статичных сцен в видео без транскодинга)

Есть куча IP-камер. С каждой льется h264 поток и сохраняется на сервере в 1-минутные фрагменты без перекодирования. Это занимает много места, ~25Гб/сутки. Задача - без полного декодирования h264 потока, так чтобы не слишком понять нагрузку на сервер, выбросить фрагменты с несущественными изменениями/без движения и сохранить место на диске. Как вариант - сделать пост-обработку сохраненных фрагментов и выбросить статичные.

Самый очевидный вариант, к сожалению, требует полного транскодинга и не совместим с -vcodec copy.

ffmpeg -nostdin -nostats -i <source> -r 25 -segment_time 60 -f segment -segment_atclocktime 1 
    -reset_timestamps 1 -vcodec copy -strftime 1 %Y%m%d-%H%M.avi
vs
ffmpeg -nostdin -nostats -i <source> -r 25 -segment_time 60 -f segment -segment_atclocktime 1 
    -reset_timestamps 1 -vf "select=gt(scene\,0.003)" -strftime 1 %Y%m%d-%H%M.avi

Было найдено решение.

  • Извлечь все ключевые кадры (I-frames) из сохраненного фрагмента - относительно недорогая операция. -vf "select=eq(pict_type\,I)"
  • Собрать из них ролик.
  • Обработать motion detection фильтром и посмотреть, что получится -vf "select=gt(scene\,0.0005)"
    Note: мы используем более высокий порог (0.0005), чем при потоковой обработке.
ffmpeg -i big-chunk.avi -vf "[in]select=eq(pict_type\,I)[mid];[mid]select=gt(scene\,0.0005)[out]" 
    -copyts reduced-chunk.avi

потом смотрим что получилось

ffprobe -show_streams -count_frames reduced-chunk.avi|grep nb_read_frames

результат примерно такой (смотрим на nb_read_frames)

  • 1-4 - неподвижные кадры + время записи + шум (можно выбросить или оставить в сжатом виде, чисто для картинки)
  • 5-10 - такое, нужно смотреть. Как вариант - посмотреть временные метки оставшихся I-frame'ов (ffprobe -count_frames -show_frames reduced-chunk.avi) и выделить из исходной записи фрагменты с активным движением.
  • 11+ - активное движение (точно храним исходное видео)

Можно еще поиграться с прогом чувствительности к движению в gt(scene\,0.0005)

2017.12.12


См. также


FB or mail alterX@alter.org.ua (remove X)   Share
Автор: Alter (Александр А. Телятников) Сервер: Apache+PHP под FBSD © 2002-2018