Terus jalankan FFmpeg


0

Selamat pagi, saya memiliki skrip yang menghasilkan 2 gambar setiap detik dalam satu folder dan saya ingin ffmpeg untuk mengubahnya menjadi serangkaian video mpeg-4 berdurasi 5 detik dan yang menunjukkan 2 gambar per detik (total 10 frame). Masalahnya adalah bahwa setelah saya memulai skrip dan setelah saya menjalankan ffmpeg, ia memproses video dengan gambar yang ditangkap tepat setelah saya menjalankan perintah saja dan kemudian ditutup. Saya mencoba dengan perintah -re juga dan tidak ada yang terjadi. Bagaimana cara menjaga ffmpeg tetap berjalan dan mengonversi gambar saat sedang dibuat? Berikut kode yang saya gunakan:

ffmpeg -re -framerate 2 -s 1920x1200 -i C:\Desktop\input\%05d.bmp -vcodec libx264 -pix_fmt yuv420p -map 0 -segment_time 5 -g 5 -sc_threshold 0 -force_key_frames "expr:gte(t,n_forced*5)" -f segment C:\Desktop\output\%05d.mp4

Yang saya inginkan adalah menjalankan ffmpeg satu kali dan membiarkannya bekerja dan menutup hanya ketika mereka selesai menghasilkan.

Jawaban:


1

Pipa gambar. Saat membaca gambar dari file, ffmpeg akan mengidentifikasi gambar terakhir dalam urutan selama inisialisasi dan akan membaca hingga gambar itu.

cat images | ffmpeg -f image2pipe -re -framerate 2 -i - -vcodec libx264 ...

Edit : Tidak mengherankan kucing juga menetapkan daftar input pada inisialisasi. Namun, metode di bawah ini berfungsi untuk saya.

Minta skrip menambahkan gambar baru ke file gumpalan

yaitu cat new-image >> all-images

sementara panggilan ffmpeg adalah

ffmpeg -f image2pipe -re -framerate 2 -i all-images -vcodec libx264 ...

Sangat penting bahwa kecepatan gambar baru dan penambahan Anda sama atau lebih cepat dari kecepatan baca ffmpeg.


Saya punya Windows, cat tidak akan berfungsi. Saya mencoba dengan tipe tetapi tidak berhasil.
Vincent Bavaro

Mendapatkan gow dan kamu akan punya kucing.
Gyan

mendapat gow, itu memberi saya kesalahan ini: C: \ Desktop \ input \% 05d.bmp: Tidak ada file atau direktori
Vincent Bavaro

cat *.bmp bekerja disini
Gyan

itu memberi saya kesalahan yang sama. Mungkin saya memodifikasi perintah saya dengan cara yang salah? Pada dasarnya sekarang seperti: cat * .bmp | ffmpeg -f image2pipe -re -frame 2 -s 1920x1200 -i C: \ Desktop \ input \% 05d.bmp ...
Vincent Bavaro

0

Untuk menjaga ffmpeg mendapatkan tambahan gambar baru, Anda harus mendapatkannya dari stdin. Anda harus menulis sebuah program atau skrip yang akan terus memberinya gambar baru ketika mereka tiba.

Sebagai contoh, lihat:

Program-program ini akan membutuhkan beberapa perubahan agar sesuai dengan kebutuhan Anda, tetapi mereka adalah titik awal yang baik.


Saya akan mencobanya tetapi saya akan menyukai solusi ffmpeg bawaan karena akan menambah file ke stdin akan memperlambat proses. Saya pikir perintah -re seharusnya bekerja seperti itu?
Vincent Bavaro
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.