何年も悩んでいたけど最終的にこれに落ち着いた。
ffmpeg -i input.mp4 -r 10 -f image2pipe -vcodec ppm - \
| convert -layers Optimize - gif:- \
| gifsicle -O3 --multifile - > output.gif
https://github.com/uiureo/videotogif
ffmpeg, imagemagick, gifsicleが必要。
ffmpegだけでもgif生成できるけどノイズがひどいので、imagemagickを使って減色処理をして、できたGIFをgifsicleを使って圧縮してファイル容量を削減している。
pipeしているので中間ファイルができなくて変なことを考える必要がない。
参考