grabación en búfer ffmpeg

necesito algun consejo para solucionar el problema

ffmpeg está recibiendo la transmisión en vivo sin parar (fuente rtmp) desde las puertas de entrada de monitoreo de cámara

después de disparar el gatillo (la compuerta/puerta está abierta) necesito crear el archivo de video de 30 segundos guardado en el HDD

Me refiero a estos 30 segundos como 25 segundos de video antes de que se disparara el disparador y unos 5 segundos después del disparador.

la idea similar está cubierta por ffmpeg wiki ( https://trac.ffmpeg.org/wiki/Capture/Lightning ) pero no puedo hacer que esto funcione en ninguna configuración de comando

También estaba jugando con filtros, almacenamiento en búfer, etc., pero todavía no tuve suerte ;-((

Cualquier idea sería apreciada

¿Qué probaste con los filtros?
Estaba jugando con setpts o itsoffset, pero el problema es que quiero evitar procesar el video, ya que la transmisión rtmp recibida en h264 debe guardarse directamente con cualquier procesamiento (solo una idea de cómo debería funcionar)

Respuestas (1)

Lo que puede hacer es agregar un segmento en blanco de 30 segundos frente a la transmisión de la cámara y luego usar el método en la wiki de ffmpeg.

La plantilla básica es

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

WxHdebe establecerse en la resolución de la cámara y FPSen su velocidad de fotogramas.

Y el segundo comando que se ejecuta 5 segundos después del gatillo.

ffmpeg -i Streamingoutput -t 30 snippet.mp4
El problema con esta respuesta es ffmpegque concat no espera 30 segundos, completa la concatenación bastante rápido y falla. ¿Hay alguna manera de forzarlo a concatarlo por segundo?