2015-06-18 18 views
5

Aynı uzunlukta 2 GIF var.ImageMagick - Yan yana 2 GIF oluşturma IM dönüştürmeyi kullanarak GIF'ler

GIF'leri, her ikisi de aynı anda çaldığında 1 GIF almak için yan yana koymak istiyorum.

convert +append 1.gif1 2.gif output.gif 

Ancak bu arada tüm görüntüleri karışmış gibi görünen ve son derece küçük olması boyutunu değiştirir: Birlikte convert aracı kullanmak için çalıştık.

Her bir resmi bir arada ekleyebileceğimi ve daha sonra birleştirilen resimlerden bir GIF oluşturabileceğimi düşünüyordum. Denedim Ancak işe yaramadı:

convert -delay 15 -loop 0 1*.png 2*.png +append output.gif 

Uzun adlarla görüntülerin çok şey var ve ben tek tek geçmesi ve yeni adlandırma kurallarıyla her rakam eklemek zorunda kalmak istemiyoruz. Bununla, içeride kare bakalım

enter image description here

:

cevap

14

Ben aynı uzunlukta 2 hareketli GIF yok, bu yüzden sadece bu iki kopyasını kullanacağız

identify 1.gif 
1.gif[0] GIF 500x339 500x339+0+0 8-bit sRGB 32c 508KB 0.000u 0:00.000 
1.gif[1] GIF 449x339 500x339+51+0 8-bit sRGB 32c 508KB 0.000u 0:00.000 
1.gif[2] GIF 449x339 500x339+51+0 8-bit sRGB 32c 508KB 0.000u 0:00.000 
1.gif[3] GIF 449x339 500x339+51+0 8-bit sRGB 32c 508KB 0.000u 0:00.000 
1.gif[4] GIF 448x339 500x339+52+0 8-bit sRGB 32c 508KB 0.000u 0:00.000 
1.gif[5] GIF 449x339 500x339+51+0 8-bit sRGB 32c 508KB 0.000u 0:00.000 
1.gif[6] GIF 448x339 500x339+52+0 8-bit sRGB 32c 508KB 0.000u 0:00.000 
1.gif[7] GIF 448x339 500x339+52+0 8-bit sRGB 32c 508KB 0.000u 0:00.000 
1.gif[8] GIF 448x339 500x339+52+0 8-bit sRGB 32c 508KB 0.000u 0:00.000 
1.gif[9] GIF 448x339 500x339+52+0 8-bit sRGB 32c 508KB 0.000u 0:00.000 
1.gif[10] GIF 448x339 500x339+52+0 8-bit sRGB 32c 508KB 0.000u 0:00.000 
1.gif[11] GIF 500x339 500x339+0+0 8-bit sRGB 32c 508KB 0.000u 0:00.000 
1.gif[12] GIF 500x339 500x339+0+0 8-bit sRGB 32c 508KB 0.000u 0:00.000 
1.gif[13] GIF 500x339 500x339+0+0 8-bit sRGB 32c 508KB 0.000u 0:00.000 
1.gif[14] GIF 500x339 500x339+0+0 8-bit sRGB 32c 508KB 0.000u 0:00.000 
1.gif[15] GIF 448x339 500x339+52+0 8-bit sRGB 32c 508KB 0.000u 0:00.000 
1.gif[16] GIF 500x339 500x339+0+0 8-bit sRGB 32c 508KB 0.000u 0:00.000 
1.gif[17] GIF 500x339 500x339+0+0 8-bit sRGB 32c 508KB 0.000u 0:00.000 

AAAA, farklı boyutlarda 18 kare, biz tam olanları içine kısmi çerçeveleri yeniden -coalesce kullanmak gerektiği anlamına gelir. Şimdi

convert 1.gif -coalesce a-%04d.gif  # split frames of 1.gif into a-0001.gif, a-0002.gif etc 
convert 2.gif -coalesce b-%04d.gif  # split frames of 2.gif into b-0001.gif, b-0002.gif etc 

bireysel çatıların yan-yana katılmasına izin:

Now 2.gif

cp 1.gif 2.gif 

böyle, onların bileşeni çerçeveler halinde iki gif bölebilmeniz kopyalayıp yapalım :

for f in a-*.gif; do convert $f ${f/a/b} +append $f; done 

Not ${f/a/b} bir deneme-izm meanin olduğu g "f değerini alın ve" a "harfini" b "" ile değiştirin.

Ve tekrar bir araya koymak:

Ben hepsini anlatmaya çalıştım çünkü, ama gerçekten böyle görünüyor daha sert daha uzun görünüyor ve
convert -loop 0 -delay 20 a-*.gif result.gif 

:

convert 1.gif -coalesce a-%04d.gif       # separate frames of 1.gif 
convert 2.gif -coalesce b-%04d.gif       # separate frames of 2.gif 
for f in a-*.gif; do convert $f ${f/a/b} +append $f; done # append frames side-by-side 
convert -loop 0 -delay 20 a-*.gif result.gif    # rejoin frames 

enter image description here

Bu kavramsal kodun, üretim kalitesi olmadığını unutmayın. Oluşturduğu geçici dosyaları kaldırmaz ve eş çerçeve zamanını orijinal GIF'lerden ileriye taşımaz.Orijinal kare hızı elde etmek istiyorsanız bu gibi onları almak ve bir diziye onları kurtarmak ve sonunda yeniden canlandırma komutu geri gecikmeler yem olabilir: Ayrıca

identify -format "%f[%s] %T\n" 1.gif 
1.gif[0] 8 
1.gif[1] 8 
1.gif[2] 8 
1.gif[3] 8 
1.gif[4] 8 
1.gif[5] 8 
1.gif[6] 8 
1.gif[7] 8 
1.gif[8] 8 
1.gif[9] 8 
1.gif[10] 11 
1.gif[11] 11 
1.gif[12] 11 
1.gif[13] 11 
1.gif[14] 11 
1.gif[15] 11 
1.gif[16] 11 
1.gif[17] 26 

, bir ara parça isteyebilir iki animasyonlar arasında, bu biriyle for döngü içinde convert komutu değiştirerek yapabilirsiniz, hangi 10 piksel ki:

convert $f -size 10x xc:none ${f/a/b} +append $f 

enter image description here

Ben ImageMagic (sürüm 7.0.2) ve tüm kullanıyorum
+0

komutlar, "fo" dışında rf içinde - *. gif; $ f $ {f/a/b} + dönüştürmek yapmak $ f; FOR döngüsündeki belgelere göre şunu değiştirdim: '% F için (a - *. gif); % F% {f/a/b} + ekleme% f; bitti, ama hala sorun yaşıyorum. Baska öneri? Kullandığım FOR döngülerinin dokümantasyonu burada (http://www.imagemagick.org/Usage/windows/#for_loops) ve kullanıyorum ekleme komutu şu şekildedir: (http://www.imagemagick.org/ söylem-sunucu/viewtopic.php? t = 11320) – AaronJPung

+1

"$ {f/a/b}", "f' al "anlamına gelir ve" a "nın içindeki tüm" a "ifadelerini" b "ile değiştirir. bash'a (Linux'ta). Bunu yapmak için Windows-y yolunu bulmanız gerekecek. –

+0

Bunu onayladığınız için teşekkür ederiz. Evet, dahil ettiğim linklerin sözdizimi farkını farkettim. Windows'ta, $ ->% düşünüyorum. Buna devam edeceğim. – AaronJPung