буферизованная запись ffmpeg

нужен совет для решения проблемы

ffmpeg получает непрерывный прямой эфир (источник rtmp) с камер наблюдения за въездными воротами.

после срабатывания триггера (ворота/дверь открыты) мне нужно создать 30-секундный видеофайл, сохраненный на жестком диске

Я имею в виду эти 30 секунд как 25 секунд видео до срабатывания триггера и около 5 секунд после триггера.

аналогичная идея описана в вики ffmpeg ( https://trac.ffmpeg.org/wiki/Capture/Lightning ), но я не могу заставить это работать в любой конфигурации команды

Я играл с фильтрами, буферизацией и т. д., но все равно не повезло ;-((

Любые идеи поощряются

Что вы пробовали с фильтрами?
Я играл с setpts или его смещением, но проблема в том, что я хочу избежать обработки видео, так как полученный rtmp-поток в формате h264 должен быть напрямую сохранен с любой обработкой (просто идея о том, как это должно работать)

Ответы (1)

Что вы можете сделать, так это добавить пустой 30-секундный сегмент перед потоком камеры, а затем использовать метод в вики ffmpeg.

Базовый шаблон

ffmpeg -f lavfi -i color=black:WxH:r=FPS:d=30 -i camera_input \
       -filter_complex "[0][1]concat[v]" -map "[v]" StreamingOutput

WxHдолжно быть установлено разрешение камеры и FPSее частота кадров.

И вторая команда, которая запускается через 5 секунд после триггера.

ffmpeg -i Streamingoutput -t 30 snippet.mp4
Проблема с этим ответом заключается в том, ffmpegчто concat не ждет 30 секунд, он довольно быстро завершает объединение, и это не удается. Есть ли способ заставить его конкатировать его в секунду?