Заснял экшенкамерой птиц в кормушке. Видео на несколько часов, хочу получить птиц со звуком, без промежутков.
То есть, найти фрагменты с движением и собрать их всех в одном выходном файле.
Сразу сунулся в ffmpeg и его фильтры:
ffmpeg -i C0064.MP4 -vf select='gt(scene\,0.005)' output.mp4
видео уменьшается с 4,7ГБ до 152,8МБ, из потока удаляется все без движения. Только видео по прежнему длится 13,5 минут. Просидел с мануалом и интернетом, но так и не нашёл нормальное решение. Получил вариант со скриптом, пачкой таймкодов, нарезкой десятков файлов, каждый с отдельным фрагментом а потом объединение этих файлов в общее видео. Ну колхоз-же.
Попробовал Motion с потоком из файла. Тут тоже куча костылей, сообщений о ошибках и т.п. Пока не дотаптывал.
Попробовал DVR-Scan. Ну вот это почти идеально. Прям как нужно делает. Даже по паре секунд до фрагмента и после добавляет и собирает сам в общий файл. Но, блин, со звуком он не работает!. Каюсь, код доработать не смог. Полез разбираться и понял, что всё основано на OpenCV а там вообще нет аудио. Максимум получил с помощью DVR-Scan перечень таймкодов для ffmpeg, но блин опять колхоз со скриптами и кучей файлов-фрагментов. А обработка видео в пару часов растягивается на сутки.
Ну и кучу разных скриптов перепробовал и все, в основном, рассчитаны на сохранение таймкода а движение или в вывод события или банальное уменьшение объёма.
Всё видео давно обрабатываю в Kdenlive но, кажись, не он не библиотека MLT, на которой он основан, тоже детекцию движения не поддерживают.
Неужели ffmpeg такое не умеет по простому и нужно писать здоровенный скрипт?