1

У меня есть несколько IP-камер, с которых я хочу непрерывно снимать видео. Я создаю сценарий, который будет охватывать ffmpeg для захвата из различных источников RTSP. Но я борюсь с тем, как захватывать и хранить данные ... в частности, как мне захватывать бесшовные клипы?

Чтобы уточнить, если я просто запустить команду, как это:

ffmpeg -i rtsp://ip_cam file.mp4

Это будет работать вечно, пока не заполнит мой жесткий диск (или пока я не достигну некоторого верхнего предела ffmpeg или файловой системы). Поэтому я подумал сделать что-то вроде этого:

ffmpeg -i rtsp://ip_cam -fs 104857600 file-1.mp4

Это ограничит файлы до 100 МБ каждый. Мой скрипт-обертка может запустить новый экземпляр, как только закончится этот:

ffmpeg -i rtsp://ip_cam -fs 104857600 file-2.mp4

И так далее (у меня может быть отдельный процесс, который будет очищать старые файлы по мере необходимости, чтобы освободить место). Проблема с этим подходом состоит в том, что для запуска ffmpeg требуется 1-2 секунды, что означает , что в течение этого времени рассматриваемая камера ничего не записывает.

Еще одна вещь, которую следует учитывать, это то, что для каждого файла мне нужно знать метки времени начала и окончания, например, file-1.mp4 может ссылаться на «2015-09-12 09:03:42» до «2015-09- 12 11:24:21 ". Таким образом, если пользователь хочет получить определенный клип, я знаю, где его получить. И если я запускаю ffmpeg для каждого клипа, а затем он заканчивается в конце каждого клипа, я могу записать и сохранить эту информацию. Но если предложенный подход заключается в указании ffmpeg работать бесконечно, сохраняя вывод в отдельных блоках (если ffmpeg может это сделать), это может не сработать, так как я не смогу собрать эту информацию.

Любое понимание будет оценено.

1 ответ1

1

Попробуйте сегментный мультиплексор.

ffmpeg -i rtsp://ip_cam -c copy -f segment -segment_list out.list -segment_time 900 \
-segment_atclocktime 1 -strftime 1 "%Y-%m-%d_%H-%M-%S.mkv"
  • -segment_list Создать файл списка.

  • -segment_time Установить длительность сегмента. Значение должно быть указанием длительности. Значение по умолчанию 2. Обратите внимание, что расщепление не может быть точным, если не заставить ссылки потока ключевых кадров в данный момент времени. См. Сегментную документацию muxer для получения дополнительной информации.

  • -segment_atclocktime Если установлено значение "1", разделить на регулярные интервалы времени, начиная с 00:00 часов. Значение времени, указанное в -segment_time , используется для установки длины интервала разделения. Например, если для аргументаgment_time установлено значение "900", это позволяет создавать файлы в 12:00, 12:15, 12:30 и т.д.

  • -strftime Это позволяет именовать сегменты по времени создания файла.

Пример выходных имен файлов:

$ ls -m1
2015-09-12_14-10-02.mkv
2015-09-12_14-10-14.mkv
2015-09-12_14-10-24.mkv
2015-09-12_14-10-34.mkv
2015-09-12_14-10-44.mkv
2015-09-12_14-10-54.mkv

Смотрите документы для гораздо больше вариантов и информации.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .