2013-04-23 20 views
6

Próbuję przesłać wideo pętli do justin.tv przy użyciu FFmpeg? Udało mi się zapętlić sekwencję obrazów i połączyć ją z dźwiękiem liniowym:FFmpeg na żywo - pętla wideo?

 
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> 

Czy można to zrobić z plikiem wideo?

Odpowiedz

2

Sinclair Media znalazł rozwiązanie za pomocą filtra lavfi i dołączanie :loop=0 do nazwy pliku:

To niesprawdzone:

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 

Należy jednak stworzyć lokalną „index_1500.m3u8” plik przesyła wideo do "StreamTest.avi".

+0

musiałem użyć tych argumentów, aby to działało poprawnie: '-f lavfi -R -fflags + genpts -i„filmowy = GleamingThatBrownbutterfly.webm: loop = 0, setpts = n/(frame_rate * TB) "'. Bez nich zatrzymywał się po pierwszej pętli, a pozostałe ramki zostały zrzucone. – jadkik94

3

Zdecydowanie możliwe. W najnowszych wersjach ffmpeg dodano flagę -stream_loop, która pozwala zapętlić dane wejściowe tyle razy, ile potrzeba.

Podstawą jest to, że jeśli nie zregenerujesz punktów ze źródła, ffmpeg usunie klatki po pierwszej pętli (ponieważ znacznik czasu nagle cofnie się w czasie). Aby tego uniknąć, musisz powiedzieć ffmpeg, aby wygenerował punkty, aby uzyskać rosnącą sygnaturę czasową między pętlami. Odbywa się to za pomocą wywołania + genpts (musi to być przed argumentem -i arg).

Oto przykładowe wywołanie ffmpeg (zamień $ F na twój plik wejściowy). Ten przykład generuje dwa strumienie wyjściowe, a argument -stream_loop-1 mówi ffmpeg, aby ciągle pętli wejścia. Dane wyjściowe w tym przypadku dotyczą podobnego strumienia transmisyjnego (MetaCDN), dostosuj odpowiednio do swoich wymagań.

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_" 
Powiązane problemy