2012-05-05 22 views
12

¿Cómo puedo mantener el flujo (protocolo rtsp, códec h264) en el archivo (contenedor mp4)? Es decir, al ingresar una secuencia sin fin (con cámara CCTV) y los archivos de salida en formato mp4 con un tamaño de 5-10 minutos de tiempo de grabación.Guardar flujo RTSP continuo a archivos mp4 de 5-10 minutos de largo

SO: Debian, Ubuntu del programa: VLC, ffmpeg (avconv)

Actualmente se utiliza este esquema:

cvlc rtsp://admin:[email protected]:554/ch1-s1 --sout=file/ts:stream.ts 
ffmpeg -i stream.ts -vcodec copy -f mp4 stream.mp4 

Pero no puede grabar vídeo de forma continua (entre reinicios VLC pierde alrededor de 10 segundos de video en vivo).

Respuesta

0

Trabajo en equipo: Divida la fuente de video y alterne dos procesos para registrar el marco de tiempo. Querrá probar qué tan variable es el tiempo de inicio y qué tan variable es. Es posible que desee establecer la prioridad de los procesos en tiempo real para reducir la varianza del tiempo de inicio. Habrá cierta superposición, pero parece que podría estar bien para su aplicación por lo que infiero. Ejemplo:

p1: sRRRRRRRRRwwwwwwwwsRRRRRRRRRwwwwwwwwsRRRRRRRRR... 
p2: wwwwwwwwwsRRRRRRRRRwwwwwwwwsRRRRRRRRRwwwwwwwww... 

        time --> 

s: startup 
R: running 
w: wait 
21

Consulte this question y responda en Server Fault. En resumen, cambie las herramientas. avconv hará lo que quieras. (ffmpeg se ha convertido en avconv.)

La función que está buscando se llama segmentación. Su línea de comandos sería algo como esto:

avconv -i rtsp://10.2.2.19/live/ch01_0 -c copy -map 0 -f segment -segment_time 300 -segment_format mp4 "capture-%03d.mp4"

+1

Le aconsejaría que quiera usar '-segment_atclocktime 1' si la aplicación es para" CCTV ". Como esto intentará dividir basado en el reloj de pared y no en el tiempo desde que comenzó la grabación. – Aron

+0

Ffmpeg no se convirtió en avconv y avconv no es el nuevo ffmpeg. Son diferentes proyectos.https://stackoverflow.com/questions/9477115/what-are-the-differences-and-similarities-between-ffmpeg-libav-and-avconv –

5

solución Jardín de Alexander funciona para ffmpep utilizando la versión más adelante. Reemplace avconv con ffmpeg.

./ffmpeg -i rtsp: //10.2.2.19/live/ch01_0 -c copiar -map 0 -f segmento -segment_time 300 mp4 -segment_format "captura-% 03d.mp4"

Estoy incluyendo este encabezado debido a la confusión de FFmpeg sobre las versiones, el cisma ubuntu y el rápido desarrollo.

versión ffmpeg N-80023-gd55568d Copyright (C) los desarrolladores 2000-2016 la FFmpeg construido con gcc 4.8 (Ubuntu 4.8.4-2ubuntu1 ~ 14.04.1) configuración: --prefix =/home/rhinchley/q10/ffmpeg_build --pkg-config-flags = - static --extra-cflags = -I/home/rhinchley/q10/ffmpeg_build/include --extra-ldflags = -L/home/rhinchley/q10/ffmpeg_build/lib --bindir =/home/rhinchley/q10/bin --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable- libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-nonfree libavutil 55. 24.100/55. 24.100 libavcodec 57. 42.100/57. 42.100 libavformat 5 7. 36,100/57. 36,100 libavdevice 57. 0,101/57. 0,101 libavfilter 6. 45,100/6. 45,100 libswscale 4. 1,100/4. 1,100 libswresample 2. 0,101/2. 0,101 libpostproc 54. 0.100/54 0.100

+0

Gracias por compartir esta versión de la solución de FFmpeg, preferiría usar FFmpeg sobre avconv. Y sería mejor resumir tu URL con comillas dobles para que bash no se confunda con caracteres extraños que te atascarán en la sección de encabezado de FFmpeg. –

Cuestiones relacionadas