Существует ли автоматизированный процесс разделения видео на части с движением?

У меня есть несколько видеофайлов с достаточно статичным фоном и случайным движением сцены. Я хотел бы отредактировать отснятый материал только до фрагментов с движением. Поскольку есть несколько часов отснятого материала, я бы не хотел делать это вручную.

Я надеялся найти сценарий или утилиту, в которую я мог бы передать медиаданные и получить сегменты с движением с другой стороны. Мой ограниченный поиск не предложил ничего, что могло бы это сделать, если только я не смогу заставить VLC каким-то образом использовать свой фильтр движения для маркировки вещей.

Я бы предпочел использовать бесплатную систему или систему FOS, так как я дешев. Если это не вариант, то я рассмотрю возможность оплаты. Я рад, что программное обеспечение будет основано на Windows или Linux. Я бы предпочел не сбрасывать все кадры как неподвижные, запустить diff и перекодировать, но если это единственный способ, то я, вероятно, смогу с этим работать. Я могу кодировать на C, C++, Ruby и паре других языков сценариев, если меня подтолкнут. Я не против потратить немного времени, чтобы написать что-нибудь, если ничего не доступно, и другие могут найти это полезным. У меня нет опыта работы с мультимедиа, поэтому, хотя я понимаю концепции, я бы скорее потерялся при выборе библиотек для использования в качестве отправной точки и так далее.

На видео кормушка для птиц с живой изгородью и забором за ней. При движении солнца наблюдается некоторое медленное движение тени, но в остальном фон кажется стабильным. Я думаю, что около 5% кадра будет занято движением, которое мне нужно уловить. Я упоминаю об этом только потому, что в прошлом я настраивал захват движения ZoneMinder, поэтому я знаком с настройками его фильтра.

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

Я бы начал с исследования opencv. Возможно, есть приложение с открытым исходным кодом, которое использует его и уже делает то, что вы хотите.
Также я думаю, что imageMagick может обрабатывать видео и включает функцию сравнения, которая также сравнивает изображения. Возможно, вы можете указать отбрасывать кадры, где разница равна 0, и сохранять кадры, когда есть фактическая разница.
Небольшой щелчок, тем не менее, приводит к чему-то полезному: «Посмотрите здесь, чтобы найти применение в алгоритмах вашего видеопотока, таких как: извлечение движения ...» docs.opencv.org/doc/tutorials/video/table_of_content_video/… К сожалению, кажется, что есть учебника там пока нет. Я посмотрю, либо найду, либо настрою что-нибудь с OpenCV, а затем, возможно, добавлю туда некоторые заметки. Спасибо за предложение.

Ответы (2)

Есть аналогичный вопрос в переполнении стека

https://stackoverflow.com/questions/28320004/detect-if-video-file-contains-movement

Помимо OpenCV, они также предлагают SimpleCV http://simplecv.org/ и "Motion" http://www.lavrsen.dk/foswiki/bin/view/Motion/WebHome .

Если вы добавляете отрицательный голос, по крайней мере, добавьте комментарий о том, почему. В противном случае, как я могу улучшить этот ответ?

Я не проверял это, но я считаю, что это можно было бы сделать с фильтром выбора сцены смены ffmpeg. Вы можете попробовать что-то вроде:

ffmpeg -i input.ext -filter:v "select=gt(scene\,0.2)" -c:v copy output.ext

Обратите внимание, что вам нужно избежать запятой, даже если значение находится в кавычках. Второй параметр — это то, с чем вам нужно поиграть, чтобы определить, что вы считаете «движением».

Я получил идею от: https://www.bogotobogo.com/FFMpeg/ffmpeg_thumbnails_select_scene_iframe.php