
Tengo varias cámaras IP de las que quiero capturar vídeo continuamente. Estoy creando un script que incluirá ffmpeg para capturar desde las distintas fuentes RTSP. Pero tengo dificultades para capturar y almacenar los datos... específicamente, ¿cómo puedo capturar clips sin interrupciones?
Para aclarar, si simplemente ejecuto un comando como este:
ffmpeg -i rtsp://ip_cam file.mp4
Esto se ejecutará para siempre hasta que llene mi disco duro (o hasta que alcance algún límite superior de ffmpeg o del sistema de archivos). Entonces mi pensamiento fue hacer algo como esto:
ffmpeg -i rtsp://ip_cam -fs 104857600 file-1.mp4
Esto limitaría los archivos a 100 MB cada uno. Mi script contenedor puede iniciar una nueva instancia tan pronto como finalice ésta:
ffmpeg -i rtsp://ip_cam -fs 104857600 file-2.mp4
Y así sucesivamente (puedo tener un proceso separado que se asegurará de borrar los archivos antiguos según sea necesario para recuperar espacio). El problema con este enfoque es que ffmpeg tarda entre 1 y 2 segundos en iniciarse,lo que significa que durante ese tiempo la cámara en cuestión no está grabando nada.
Una cosa adicional a considerar es que para cada archivo, necesito saber la marca de tiempo de inicio y finalización; por ejemplo, file-1.mp4
puedo hacer referencia a "2015-09-12 09:03:42" hasta "2015-09-12 11:24": 21". De esta manera, si un usuario quiere recuperar un clip específico, sé dónde conseguirlo. Y si inicio ffmpeg para cada clip y luego termina al final de cada clip, puedo capturar y almacenar esa información. Pero si un enfoque sugerido es decirle a ffmpeg que se ejecute indefinidamente mientras se guarda el resultado en fragmentos separados (si ffmpeg puede hacerlo), es posible que no funcione ya que no podré recopilar esta información.
Cualquier idea sería apreciada.
Respuesta1
Prueba elmezclador de segmentos.
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
Generar un archivo de lista.-segment_time
Establecer la duración del segmento. El valor debe ser una especificación de duración. El valor predeterminado es 2. Tenga en cuenta que la división puede no ser precisa, a menos que fuerce los fotogramas clave del flujo de referencia en el momento dado. Ver eldocumentación del muxer de segmentopara más información.-segment_atclocktime
Si se establece en "1", se divide en intervalos de tiempo regulares a partir de las 00:00 en punto. El valor de tiempo especificado en-segment_time
se utiliza para establecer la duración del intervalo de división. Por ejemplo, con segment_time establecido en "900", esto hace posible crear archivos a las 12:00 en punto, 12:15, 12:30, etc.-strftime
Esto permite nombrar los segmentos según el momento de creación del archivo.
Nombres de archivos de salida de ejemplo:
$ 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
Ver eldocumentospara muchas más opciones e información.