Katakanlah saya memiliki file mp3 berdurasi 1 menit. Dan saya punya 20 gambar png. Saya ingin menggabungkan gambar-gambar ini dan audio menjadi file video, tetapi saya tidak ingin setiap gambar bertahan 3 detik di layar, saya ingin beberapa gambar bertahan 5 detik, yang lain 1 detik dll.
Satu-satunya cara yang dapat saya pikirkan adalah hanya menyalin gambar yang seharusnya bertahan lebih lama, misalnya memiliki image1, image2, image3 persis sama, ini memberi saya 3x lebih banyak waktu dalam video.
Namun ini sangat memakan waktu dan ruang. Apakah ada saklar / parameter dalam ffmpeg yang memungkinkan saya melakukan itu?
Jawaban:
Menggunakan ffmpeg 2.0 ada beberapa cara untuk melakukan ini:
Salah satu metode adalah menggunakan waktu modifikasi file. Pertama atur waktu modifikasi dari file gambar sehingga setiap file gambar memiliki waktu modifikasi yang lebih besar daripada yang sebelumnya; perbedaan waktu adalah durasi gambar sebelumnya (dengan resolusi 1 detik). Kemudian gunakan opsi image2 demuxer
-ts_from_file 1
. Sebagai contoh:Metode lain adalah dengan menggunakan
concat
demuxer , yang mengambil daftar file untuk digabungkan, dengan durasi opsional. Pertama buat file yang mencantumkan gambar dan durasi Anda yang terlihat seperti ini:Kemudian berikan file ini sebagai input ke ffmpeg. Sebagai contoh:
Anda mungkin perlu menduplikasi file terakhir setelah durasi akhir.
-c:a copy
menyalin audio mp3 apa adanya; jika Anda ingin mengonversinya ke audio codec lain maka Anda dapat menentukan itu alih-alihcopy
. Anda mungkin juga ingin menentukan codec video dengan-c:v
atau format piksel berbeda dengan-pix_fmt
, seperti-c:v libx264 -pix_fmt yuv420p
.-vf fps=25
akan membuat frame rate 25 fps. Jika audio Anda lebih panjang dan Anda ingin memotongnya setelah gambar, gunakan-shortest
opsi.sumber
-c:v libx264 -profile:v baseline -pix_fmt yuv420p out.mp4
alih-alih out.avi, atau coba pemain lain seperti mpv atau ffplay. Pastikan juga Anda menggunakan versi FFmpeg saat ini, dan duplikat nama file gambar terakhir setelah durasi akhir.Asumsi
ffmpeg -i in.ffconcat -vf fps=25 out.avi
(2018: konten file in.ffconcat) - ini berfungsi:
sementara ini tidak
yaitu dalam kasus kedua
ffprobe out.avi -show_entries format=duration -v 0
sumber