2012-05-05 19 views
12

Come posso mantenere il flusso (protocollo rtsp, codec h264) nel file (contenitore mp4)? Ovvero, immettendo un flusso infinito (con telecamera CCTV) e i file di output in formato mp4 in 5-10 minuti di tempo di registrazione.Salva flusso RTSP continuo su file mp4 lunghi 5-10 minuti

OS: debian, ubuntu Software: VLC, ffmpeg (avconv)

Attualmente questo schema è utilizzato:

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

Ma non può registrare video in modo continuo (tra riavvii vlc perde circa 10 secondi di video dal vivo).

risposta

0

Lavoro in team: Dividere la sorgente video e avere due processi che si alternano registrando l'intervallo di tempo. Dovrai testare in che misura è variabile il tempo di avvio e in che misura è variabile. Potresti voler impostare la priorità dei processi in tempo reale per ridurre la varianza del tempo di avvio. Ci saranno alcune sovrapposizioni ma potrebbe sembrare ok per la tua applicazione da quello che deduco. Esempio:

21

Vedere this question e rispondere a Errore server. In breve, passa agli strumenti. avconv farà ciò che vuoi. (ffmpeg è diventato avconv.)

La funzione che si sta cercando si chiama segmentazione. La riga di comando sarebbe simile a questa:

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

Si consiglia di utilizzare '-segment_atclocktime 1' se l'applicazione è per" CCTV ". Dato che questo cercherà di dividere in base all'orologio a muro e non al tempo trascorso dall'inizio della registrazione. – Aron

+0

Ffmpeg non è diventato avconv e avconv non è il nuovo ffmpeg. Sono progetti diversi.https://stackoverflow.com/questions/9477115/what-are-the-differences-and-similarities-between-ffmpeg-libav-and-avconv –

5

soluzione Alexander Garden funziona per ffmpep utilizzando la versione di seguito. Sostituire avconv con ffmpeg.

./ffmpeg -i rtsp: //10.2.2.19/live/ch01_0 -c copiare -mappa 0 -f segmento -segment_time 300 mp4 -segment_format "capture-% 03d.mp4"

Sto includendo questa intestazione a causa della confusione di FFmpeg sulle versioni, lo scisma di ubuntu e il rapido sviluppo.

versione ffmpeg N-80023-gd55568d Copyright (c) 2000-2016 sviluppatori la FFmpeg costruito con gcc 4.8 (Ubuntu 4.8.4-2ubuntu1 ~ 14.04.1) configurazione: --prefix =/home/rhinchley/q10/ffmpeg_build --pkg-config-flags = - statico --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

Grazie per aver condiviso questa versione della soluzione di FFmpeg, preferirei usare FFmpeg su avconv. E sarebbe meglio racchiudere il tuo URL con virgolette doppie in modo che bash non venga confuso con strani caratteri che ti faranno rimanere bloccati nella sezione di intestazione di FFmpeg. –