Make sure ffmpeg is up-to-date:
brew update
brew upgrade ffmpeg
Convert a MOV into frames. Tweak the 2/1
if you want more or fewer frames.
mkdir frames
ffmpeg -i screen-recording.mov -r 2/1 frames/%03d.png
Optional: crop the frames to 600x400px using 824,690 as top/left
mkdir cropped
convert ??.png -crop 600x400+824+690 cropped/
Create the pallete.gif
ffmpeg -i cropped/%02d.png -vf palettegen palette.png
Aaaand create the GIF. The 6*PTS
is added to slow down the GIF frames.
ffmpeg -v warning -i cropped/%02d.png -i palette.png -lavfi "paletteuse,setpts=6*PTS" -y out.gif
Bonus tip: if you want the last frame to have a longer duration, just copy your last frame image a bunch of times and use new frame numbers as filename.
copy 20.png 21.png
copy 20.png 22.png
copy 20.png 23.png
copy 20.png 24.png
Sources: http://blog.pkh.me/p/21-high-quality-gif-with-ffmpeg.html
@samdivaio I think what kkevlar means is that GIFs don't support true, alpha transparency; which is true. They have two methods built-in for handling transparency—do-not-replace, which means that they maintain the same color as the previous frame; and draw-background, which means they draw what's provided as a background color. More modern formats like PNGs do support a full alpha channel, and can be said to support true transparency; but GIFs use something of a hack.
Apologies if this counts as a necro, but I feel this data could be pertinent.