Setelah banyak penelitian dan pengujian, saya menulis sebuah perintah yang dapat saya adaptasi untuk banyak sumber untuk digabungkan menggunakan FFMPEG. Saya mengalami masalah meskipun dengan menambahkan gambar lingkaran (sebagai video) ke dalam rangkaian.
Inilah perintahnya:
ffmpeg -y -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts temp1 2> /dev/null & \
ffmpeg -y -i input2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts temp2 2> /dev/null & \
ffmpeg -y -f lavfi -i anullsrc -loop 1 -f image2 -i input3.jpg -r 30 -t 3 -pix_fmt yuvj420p -map 0:a -map 1:v -f mpegts temp3 2> /dev/null & \
ffmpeg -y -f mpegts -i "concat:temp1|temp2|temp3" -bsf:a aac_adtstoasc out.mp4
Hasil akhirnya harus 2 video, kemudian gambar dilingkarkan selama 3 detik (tanpa audio), semua disatukan menjadi video panjang. Alih-alih, yang saya dapatkan hanyalah satu video gabungan yang berisi dua video pertama, tetapi bukan gambar yang dilingkarkan.
ffmpeg -i input1.mp4 -i input2.mp4 -i input3.jpg
Jawaban:
Tampaknya skrip Anda melatar belakangi 3 perintah pertama, jadi skrip Anda menjalankan perintah pada saat yang hampir bersamaan. Tidak ada jaminan perintah 1-3 akan selesai sebelum ke-4 menyatukan output mereka. Menghapus trailing ampersand dan backslash akan menyebabkan script menunggu setiap perintah selesai sebelum memulai berikutnya. Jika setiap perintah menggunakan sebagian besar bandwidth i / o, maka perubahan ini tidak akan terlalu memperlambat skrip Anda. Jika tidak, berikut adalah metode untuk menjalankan 3 perintah pertama di latar belakang tetapi menunggu sampai mereka selesai menjalankan perintah ke 4 (belum diuji).
sumber