HOWTO: Create an animated gif from a video with command line tools
Sometimes I see a few seconds of a video I’m watching and I think that it’d make a great animated gif. But because I don’t always have access to a bunch of graphics software, and because I might be using my Ubuntu or OS X box, it’s nice to have a process that works with widely- and freely-available free software command line tools. So I’ve worked out a process that uses the command line and requires only the programs mplayer, imagemagick, and gifsicle. Here’s how it goes:
-
Make sure you have the programs installed. On Ubuntu (or most anything Debian-based with large enough repositories — these are common programs) it should just be a matter of
sudo apt-get install mplayer imagemagick gifsicleOn Mac OS X, first install the Homebrew package manager, and then install these programs with
brew install mplayer imagemagick gifsicle -
Isolate the segment of video you want to clip out. You’re just looking for a timestamp, so you can do this in any video player. Once you’ve got a rough clip selected, use
mplayerto export that to image files. You can use the following line to do that (there are some example values in there that I’ll explain afterward):mplayer -ao null -ss 0:02:06 -endpos 5 -vo gif89a:outdir=gif videofile.mp4Here’s what each flag means.
-aomeans audio output. It’s set to null, because there’s no sound.-ssis the start position. What follows is the H:MM:SS timestamp of the beginning of the clip you want.-endposis the end position of the clip, in seconds. So here I’ve taken out a 5 second clip.-
-vois the video output. The next bit says to output gifs (that’sgif89ainto the directory called “gif”. You can put them into whatever directory you want of course.For some reason the I don’t have the gif89a video output driver installed on my OS X computer, so I instead use
pngorjpegin the place ofgif89aup there. Your mileage may vary.
-
You now should have a directory full of stills. In case you used any other format to output them, I use one line of imagemagick’s
mogrifyto convert them:mogrify -format gif *.png - Then go through and remove the images at the start and the end that you don’t want in the final gif. Sometimes I cheat on the command line here, and just look at all the pictures with Preview or Image Viewer and delete the ones I don’t need.
-
Finally, use
gifsicleto wrap it all up into an animated gif. I usually start with the linegifsicle --colors=256 --delay=4 --loopcount=0 --dither -O3 *.gif > animation.gifand then tweak the parameters from there. Different source material calls for different settings, and I try to keep the final output as small as possible.
If you make a lot of gifs and like to mess with a lot of values, it might make sense for you to do it graphically. But this flow works pretty well for me.