Bagaimana cara mendapatkan FFMPEG untuk bergabung dengan file gambar yang tidak berurutan? (lewati 3 detik)

27

Saya memiliki banyak gambar, yang mengikuti pola ini.

0001.png
0004.png
0007.png
0010.png
0013.png
0016.png
0019.png
...

Mereka berada dalam urutan yang benar, tetapi FFMPEG mengabaikan apa pun setelah file pertama, karena tidak dapat menemukan 0002.png. Bagaimana saya bisa mendapatkannya untuk bergabung dengan file-file ini?

Saya mencoba

ffmpeg -i %04d.png out.avi
Perampok
sumber
2
Bagaimana kalau sementara mengubah nama mereka, membuat AVI dan kemudian mengubah nama mereka kembali ke (3x-2) skema .png? Bulk Rename Utility @ bulkrenameutility.co.uk/Main_Intro.php adalah gratis, umm, pengubah jumlah massal.
Gyan

Jawaban:

18

dengan ffmpeg 0.11.1 semudah:

ffmpeg -f image2 -i %*.png out.avi

Dari manhalaman, dalam contoh di bawah "Konversi format file video dan audio":

Saat mengimpor urutan gambar, -ijuga mendukung perluasan pola wildcard seperti shell (globbing) secara internal. Untuk menurunkan kemungkinan mengganggu nama file Anda yang sebenarnya dan ekspansi glob shell, Anda harus mengaktifkan glob meta karakter dengan mengawali mereka dengan satu %karakter, seperti di foo-%*.jpeg, foo-%?%?%?.jpegatau foo-00%[234%]%*.jpeg.

Perbarui per komentar: pada versi terbaru Anda sekarang harus menggunakan -i '*.png'sintaks.

rymo
sumber
3
Ini belum berhasil bagi saya menggunakan ffmpeg atau avconv di Ubuntu 13.04
hellocatfood
2
Tampaknya ini bukan opsi lagi.
Timmmm
2
The glob_sequencetipe pola sudah ditinggalkan, namun globjenis pola tidak. Jawaban oleh Mulvya dan Peter Cordes berhasil.
dr. Sybren
1
Pattern type 'glob_sequence' is deprecated: use pattern_type 'glob' instead
Serge Stroobandt
1
Sama seperti klarifikasi, karena halaman ini saat ini adalah hasil teratas di Google untuk pesan peringatan itu ( Pattern type 'glob_sequence' is deprecated...): perintah yang diberikan oleh rymo di atas (khususnya, -i %*.png) akan menyebabkan peringatan. Untuk menghilangkannya, gunakan sintaks yang sedikit berbeda di Peter Cordes answer ( -i '*.png').
James
19

Selain solusinya dalam komentar saya, Anda harus dapat menggunakan sintaks ini dari dokumentasi ffmpeg :

ffmpeg -f image2 -pattern_type glob -i '*.png' out.avi

Kutipan itu penting, Anda perlu ffmpeg untuk melihatnya *, tidak perlu shell membentangkannya.

Gyan
sumber
Tidak bekerja untuk saya, tetapi mungkin karena saya memiliki bangunan yang lebih tua. Saya menerima yang ini karena kemungkinan besar akan membantu pengguna di masa depan.
Brigand
Menurut dokumentasi ffmpeg Anda harus menggunakan '* .png' alih-alih% 04d.png dengan tipe pola glob.
Friend Of George
Itu kemudian akan memilih semua png yang ada di folder, selain 00xx.png, sedangkan OP ingin mengantri hanya pngs% 04d tanpa khawatir tentang kontinuitas penomoran.
Gyan
2
Saya cukup yakin bahwa Anda perlu memasukkan *.pngtanda kutip tunggal (jadi '*.png') untuk menghindarinya diperluas oleh shell gaya Unix (jadi, OSX dan linux dll).
evilsoup
1
Sayangnya pengembang ffmpeg membuat opsi globbing file menjadi pilihan ! Build standar windows tidak menyertakannya.
Timmmm
9

Dari http://www.ffmpeg.org/faq.html : Jika Anda memiliki banyak gambar untuk diganti namanya, Anda dapat menggunakan perintah berikut untuk meringankan beban. Perintah, menggunakan sintaksis bourne shell, secara simbolis menautkan semua file dalam direktori saat ini yang cocok dengan * jpg ke direktori '/ tmp' dalam urutan 'img001.jpg', 'img002.jpg' dan seterusnya.

x=1; for i in *jpg; do counter=$(printf %03d $x); ln -s "$i" /tmp/img"$counter".jpg; x=$(($x+1)); done

Nikhil
sumber
Saya menggunakan ini untuk menggabungkan beberapa urutan seqA-[0001-n].png,, seqB-[0001-n].pngdll. Jauh lebih mudah daripada main-main dengan image2 globbing dan filter concat.
z0r
Bagi saya ini tidak bekerja sampai saya diganti for i in *jpgdengan for i in /full/path/*jpg, karena semua symlink rusak
Jezzamon
4

Saya sebenarnya akan menyarankan hal yang sama yang disarankan Mulvya. Setiap kali saya perlu melakukan hal-hal seperti ini ketika berhadapan dengan rendering animasi 3D, saya telah mengganti nama file untuk membuatnya berurutan. Hanya saja lebih mudah untuk bekerja dengan cara itu di banyak perangkat lunak yang berbeda kecuali jika Anda perlu mempertahankan nama file untuk beberapa alasan. Total Commander juga merupakan alat yang hebat untuk multi-penggantian nama.

AJ Henderson
sumber
Saya akhirnya melakukan sesuatu yang serupa (skrip penggantian nama Python).
Brigand
3

Untuk bagian urutan yang hilang, saya menggunakan 2 liner

CONCAT=$(echo $(ls *.png | sort -n -t _ -k 2) | sed -e "s/ /|/g")
ffmpeg -framerate 25 -i "concat:$CONCAT" -c:v libx264 -profile:v high -pix_fmt yuv420p output.mp4

Semoga ini bisa membantu seseorang di masa depan

Shakil
sumber