.gif
Belirli bir .jpg
resim grubundan animasyonlu bir resim yapmak istiyorum .
Bunu komut satırından yapmayı tercih ederdim, bu yüzden komut satırı araçları çok iyi karşılanacaktır.
.gif
Belirli bir .jpg
resim grubundan animasyonlu bir resim yapmak istiyorum .
Bunu komut satırından yapmayı tercih ederdim, bu yüzden komut satırı araçları çok iyi karşılanacaktır.
Yanıtlar:
ImageMagick paketini kullanabilirsiniz . Komutu kullanarak kurun:
sudo apt-get install imagemagick
Şimdi aşağıdakilerden birini kullanarak bir gif
resim ( jpg
) oluşturabilirsiniz:
convert -delay 20 -loop 0 *.jpg myimage.gif
-resize 50%
.
-deconstruct
. Ayrıca ImageMagick’in hafızada çok aç olduğunu gördüm
convert -delay 0 -loop 0 *.tif myanimated.gif
720 tif dosyalarında güzel çalıştı
@Maythux cevabını tamamlamak için:
-resize
seçeneği kullanabilirsiniz :Benim durumumda 4608x3456 görüntüye sahibim ve oluşturulan gif 32 görüntü için 300M'den fazlaydı
convert -resize 20% -delay 20 -loop 0 *.jpg myimage.gif
veya
convert -resize 768x576 -delay 20 -loop 0 *.jpg myimage.gif
*.jpg
Sayısal değerlerle uğraşırken biraz berbat, sıralanmamış resimlerle bir gif oluşturabilirsiniz.
$ 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
...
Çekimler çok hızlı bir şekilde çekildiğinde (10 / s) hepsi aynı değişiklik zamanına sahip ve ls -t
örneğin, kandırmak için kandırmamak . Ubuntu'da ls -v
bunun yerine kullanabilirsiniz :
convert -resize 768x576 -delay 20 -loop 0 `ls -v` myimage.gif
Sayısal olarak sıralama Mac OS X'te oldukça zor olsa da, özel bir komut dosyası oluşturmanız gerekecek.
find
,, sort
ayraç genişletme, vb. ls
Aracı şey bu tür için herkesin bildiği gibi uygun değildir. Kullanın find
. Biraz öğrenme eğrisi var, ama buna değer.
Bunu GIMP ile kolayca yapabilirsiniz. Önceden yüklü değilse ilk yükle
sudo apt-get install gimp
Tüm png'leri kendi katmanlarında açmak için GIMP'den Dosya -> Katmanlar Olarak Aç'a gidin .
Buradan katmanlar üzerinde düzenlemeler yapabilir ve bir kez yapılırsa, Dosya -> Farklı Ver'e gidebilirsiniz . İletişim kutusundan dosya türünü GIF olarak ayarladığınızdan emin olun.
Oradan GIF dışa aktarma seçeneklerine gidersiniz. ' Animasyon Olarak ' seçeneğini işaretleyin ve parametreleri gereken şekilde ayarlayın.
ffmeg çözümü + test verileri
Ubuntu 18.10, ffpmeg 4.0.2-2, ImageMagick 6.9.10-8'den itibaren, ffmpeg'in daha hızlı olduğunu ve çok daha az bellek kullandığını buldum .
En basit dönüşüm komutu:
ffmpeg \
-framerate 60 \
-pattern_type glob \
-i '*.png' \
-r 15 \
-vf scale=512:-1 \
out.gif \
;
Test verilerimi şu şekilde alabilirsin:
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
Test verileri şu şekilde üretildi: https://stackoverflow.com/questions/3191978/how-to-use-glut-opengl-to-render-to-a-file/14324292#14324292 ve 256 1024x1024 PNG görüntüler içeriyor.
Ve işte şimdi doğrudan tarayıcınızda oluşturabileceğiniz başka bir test verisi! https://stackoverflow.com/questions/19235286/convert-html5-canvas-sequence-to-a-video-file/57153718#57153718
ffmpeg
Vurgulamak istediğim önemli seçenekler:
-pattern_type glob
: görüntüleri seçmek için uygun bir yol
-framerate 60
: giriş görüntülerinde 60 FPS olduğunu varsay ve aynı FPS’yi çıkar.
ffmpeg
Aksi takdirde bilemezsiniz, çünkü FPS verisi yoktur, çünkü video formatlarında olduğu gibi görüntülerdedir.
256 giriş çerçevesinin bitirilmesi yaklaşık 4 saniye sürer.
-r 15
: isteğe bağlı. Her 4 görüntüden birini seçin, böylece boyutu küçültün ( 4 == 60 / 15
).
Bununla beraber identify out.gif
, GIF sadece 64 kare içerdiğini söylüyor.
Hala oynamak için 4 saniye sürüyor, bu yüzden işleri eşleştirmek için gecikme değişiyor.
-vf scale=512:-1
: isteğe bağlı. Genişliği, ölçek yüksekliğini orantılı olarak ayarlayın, genellikle boyutu küçültmek ve yerden tasarruf sağlamak için.
ImageMagick'in çalışmasını sağlamak için önce disk ve bellek sınırlarını aşağıda /etc/ImageMagick-6/policy.xml
açıklandığı şekilde değiştirmek zorunda kaldım : https://superuser.com/questions/1178666/imagemagick-convert-quits-after-some-pages
Ayrıca bakınız:
ImageMagick vs ffmpeg kıyaslaması
Komutları karşılaştırdım:
/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 \
;
Komutlar, karşılaştırmayı geçerli kılmak için mümkün olduğu kadar yakın çıktılar üretmek için oluşturulmuştur:
/usr/bin/time -v
: azami hafıza kullanımını açıklandığı gibi kullanmak için kullanılır: https://stackoverflow.com/questions/774556/peak-memory-usage-of-a-linux-unix-process
-deconstruct
: GIF görüntüleri, GIF'i küçültmek için önceki kareden yalnızca minimum değiştirilmiş bir dikdörtgen içerebilir.
ffmpeg
bu farkları varsayılan olarak hesaplar, ancak kullanılmadıkça ImageMagick yapmaz -deconstruct
.
Temel olarak ImageMagick ile her zaman bu seçeneği kullanmak isteyeceksiniz.
Aradaki farkı gözlemleyebiliriz:
identify out.gif
Sıkıştırılmış versiyonda, tüm çerçeveler bir öncekinden daha küçük boyutlara sahiptir, örneğin:
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
Bu örnekte, ikinci kare yalnızca 516x516
tam 1024x1024 yerine değildir ve ofsetine yerleştirilir 252+257
. Bu nedenle sadece orta üçgeni içerir.
Ayrıca bkz: ImageMagick'i kullanarak animasyonlu GIF dosyasını nasıl yeniden boyutlandırabilirim?
-delay
: 60FPS ile eşleşen değer ffmpeg
. Dönüşüm performansı için önemli olmamalı, ancak risk almak istemiyorum.
Çıkış GIF'leri yaklaşık olarak aynı boyuta sahiptir ve görsel olarak özdeş görünürler.
ImageMagick'i alıyoruz:
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:56.16
Maximum resident set size (kbytes): 2676856
ve ffmpeg için:
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:04.41
Maximum resident set size (kbytes): 97172
Bunu gördüğümüzden:
Test donanımı: Lenovo ThinkPad P51 dizüstü bilgisayar , Intel Core i7-7820HQ, 32 GB (16 + 16) DDR4 2400 MHz SODIMM, 512 GB SSD PCIe TLC OPAL2.
-r
ve -v
komutlar kullandım , yine de çıktı gif orijinal png dosyalarından çok daha düşük kalitede. Png dosyaları ile aynı gif kalitesi nasıl korunur?
-framerate 60 -r 60
. Üretilen GIF ve giriş görüntülerini ImageMagick araçlarıyla inceleyin identify
ve neler olup bittiğini anlamaya çalışın.
İmagemagick paketinde bulunan convert adlı bir programı kullanabilirsiniz. Komut satırı tahrikli, ancak kullanımı çok kolay. Yazılım merkezinden yükleyin veya bir komut istemine gidin ve
sudo apt-get install imagemagick
Şimdi .gif dosyasını oluşturun.
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
* Yukarıdaki örneğin doğrudan Image Magick Örneklerinden olduğuna dikkat edin.
convert -delay 20 -loop 0 *.png out.gif
bir döngüsel GIF yapar.