Concat FFMPEG tidak termasuk gambar lingkaran (menggunakan pipa bernama)

0

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.

Daniel Jacob Archer
sumber
Inilah output dari FFMPEG: d.pr/n/1aHGB
Daniel Jacob Archer
Tolong tunjukkan output konsol lengkap dari:ffmpeg -i input1.mp4 -i input2.mp4 -i input3.jpg
llogan
@ LordNeckbeard apa yang Anda harapkan dari perintah itu? Ini hanya input - maksud Anda ffmpeg setuju dengan input tersebut?
Daniel Jacob Archer
Saya ingin melihat semua info tentang input. Saya curiga mereka butuh pekerjaan sebelum disatukan.
Logan
Ah baiklah. Inilah hasilnya: d.pr/n/19Dgv
Daniel Jacob Archer

Jawaban:

0

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).

{ ./prog1 ; ./prog2 ; ./prog3 ; } && ./prog4
Erik Bryer
sumber
Saya sebenarnya mengikuti dokumentasi Concatenate FFMPEG, jadi saya tidak tahu bahwa itu harus ditulis seperti yang Anda sarankan ... Juga solusi yang Anda usulkan akan memerlukan penulisan skrip untuk setiap perintah.
Daniel Jacob Archer
Saya tidak bermaksud menyarankan bahwa lebih banyak 'prog' akan diperlukan. "prog1", misalnya, adalah pengganti untuk "ffmpeg -y -i input1.mp4 -c copy -bsf: v h264_mp4toannexb -f mpegts temp1". (Anda akan / tidak / perlu membuat lebih banyak perintah.) Maksud saya secara keseluruhan adalah untuk mengeksplorasi kontrol pekerjaan yang melekat dalam bash, misalnya latar belakang pekerjaan dan implikasinya. Saya tidak memiliki dokumen ffmpeg, tapi saya pikir jika Anda mencoba cuplikan kode (tentu saja memasukkan perintah ffmpeg Anda secara penuh alih-alih "prog1", misalnya) Anda mungkin akan terkejut. Semoga beruntung untukmu.
Erik Bryer