En azından FFmpeg 2.8.x'de (ama oldie de işe yaramalı) kullanabilirsiniz.
lavfigiriş formatı ve karmaşık filtre grafiği kullanarak
movieve
setptsiçin bir argüman olarak filtreler
-iseçeneği.
Bir sonraki komut sizin için bu işi yapıyor:
ffmpeg -re -f lavfi -i "movie=filename=input.mp4:loop=0, setpts=N/(FRAME_RATE*TB)" output.mp4
Sıfır
loop=bağımsız değişkenler sonsuzluk döngüsü anlamına gelir.Değerler daha büyük sıfır kümeleri tekrarlama sayıları.
setptsPTS ayarlaması için gerekli olan ikinci ve sonraki PTS filtreleri tekrar eder, aksi halde çoğu çıkış muxeri monotonik olmayan PTS artışıyla başarısız olur: döngü PTS'yi yeniden hesaplamaz.
Unutmayın ki, çerçevelerin kod çözme/kodlama olmadan bypass çerçevelerinin kullanılması imkansızdır: tasarım filtreleri yalnızca kod çözülmüş çerçevelerle ilgilidir.
FFmpeg 2.8.2 yeni giriş seçeneğinde
-stream_loopinroduced.İlk önce daha basit çalıştığını düşünüyorum ve kod dönüştürmeden kopya içeriğine izin veriyor:
ffmpeg -re -stream_loop -1 -i input.mp4 -c copy -y output.mp4
Ancak PTS'yi yeniden hesaplamaz ve çıktı dosyası yanlıştır.PTS'yi düzeltmek için filtre eklerseniz (bkz.
setpts) kaldırmanız gerekir
-c copyçok.Yalnızca bit akımı filtreleri kodlanmış paketlerle ilgilenebilir, ancak PTS'yi düzeltmek için herhangi bir bit akımı filtresi yoktur (bkz:https://ffmpeg.org/ffmpeg-bitstream-filters.html)
Her durumda, ikinci geçişte ffmpeg hata ile başarısız olur:
input.mp4: Resource temporarily unavailable
Benim için bilinen iş: PTS limitsiz giriş dosyası için konteynır kullanın (akış konteyneri).Bunlardan biri, beni tanıyor, MPEG-TS.Böylece MP4 dosyanızı MPEG-TS dosyasına dönüştürebilirsiniz:
ffmpeg -i input.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts input.ts
Sonsuzluk dosyasını oluşturmak için bir sonraki komutu kullanın:
ffmpeg -re -stream_loop -1 -i input.ts -c copy -strict -2 -bsf:a aac_adtstoasc -y output.mp4
(bit akımı filtreleri yalnızca gerektiğinde kullanılmalıdır, örneklerimde gerekli olmalıdır)
Bu durumda FFmpeg> = 2.8.2 gereklidir.