2013-04-23 22 views
6

Sto provando a riprodurre un loop video su justin.tv usando FFmpeg? Sono riuscito a ciclo una sequenza di immagini e combinarlo con la linea in audio:FFmpeg Live Stream - Loop Video?

 
ffmpeg -loop 1 -i imageSequence%04d.jpg -f alsa -ac 2 -ar 22050 -ab 64k \ 
    -i pulse -acodec adpcm_swf -r 10 -vcodec flv \ 
    -f flv rtmp://live.justin.tv/app/<yourStreamKeyHere> 

E 'possibile fare questo con un file video?

risposta

2

Sinclair Media ha trovato una soluzione utilizzando il filtro lavfi e aggiungendo :loop=0 al nome del file:

Questo non è testato:

ffmpeg -f lavfi -re -i movie=StreamTest.avi:loop=0 \ 
-acodec libfaac -b:a 64k -pix_fmt yuv420p -vcodec libx264 \ 
-x264opts level=41 -r 25 -profile:v baseline -b:v 1500k \ 
-maxrate 2000k -force_key_frames 50 -s 640×360 -map 0 -flags \ 
-global_header -f segment -segment_list index_1500.m3u8 \ 
-segment_time 10 -segment_format mpeg_ts \ 
-segment_list_type m3u8 segmented.ts 

Ma dovrebbe creare un file locale "index_1500.m3u8" che trasmette il video in "StreamTest.avi".

+0

ho dovuto usare questi argomenti per farlo funzionare correttamente: '-f lavfi -re -fflags + genpts -i "movie = GleamingThatBrownbutterfly.webm: loop = 0, setpts = N/(FRAME_RATE * TB) "'. Senza di essi, si stava fermando dopo il primo ciclo e il resto dei fotogrammi è stato rilasciato. – jadkik94

3

Definitivamente possibile. Nelle recenti versioni di ffmpeg hanno aggiunto un flag -stream_loop che consente di eseguire il looping dell'input tutte le volte che è necessario.

Il gotcha è che se non si rigenerano i pts dalla sorgente, ffmpeg farà cadere i fotogrammi dopo il primo ciclo (dato che il timestamp tornerà improvvisamente indietro nel tempo). Per evitare ciò, devi dire a ffmpeg di generare i pts in modo da ottenere un timestamp crescente tra i loop. Questo viene fatto con la chiamata + genpts (deve essere prima di -i arg).

Ecco un esempio di chiamata ffmpeg (sostituire $ F con il file di input). Questo esempio genera due flussi di output e l'argomento -stream_loop -1 indica a ffmpeg di eseguire continuamente il loop dell'input. L'output in questo caso è per un assimilato streaming stream simile (MetaCDN), adattato di conseguenza alle tue esigenze.

ffmpeg -threads 2 -re -fflags +genpts -stream_loop -1 -i $F \ 
-s 640x360 -ac 2 -f flv -vcodec libx264 -profile:v baseline -b:v 600k -maxrate 600k -bufsize 600k -r 24 -ar 44100 -g 48 -c:a libfdk_aac -b:a 64k "rtmp://publish.live.metacdn.com/2050C7/dfsdfsd/lowquality_664?hello&adbe-live-event=lowquality_" \ 
-s 1920x1080 -ac 2 -f flv -vcodec libx264 -profile:v baseline -b:v 2000k -maxrate 2000k -bufsize 2000k -r 24 -ar 44100 -g 48 -c:a libfdk_aac -b:a 64k "rtmp://publish.live.metacdn.com/2050C7/dfsdfsd/highquality_2064?mate&adbe-live-event=highquality_"