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
my parameters:
-framerate 10 -i _frame%d.png -i palette.png -lavfi paletteuse=alpha_threshold=128 -gifflags -offsetting result.gif