Creating an Animated GIF on the Command Line

March 5th, 2019

I've been going through some pictures and video lately and found some video that I wanted to turn into an animated GIF. This project uses FFmpeg to extract frames from the video and ImageMagick to resize the frames and stitch them into an animated GIF.

I didn't have FFmpeg on my computer yet, so I quickly installed that.

sudo apt-get install ffmpeg

Next, I need create a new directory for my image frames.

mkdir frames

This is the command that will create individual frames from the video. The -r option will specify the framerate. In this case I'm using 10 frames per second. Lower values will result in a choppier GIF with a smaller file size.

I'm naming the images sequentially. %03d will create sequential 3-digit numbers with leading zeroes.

ffmpeg -i pirates_caribbean.mp4 -r 10 'frames/frame-%03d.jpg'

The dimensions of the video are very large, and I want to make sure I get the filesize as small as possible. This command will use ImageMagick to resize every frame in the directory to 25% of the original size, as well as reduce the quality of the image by 50%. The video was already somewhat grainy from the low light conditions, so I'm not too upset at reducing the quality a bit further.

mogrify -resize 25% -quality 50% *.jpg

Finally, this last command uses ImageMagick to create an animated GIF with the name pirates.gif with a framerate of 10 frames per second that loops forever with the option -loop 0.

convert -delay 10 -loop 0 *.jpg pirates.gif

After these steps, I have my animated gif! I'm wondering if I could optimize it further since 26.6MB is still quite a hefty file size. Still, I'm pleased with the results, and I'm looking forward to making more GIFs with this technique.