Setidaknya pada FFmpeg 2.8.x (tetapi oldie juga berfungsi) Anda dapat menggunakan lavfi
format input dan grafik filter yang kompleks menggunakan movie
dan setpts
memfilter sebagai argumen untuk -i
opsi.
Perintah selanjutnya melakukan pekerjaan ini untuk Anda:
ffmpeg -re -f lavfi -i "movie=filename=input.mp4:loop=0, setpts=N/(FRAME_RATE*TB)" output.mp4
loop=
Argumen nol berarti infinity loop. Nilai nol lebih besar set jumlah pengulangan. setpts
filter diperlukan untuk PTS yang menyesuaikan untuk pengulangan kedua dan kemudian, jika tidak, sebagian besar muxer keluaran akan gagal dengan PTS non-monotonik meningkat: loop tidak recalc PTS.
Perhatikan, bahwa menggunakan filter dengan asumsi bahwa bypass frame tanpa decoding / encoding tidak mungkin: by design filter hanya berurusan dengan frame yang didekodekan.
Pada FFmpeg 2.8.2 opsi input baru -stream_loop
diperkenalkan. Saya pertama kali melihatnya bekerja lebih sederhana dan memungkinkan menyalin konten tanpa transcoding:
ffmpeg -re -stream_loop -1 -i input.mp4 -c copy -y output.mp4
Tapi itu tidak menghitung ulang PTS dan file output salah. Jika Anda menambahkan filter untuk memperbaiki PTS (lihat setpts
), Anda juga harus menghapusnya -c copy
. Hanya filter bitstream yang dapat menangani paket yang disandikan, tetapi tidak ada filter bitstream untuk memperbaiki PTS (lihat: https://ffmpeg.org/ffmpeg-bitstream-filters.html )
Bagaimanapun ffmpeg pada pass kedua gagal dengan kesalahan:
input.mp4: Resource temporarily unavailable
Diketahui bekerja di sekitar untuk saya : gunakan wadah untuk file masukan tanpa batas PTS (wadah streaming) Salah satunya, kenal saya, adalah MPEG-TS. Jadi, Anda dapat dengan mudah mengkonversi file MP4 Anda ke MPEG-TS:
ffmpeg -i input.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts input.ts
Dan gunakan perintah berikutnya untuk membuat file infinity:
ffmpeg -re -stream_loop -1 -i input.ts -c copy -strict -2 -bsf:a aac_adtstoasc -y output.mp4
(filter bitstream harus digunakan hanya jika diperlukan, pada sampel saya diperlukan)
FFmpeg> = 2.8.2 diperlukan dalam kasus ini.