Przynajmniej na FFmpeg 2.8.x (ale oldie też powinno działać) możesz użyć lavfi
jako formatu wejściowego i wykresu złożonego filtru używając movie
i setpts
filtrów jako argumentu za -i
opcją.
Następne polecenie wykonujące tę pracę dla Ciebie:
ffmpeg -re -f lavfi -i "movie=filename=input.mp4:loop=0, setpts=N/(FRAME_RATE*TB)" output.mp4
Zero loop=
argumentów oznacza pętlę nieskończoności. Wartości większe zero ustawiają liczby powtórzeń. setpts
filtry wymagane do regulacji PTS dla drugiego i późniejszych powtórzeń, w przeciwnym razie większość multiplekserów wyjściowych zawiedzie z nie-monotonicznym wzrostem PTS: pętla nie przelicza PTS.
Zauważ, że stosowanie filtrów zakładających, że pomijanie ramek bez dekodowania / kodowania jest niemożliwe: filtry według projektu dotyczą tylko zdekodowanych ramek.
W FFmpeg 2.8.2 wprowadzono nową opcję -stream_loop
wprowadzania. Najpierw wyglądam, że działa prostiej i pozwala na kopiowanie treści bez transkodowania:
ffmpeg -re -stream_loop -1 -i input.mp4 -c copy -y output.mp4
Ale nie oblicza ponownie PTS, a plik wyjściowy jest nieprawidłowy. Jeśli dodasz filtr, aby naprawić PTS (patrz setpts
), musisz -c copy
również usunąć . Tylko filtry strumienia bitów mogą obsługiwać zakodowane pakiety, ale nie ma żadnych filtrów strumienia bitów do naprawy PTS (patrz: https://ffmpeg.org/ffmpeg-bitstream-filters.html )
W każdym przypadku ffmpeg przy drugim przejściu nie powiedzie się z błędem:
input.mp4: Resource temporarily unavailable
Znane mi rozwiązanie : użyj kontenera do pliku wejściowego bez limitów PTS (kontener strumieniowy). Jednym z nich, znanym mi, jest MPEG-TS. Możesz więc łatwo przekonwertować plik MP4 na MPEG-TS:
ffmpeg -i input.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts input.ts
I użyj następnego polecenia, aby utworzyć plik nieskończoności:
ffmpeg -re -stream_loop -1 -i input.ts -c copy -strict -2 -bsf:a aac_adtstoasc -y output.mp4
(filtry strumienia bitów powinny być używane tylko w razie potrzeby, na moich próbkach jest to wymagane)
W tym przypadku wymagany jest FFmpeg> = 2.8.2.