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_"
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