Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
Creating GIFs from .MOV files in OSX using FFmpeg and ImageMagick

Convert MOV to GIF using FFmpeg and ImageMagick

I tried a few different techniques to make a GIF via command-line and the following gives me the best control of quality and size. Once you're all setup, you'll be pumping out GIFs in no time!

Preparation

Install FFmpeg

  • $ brew install ffmpeg [all your options]
    • Example: $ brew install ffmpeg --with-fdk-aac --with-ffplay --with-freetype --with-frei0r --with-libass --with-libvo-aacenc --with-libvorbis --with-libvpx --with-opencore-amr --with-openjpeg --with-opus --with-rtmpdump --with-schroedinger --with-speex --with-theora --with-tools

Install ImageMagick

  • $ brew install imagemagick

Now convert!

Grab screenshot from Quicktime (or what you want. I like Screenflow)

  • Open Quicktime > File > New Screen Recordering > After recording 'Save'

Use ffmpeg to slice .mov into high quality .png's

  • $ ffmpeg -i screencast.mov -vf scale=320:-1 -r 10 output/ffout%3d.png
    • 'screencast.mov' location of .mov
    • 'scale=320' set scale to what you want
    • '-r 10' set framerate
    • 'output/ffout%3d.png' output pngs in output folder

Use Convert from ImageMagick

  • $ convert -delay 8 -loop 0 output/ffout*.png output/animation.gif
  • 'convert' is the command-line tool from ImageMagick
  • '-dalay' is the delay of 8, you would get a FPS=100/8=12.5
  • '-loop' adds Netscape loop extension to your GIF animation
  • 'output/ffout*.png' is the directory and file names going into the GIF
  • 'output/animation.gif' is the final location and GIF output

Resources

Great Articles

nicolasv commented Feb 20, 2017 edited

I found that for a screencast, using the above convert command resulted in the white background of the window in the screencast flickering between different shades of white.

From http://www.imagemagick.org/Usage/anim_opt/#colortables:

The command line solution is a special +map option, that does a global color reduction to a common palette that is added to all images.

This fixed it right up!

Craigson commented Mar 22, 2017 edited

This was very helpful, thank you for posting! However, I ran into a number of issues as a result of the limited colour palette for the multiple PNG versions in the conversion to GIF that resulted in a very dull output. You can achieve much richer colour results using ffmpeg directly and ignoring the ImageMagick step. See this post

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment