How to make an animated gif loop twice in imagemagick? - imagemagick

I need to make an animated gif that plays all of its frames twice before stopping. It might seem like a simple thing to do, but for some reason when I set the -loop flag to 2, it plays three times, whereas when I set it to 1, it plays only once. so:
#this will play once then stop
convert -size 300x600 -delay 50 frame1.png -delay 50 frame2.png -loop 1 animation.gif;
#this will play three times then stop
convert -size 300x600 -delay 50 frame1.png -delay 50 frame2.png -loop 2 animation.gif;
How to make it play twice?

I would say that this is a bug in ImageMagick. As a workaround, I can only suggest you list your frames twice and set -loop to 1, like this:
convert -size 300x600 -delay 50 frame1.png frame2.png frame1.png frame2.png -loop 1 animation.gif

Related

ImageMagick Linux mimick ezgif.com result

Ezgif.com is a great page but can ImageMagick get the same results?
Ezgif settings:
Delay: 200 per image
Crossfade frames
Fader delay: 6
Frame Count: 10
My attempt via Linux Terminal:
convert -delay 200 -loop 0 *.jpg myimage.gif
As i told you on FL, you need to simply use
convert -resize (Smallest size) -delay 200 -morph 200 (source) (destination)
e.g:
convert -resize 200x200 -delay 200 -morph 200 /var/home/user1/pictures/*.jpg /var/home/user1/myresult.gif
on my side i can show you the result like this used on WINDOWS
in Windows Pictures folder
used this command:
C:\Users\Public\Pictures\Sample Pictures>convert -resize 20% -delay 20 -loop 0 *.jpg -morph 5 myimage.gif
Here is Unix shell script to create a faded animation of 4 images each with 10 intermediate fades. It loops over each successive pair of images and creates the faded intermediate images by blending the pair at different percentages.
Input:
(
imgArr=(lena.jpg mandril3.jpg zelda1.jpg peppers.jpg)
for ((i=0; i<4; i++)); do
img1=${imgArr[$i]}
j=$((i+1))
jj=$((j%4))
img2=${imgArr[$jj]}
for ((k=0; k<11; k++)); do
pct=$((10*k))
convert $img1 $img2 -define compose:args=$pct -compose blend -composite miff:-
done
done
) | convert -delay 20 - -loop 0 anim.gif
Animation:
Note that I had to shrink the image to 75% dimensions to make the file size small enough for upload here.
A complete one-liner solution with increased delay for main frames and last-to-first transition, with the same settings OP asked:
convert -loop 0 *.jpg -morph 10 -set delay '%[fx:(t%11!=0)?6:200]' -duplicate 1,-2-1 out.gif
-morph 10 inserts 10 intermediate frames between every original frame, so we need to increase the delay time for every 11th frame, so the fx part sets different delay time for them.
-duplicate 1,-2-1 does the transition for last to first frame

Animated gif created with ImageMagick has glitchy block color background

I am trying to stitch together a bunch of .png's which contain some alpha (transparency) but which have a uniformly white background. The png's look fine individually, but in the resulting .gif some frames acquire a patchy background that appears to have the same RGBA color as some of the points being animated.
I have tried the following commands
convert -delay 1 im*.png anim.gif
convert -delay 1 -alpha set im*.png anim.gif
convert -delay 1 -alpha set -dispose background im*.png anim.gif
convert -delay 1 -alpha set -dispose previous im*.png anim.gif
convert -delay 1 -alpha set -dispose previous -background white im*.png anim.gif
pretty much just trying additional flags to see if anything happens to fix the glitch, but I get the same behavior in every case. Anyone have a fix?
Ah, this question led me to the right answer --
convert -delay 1 -layers Optimize im*.png anim.gif
works!

Image Magick - Creating animated gif less weight than Photoshop

I could create a less weight animated gif with same variables(colors, dither, etc) using the following function:
convert -delay 4 -loop 0 *.png -coalesce -matte -alpha remove -depth 8 -layers optimizeFrame -colors 128 animated.gif
But there is a Photoshop function called "Includes transparency based on color opacity" that loose a lot of weight, and I can't find an Image Magick equivalent function.
Thanks!
Found it, I have to del -coalesce
convert -delay 4 -loop 0 *.png -matte -alpha remove -depth 8 -layers optimizeFrame -colors 128 animated.gif

How to avoid Imagemagick's convert overlay of frames in a gif

I have a bunch of files labelled 1.png and so on. I'm using the following command line to produce a gif animation:
convert -delay 20 *.png animation.gif
But the frames get superposed sequentially. I did not expect this behavior, what might be wrong?
Thanks
Option -dispose previous:
convert -dispose previous -delay 20 *.png animation.gif

how to make a high quality animated image with imagemagick

I want to make an animated gif from those .png image:
I do it with this command:
convert -layers OptimizePlus -delay 25x100 ps1-*.png -loop 0 ps1.gif
It made an animated gif successfully, however, the output has very low quality and smaller than input images:
After some search, I got -quality
convert -layers OptimizePlus -delay 25x100 -quality 99 ps1-*.png -loop 0 ps1.gif
But it seems like imagemagick just ignore the parameter.
The problem is that your source PNGs have an alpha channel which is not supported by GIFs. So you have to remove transparency from your source images first. Since you're dealing with multiple source images, you can't use the -flatten method. With newer ImageMagick versions the following should work:
convert -background white -alpha remove -layers OptimizePlus -delay 25x100 ps1-*.png -loop 0 ps1.gif
If your version of ImageMagick is older than 6.7.5, you can try:
convert -bordercolor white -border 0 -layers OptimizePlus -delay 25x100 ps1-*.png -loop 0 ps1.gif
I got the following result with the latter command:

Resources