Saya ingin membuat .gif
gambar animasi dari serangkaian gambar yang diberikan .jpg
.
Saya lebih suka melakukannya dari baris perintah, jadi alat baris perintah akan sangat diterima.
Saya ingin membuat .gif
gambar animasi dari serangkaian gambar yang diberikan .jpg
.
Saya lebih suka melakukannya dari baris perintah, jadi alat baris perintah akan sangat diterima.
Jawaban:
Anda dapat menggunakan paket ImageMagick . Instal menggunakan perintah:
sudo apt-get install imagemagick
Sekarang Anda dapat membuat gif
dari dari sejumlah gambar ( jpg
) menggunakan:
convert -delay 20 -loop 0 *.jpg myimage.gif
-resize 50%
.
-deconstruct
. Saya juga menemukan bahwa ImageMagick sangat haus akan memori, lihat benchmark: askubuntu.com/a/1102183/52975
convert -delay 0 -loop 0 *.tif myanimated.gif
bekerja dengan baik, pada 720 file tif
Untuk menyelesaikan jawaban @ Mayayux:
-resize
opsi:Dalam kasus saya, saya memiliki 4608x3456 gambar dan gif yang dihasilkan lebih dari 300M untuk 32 gambar
convert -resize 20% -delay 20 -loop 0 *.jpg myimage.gif
atau
convert -resize 768x576 -delay 20 -loop 0 *.jpg myimage.gif
*.jpg
menyebalkan sedikit ketika berhadapan dengan nilai numerik, Anda dapat menghasilkan gif dengan foto yang tidak disortir.
$ ls|cat
21-33-26_1.jpg
21-33-26_10.jpg // <--- this one
21-33-26_2.jpg
21-33-26_3.jpg
21-33-26_4.jpg
21-33-26_5.jpg
21-33-26_6.jpg
21-33-26_7.jpg
21-33-26_8.jpg
21-33-26_9.jpg
21-33-28_1.jpg // <--- should be here
21-33-28_2.jpg
21-33-28_3.jpg
...
Karena pemotretan diambil dengan sangat cepat (10 / dtk) mereka semua memiliki waktu modifikasi yang sama dan Anda tidak dapat memperdayainya ls -t
misalnya. Di ubuntu, Anda dapat menggunakan ls -v
sesuatu, seperti:
convert -resize 768x576 -delay 20 -loop 0 `ls -v` myimage.gif
Mengurutkan secara numerik cukup rumit pada Mac OS X, saya kira Anda harus membuat skrip khusus.
find
,, sort
brace ekspansi, dan sebagainya. The ls
Alat ini sangat cocok untuk hal semacam ini. Gunakan find
. Ada sedikit kurva belajar, tetapi itu sepadan.
Anda dapat dengan mudah melakukan ini dengan GIMP. Pertama instal jika belum diinstal dengan
sudo apt-get install gimp
Dari GIMP, buka File -> Open as Layers untuk membuka semua png pada layer mereka sendiri.
Dari sini Anda dapat melakukan pengeditan pada layer dan, setelah selesai, buka File -> Export As . Dari dialog pastikan untuk mengatur jenis file ke GIF.
Dari sana Anda akan pergi ke opsi ekspor GIF. Centang opsi ' As Animation ' dan atur parameter sesuai kebutuhan.
solusi ffmeg + data uji
Pada Ubuntu 18.10, ffpmeg 4.0.2-2, ImageMagick 6.9.10-8, saya telah menemukan bahwa ffmpeg jauh lebih cepat dan menggunakan lebih sedikit memori .
Perintah konversi yang paling sederhana adalah:
ffmpeg \
-framerate 60 \
-pattern_type glob \
-i '*.png' \
-r 15 \
-vf scale=512:-1 \
out.gif \
;
Anda bisa mendapatkan data pengujian saya dengan:
wget -O opengl-rotating-triangle.zip https://github.com/cirosantilli/media/blob/master/opengl-rotating-triangle.zip?raw=true
unzip opengl-rotating-triangle.zip
cd opengl-rotating-triangle
Data pengujian dihasilkan dengan: https://stackoverflow.com/questions/3191978/how-to-use-glut-opengl-to-render-to-a-file/14324292#14324292 dan berisi 256 1024x1024 gambar PNG.
Dan berikut ini adalah data uji yang dapat Anda hasilkan langsung di peramban Anda sekarang juga! https://stackoverflow.com/questions/19235286/convert-html5-canvas-afterence-to-a-video-file/57153718#57153718
ffmpeg
Opsi penting yang ingin saya soroti adalah:
-pattern_type glob
: cara mudah untuk memilih gambar
-framerate 60
: asumsikan 60 FPS pada gambar input, dan hasilkan FPS yang sama.
ffmpeg
tidak dapat mengetahui sebaliknya, karena tidak ada data FPS dalam gambar karena ada dalam format video.
256 frame input membutuhkan waktu sekitar 4 detik untuk selesai.
-r 15
: pilihan. Pilih satu setiap 4 gambar jadi kurangi ukuran ( 4 == 60 / 15
).
Dengannya, identify out.gif
dikatakan bahwa GIF hanya berisi 64 frame.
Masih butuh 4 detik untuk bermain, jadi penundaan diubah untuk membuat semuanya cocok.
-vf scale=512:-1
: pilihan. Atur lebar, skala tinggi secara proporsional, biasanya untuk mengurangi ukuran dan menghemat ruang.
Agar ImageMagick berfungsi, pertama-tama saya harus memodifikasi batas disk dan memorinya /etc/ImageMagick-6/policy.xml
seperti yang dijelaskan di: https://superuser.com/questions/1178666/imagemagick-convert-quvert-quits-after-some-pages
Lihat juga:
ImageMagick vs ffmpeg benchmark
Saya membandingkan perintah:
/usr/bin/time -v convert *.png -deconstruct -delay 1.6 out-convert.gif
/usr/bin/time -v ffmpeg \
-framerate 60 \
-pattern_type glob \
-i '*.png' \
out-ffmpeg.gif \
;
Perintah dibuat untuk menghasilkan keluaran yang sedekat mungkin agar perbandingan itu valid:
/usr/bin/time -v
: digunakan untuk menemukan penggunaan memori maksimum seperti yang dijelaskan di: https://stackoverflow.com/questions/774556/peak-memory-usage-of-a-linux-unix-process
-deconstruct
: Gambar GIF dapat berisi hanya persegi panjang yang dimodifikasi minimal dari bingkai sebelumnya untuk membuat GIF lebih kecil.
ffmpeg
menghitung perbedaan tersebut secara default, tetapi ImageMagick tidak, kecuali -deconstruct
digunakan.
Anda pada dasarnya ingin menggunakan opsi itu setiap kali dengan ImageMagick.
Kita dapat mengamati perbedaannya dengan:
identify out.gif
Dengan versi terkompresi, semua frame memiliki ukuran lebih kecil dari yang awal, misalnya:
out.gif[0] GIF 1024x1024 1024x1024+0+0 8-bit sRGB 256c 16.7865MiB 0.010u 0:00.010
out.gif[1] GIF 516x516 1024x1024+252+257 8-bit sRGB 256c 16.7865MiB 0.010u 0:00.010
out.gif[2] GIF 515x520 1024x1024+248+257 8-bit sRGB 256c 16.7865MiB 0.010u 0:00.010
Dalam contoh ini, frame kedua hanya 516x516
bukan 1024x1024 penuh, dan ditempatkan pada offset 252+257
. Karena itu hanya mengandung segitiga tengah.
Lihat juga: bagaimana saya bisa mengubah ukuran file GIF animasi menggunakan ImageMagick?
-delay
: nilai yang cocok dengan 60FPS dari ffmpeg
. Seharusnya tidak masalah untuk kinerja konversi, tetapi saya tidak ingin mengambil risiko itu.
GIF keluaran memiliki ukuran yang sama dan terlihat identik secara visual.
Kami mendapatkan untuk ImageMagick:
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:56.16
Maximum resident set size (kbytes): 2676856
dan untuk ffmpeg:
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:04.41
Maximum resident set size (kbytes): 97172
dari mana kita melihat bahwa:
Perangkat keras uji: Laptop Lenovo ThinkPad P51 , Intel Core i7-7820HQ, 32GB (16 + 16) DDR4 2400MHz SODIMM, SSD PCIe TLC OPAL2 512GB.
-r
dan -v
memerintahkan, masih keluaran gif yang kualitasnya jauh lebih rendah daripada file png asli. Bagaimana menjaga kualitas gif yang sama dengan file png yang diberikan?
-framerate 60 -r 60
. Periksa GIF yang dihasilkan dan masukkan gambar dengan alat ImageMagick ingin identify
mencoba dan mencari tahu apa yang sedang terjadi.
Anda dapat menggunakan program yang disebut konversi yang disertakan dalam paket imagemagick. Ini adalah command line driven, tetapi sangat mudah digunakan. Instal baik melalui pusat perangkat lunak, atau pergi ke prompt perintah dan ketik
sudo apt-get install imagemagick
Sekarang untuk membuat .gif.
convert -delay 100 -size 100x100 xc:SkyBlue \
-page +5+10 balloon.gif -page +35+30 medical.gif \
-page +62+50 present.gif -page +10+55 shading.gif \
-loop 0 animation.gif
* Perhatikan contoh di atas langsung dari Contoh Gambar Magick
convert -delay 20 -loop 0 *.png out.gif
membuat GIF pengulangan.