PNG dosyalarından GIF animasyonu oluşturma


83

gifBir dizi pngdosyadan animasyon oluşturmak için bir araç var mı ?

convertKomutu ImageMagick paketinden denedim , fakat bu her zaman başarılı olmuyor. Ayrıca, bununla ilgili birkaç sorunum var:

  1. Gelişimin ne olduğunu söyleyemem.
  2. Ne denersem deneyeyim, -delaybayrak gif animasyonunun kare hızını değiştirmez.
  3. convertDosya adlarının alfabetik sırasına göre çerçeve sırasını belirler. Bu , 0'ları ekleyerek düzeltebileceğimden name500.pnghemen sonra name50.pngdeğil sonra yerleştirileceği anlamına geliyor name450.pngancak bu can sıkıcı bir durum.

[Haberler] Ubuntu Stackexchange ve Unix Stackexchange arasında büyük bir örtüşme var. Burada bazı konuları kategorize etmeye çalıştım .
hhh

3. maddeyle ilgili olarak convert, dosyaları sıraladıktan sonra hala kullanabilirsiniz . Muhtemelen, böyle bir şey çalışırfiles=$(ls name*png | sort -n -tname -k1); convert $files animation.gif
26'da

Nokta 1 için: convert -monitorişlemi izleyen bir parametreye sahiptir
Curlew

Yanıtlar:


50

Daha yeni ffmpeg sürümlerinde -sameq yok ( bkz: sss ) ama GIF desteği var.

ffmpeg -i %03d.png output.gif

Burada% 03d, 3 basamaktaki kare kimliğidir.

Ayrıca ffmpeg, bir görüntü dizisinden bir film oluşturmak ve ardından filmi bir GIF animasyonuna dönüştürmek için kullanmayı deneyebilirsiniz (tekrar kullanarak ffmpeg).

# cf. http://pages.uoregon.edu/noeckel/MakeMovie.html

# first convert an image sequence to a movie
ffmpeg -sameq -i %03d.jpg output.mp4

# ... and then convert the movie to a GIF animation
ffmpeg -i output.mp4 -pix_fmt rgb24 -s qcif -loop_output 0 output.gif

10
Bu talimat güncel değil.
highmaintenance

3
Bu sameqseçenek artık mevcut değil. Ayrıca, benim için bu, orijinal görüntü dosyalarının üzerine yazar ve geçerli bir film dosyası oluşturmaz.
Lode

-sameqKodu orada bırakmanın amacı nedir? Neden output.mp4geçici olarak kayıp bir video formatını ( ) kullanmak isteyesiniz ? Ve eğer öyleyse, neden çok yüksek bit hızı yerine girdiyle "aynı kalitede"? Bundan eser üretmek, GIF kodlayıcı için işleri daha da kötüleştirecek. Bir videoyu geçici olarak kullanmanız gerekiyorsa, huffyuv gibi kayıpsız bir şey kullanmak istersiniz. Veya kod çevrimi olmayan bir MJPEG, giriş jpeglerini bir MJPEG'e dönüştürün. ( -codec:video copy).
Peter Cordes

80

convertBunu yapmak için kullanışlı bir komut satırı aracıdır. png -files dosyasını cdiçeren klasöre gidin ve şu komutu çalıştırın:

convert -delay 10 -loop 0 *.png animation.gif

Kaynak: http://ubuntuforums.org/showthread.php?t=1132058


5
Soru, convertbunu kullanırken bazı problemlerden bahseder . Cevabınız hiçbirini ele almıyor.
Mat

3
ImageMagick sürümünden itibaren 6.8.7-4 2013-11-02 Q16bu benim için çalıştı.
Rudy Matela

7
Bu işe 10yarar , ancak 10 * 10ms anlamına gelir, çok hızlı. Bir gecikme 1001 saniyedir.
Anne van Rossum

7
seçeneğini kullanın -dispose previousveya -dispose 2şeffaf PNG'lerle çalışıyorsanız
Hải Phong

4
kendime not: ayraç genişletme , görüntülerin listesini argüman olarak belirlemek için yararlı olabilir, örneğin , sonuna kadar pic_{0..20..2}.pnggenişlerpic_0.pngpic_2.pngpic_20.png
Yibo Yang,

