ffmpeg видаліть деталі без руху


15

У мене є камера безпеки IP (192.168.0.8), яка може транслювати вміст RTSP по мережі.

Я можу зберегти цей вміст (RAW) без змін за допомогою наступної команди ffmpeg з мого комп'ютера:

ffmpeg -i "rtsp://192.168.0.8/stream=0.sdp" -acodec copy -vcodec copy test-raw.mp4

Я також можу змінити розмір його на ходу:

ffmpeg -i "rtsp://192.168.0.8/stream=0.sdp" -vf  "scale=640:-1" test640.mp4

Але як зберегти лише те відео, яке містить лише частини для виявлення руху?

Я намагався вирішити це за допомогою фільтрів зміни сцени ffmpeg , але не пощастило.

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

Потік моєї камери передається без звуку. Отже, я можу генерувати набір зображень із оригінального відео, потім вибирати належні зображення та зберігати нове відео із зображень.


Ви хочете впровадити цю систему або знайти готовий до використання продукт?
Woeitg

@WOEITG Мені просто потрібно будь-яке безкоштовне робоче рішення для Ubuntu 15.04+
rfedorov

Для Windows існує програмне забезпечення під назвою ispy, яке можна встановити для запису при виявленні руху. Оскільки ви запитуєте рішення для Linux, zoneminder.com має бути подібним продуктом. На жаль, у мене немає прямої відповіді на ваше запитання, але +1, тому що я також хотів би відповіді
MyNameWouldGoHere

Відповіді:


7

Що б я зробив, - це точно так, як ви сказали, і збережіть великий файл потоку, а потім використовуйте select фільтр FFMPEG з sceneвиразом, який порівнює подібність послідовних кадрів: select=gt(scene\,0.003)наприклад. Чим більша кількість, тим більше зміна між кадрами ігнорується, для швидкого тестування вам може знадобитися мінімальна 0,00001-0,00005 залежно від типу кадри, з якою ви маєте справу.

Поєднайте це з setpts фільтром , який змінює "час початку" відеокадрів, і ви отримаєте щось на зразок (для відео з 25 кадрів в секунду):

ffmpeg -i input.mp4 -vf "select=gt(scene\,0.003),setpts=N/(25*TB)" output.mp4

Зауважте, ви не зможете користуватися -vcodec copyпід час використання відеофільтрів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.