Saya mencoba overlay video input dengan banyak gambar di mana setiap gambar harus ditampilkan untuk waktu yang singkat. Saya mencapai ini menggunakan filter kompleks (perintah di bawah). Masalahnya adalah saya punya banyak, banyak gambar (> 1000) :-)
ffmpeg -y -i in.mp4
-i logo1.png
-i logo2.png
-i logo3.png
-filter_complex "
[0:v][1:v] overlay=10:10:enable='between(n,2,4)' [tmp];
[tmp][2:v] overlay=30:30:enable='between(n,6,8)' [tmp];
[tmp][3:v] overlay=50:50:enable='between(n,10,12)';
" out.mp4
Apakah FFmpeg memungkinkan pengguna untuk melewatkan data ini di atas file teks? Gambar dihasilkan dalam memori, jadi pipa juga baik-baik saja (sebenarnya lebih disukai).
(jika itu tidak mungkin, bisakah saya mengirimkan video yang dihasilkan dalam format Bgra?; tetapi saya tidak akan memilih ini karena operasi campuran lebih mahal + lebih banyak IO: harus secepat mungkin)
Sunting: Jika saya menggunakan konfigurasi berikut, hanya gambar yang terakhir dikirim overlay.
-i ski.mp4
-f image2pipe -vcodec png -i -
-filter_complex "[0:v][1:v] overlay=10:10:enable='between(n,2,3)' [tmp];
[tmp][1:v] overlay=30:30:enable='between(n,6,7)'"
-f mp4", "out.mp4"
Keluaran FFmpeg (tampaknya melompati gambar jika memiliki ukuran berbeda):
Input stream #1:0 frame changed from size:1417x665 fmt:rgba to size:1800x700 fmt:rgba
Input stream #1:0 frame changed from size:1800x700 fmt:rgba to size:550x371 fmt:rgba
Input stream #1:0 frame changed from size:550x371 fmt:rgba to size:256x256 fmt:rgba
Bagaimana saya bisa menginstruksikan FFmpeg bahwa untuk filter pertama menggunakan gambar 1, untuk gambar 2 kedua di pipa, dll. ( Gambar memiliki ukuran yang berbeda )?