19

convert'Nin --delayseçeneği sadece komut satırında sonraki resme uygulanır. Bu nedenle convert -delay 10 *, sadece ilk karenin gecikmesini 0,1 saniyeye ayarlayacaktır. Seçeneğin tekrarlanması gerekiyor:

convert $(for a in *; do printf -- "-delay 10 %s " $a; done; ) result.gif

Sıralama gereksiniminiz için, dönüştürme, kareleri sıralamaz, kabuk küresi *yapar. Çerçevelerinizin 0 ile 700 arasında numaralandırıldığını biliyorsanız, sadece sayıları kendiniz hesaplayabilirsiniz:

convert $(for ((a=0; a<700; a++)); do printf -- "-delay 10 name%s.png " $a; done;) result.gif

5
Bu davranışla karşılaşmıyorum convert, benim için her görüntü convert -delay 1000 -loop 0 *.png animation.gifarasında 10'luk bir gecikme ekliyor .
Lode

1
Ayrıca kullanabilirsiniz sürüm tür bir lskomuta. Yani:convert -delay 1000 $(ls -v name*png) output.gif
erik

7

Güncelleme:

Kullanım convertsonra kullanmak, png-to-gif için gifsicle animasyon için. Her Şeyi Yapacak Tek Bir Uygulama değil, elbette, komut dosyası yazılabilir.


GIMP olabilir gif'ler oluşturmak ve zamanlama / gecikme ve tekrar, vb kontrol sağlar


3
Yapışmayı biliyorum ama nasıl yazacağımı bilmiyorum. Ayrıca, animasyon oluşturmak için gösteriyi kullanmak, bir topla bir sineği öldürmek gibidir
Yotam

1
Bu kötü bir fikir; Her kare ayrı ayrı ölçüleceği için kalite korkunç olacaktır.
Clément

2

ImageMagick kaliteli bir gif animasyonu oluşturabilir. Bu videoyu kontrol edin - http://www.youtube.com/watch?v=OFusYizJ-bA


6
Unix ve Linux'a Hoşgeldiniz! Genel olarak sitedeki cevapların kendi başlarına durabilmelerini isteriz - Bağlantılar harika, ancak bu bağlantıyı keserse cevap hala yardımcı olmak için yeterli bilgiye sahip olmalıdır. Lütfen daha fazla ayrıntı eklemek için cevabınızı düzenlemeyi düşünün. Daha fazla bilgi için SSS bölümüne bakın .
slm

Yukarıdaki ne yararlı bir yorum ....
Luke,

convert -delay 200 -loop 0 *.jpg output.gif
Luke,

2

ffmeg önemli GIF seçenekleri + test verileri

Bu cevabı tamamlamak için :

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
ffmpeg \
  -framerate 60 \
  -pattern_type glob \
  -i 'tmp.*.png' \
  -r 15 \
  -vf scale=512:-1 \
  out.gif \
;

Test verileri şu şekilde üretildi: https://stackoverflow.com/questions/3191978/how-to-use-glut-opengl-to-render-to-a-file/14324292#14324292

ffmpegVurgulamak istediğim önemli seçenekler:

  • -patter_type glob: görüntüleri seçmek için uygun bir yol
  • -framerate 60ve -r 15: (giriş görüntülerde 60 FPS varsayalım ffmpeg(Aksi biliyoruz video biçimlerinde olduğu gibi görüntülerde hiçbir FPS verilerine beri olamaz), bir her 4 Resimler çok boyutunu azaltmak almak 4 == 60 / 15)
  • -vf scale=512:-1: genellikle boyutu azaltmak ve yerden tasarruf sağlamak için genişliği, ölçek yüksekliğini orantılı olarak ayarlayın

Ayrıca bakınız:

Ubuntu 18.10'da test edildi, ffmpeg 4.0.2.


-1

2. noktaya gelince

ImageMagick "display" in (ImageMagick 6.7.2-7 2017-01-12) sürümü, animasyonlu gif üretmek için convert komutunu kullanarak kare hızını dikkate almaz. Firefox gibi canlı gif görüntülemek için başka bir program deneyin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.