Блог-шпаргалка

Картинка

FFmpeg. Запись с IP-камеры

Категория -> linux
Обновлено: 2025-06-10

Разменяв пятый десяток годков, имея за плечами одну ипотеку, я пришёл к мысли, что вероятнее всего, в старости, потянет к земле и поэтому неплохо было бы позаботиться об этом уже сейчас. Обсудив этот момент с супругой, я решился взять вторую ипотеку и купить дом, под конский, сука, ипотечный процент. Пока что я уверен, что оно того стоит.

Планов, что там и чего "умного" сделать, целая куча! Самое первое, что хотелось бы - это организовать видеонаблюдение по периметру с минимальными затратами. То есть видеорегистратор в данном случае нам нахуй непотребен. Поэтому в этом посте я опишу свой опыт этой задумки.

Выбираем око.

Приехал я значит в компанию, специализирующуюся на видеонаблюдении, подошёл к манагеру с заранее выбранным на их сайте товаром из соотношения цена = качество + мои хотелки, на что тот, в свою очередь, решил попытаться мне втулить то, что дороже + всякие комплектующие, которые якобы необходимы. Со своей стороны я блеснул необходимыми компетенциями в этом деле и манагер понял, что ему лучше завалить свою ебасосину, попытки которой развести меня на ненужный товар, потерпели фиаско.

В общем прикупил я у них FLOW F-IC-1122CM 2.8mm за 7990р. Приехал домой расчехлил, подключил, установил пароль на админку, настроил синхронизацию времени, а что дальше? Надо же не только транслировать онлайн, но ещё и писать в архив, глубина которого, кстати, зависит от ёмкости жёсткого диска.

Первое, что пришло в голову - это ffmpeg. Это же, мать его, видеокомбаин, только из командной строки. Гугл, по поводу организации архива, выдал кучу результатов, которые пришлось не просто прочитать, но и изучить. Каких только скриптов и костылей для этого не придумано. Меня заинтересовал самый простой. Возможно в процессе эксплуатации он будет доработан или вообще переработан, но на сегодняшний день, для меня это решение.

Вот такой строчкой

ffmpeg -i rtsp://<user>:<password>@ip-address/mpeg4 -c copy -f segment -segment_time 300 -reset_timestamps 1 -strftime 1 /home/<user>/cam1_%Y-%m-%d_%H:%M:%S.mkv

будет писаться непрерывный поток частями по 5 минут.

Пробежимся по параметрам:
-i - входные параметры. В нашем случае это поток с камеры
rtsp://<user>:<password>@ip-address/mpeg4 - тут должно быть понятно
-c copy - копирует поток видео+аудио (без перекодирования)
-f segment - говорит, что выходной файл будет разбит на сегменты
-segment_time 300 - задает время сегмента в секундах (5 минут)
-reset_timestamps 1 - сбрасывает временные метки для каждого нового файла.
-strftime 1 - разрешает использование формата времени в именах файлов
/home/<user>/cam1_%Y-%m-%d_%H:%M:%S.mkv - место хранения архивных файлов и его имя

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

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

1 минута записи приблизительно выходит 20 мегабайт
1 час = 60 минутам. То есть 20 * 60 = 1200 мегабайт или 1,2 гигабайта
1 сутки = 24 часа. То есть 1200 * 24 = 28800 мегабайт или 28,8 гигабайта
1 месяц = 30 суток. То есть 28800 * 30 = 864000 мегабайта или 864 гигабайта

Этими нехитрыми расчётами могу сделать вывод, что для минимум 4-х камер, чтоб охватить периметр территории дома, архива на терабайтном диске, мне хватит чуть больше, чем на неделю