Gif
Overview
GIF is limited to a palette of 256 colors. Choosing a good palette is key for creating high quality GIFs.
Simple
By default, ffmpeg uses a generic palette that tries to cover the whole color space in order to support the largest variety of content.
Using the default is the fastest way to create a GIF. Some recommended adjusts:
fps: Frames per second, lower this to reduce GIF sizecrop: Crop part of the videoscale: Use the default scalerbicubicorlanczos.
ffmpeg \
-ss 00:10:29.100 -t 1.1 -i input.mp4 \
-vf 'fps=20,scale=500:-1:flags=lanczos' \
output.gifGood Quality
The creation of the GIF is separated in 2 steps: Pallete Generation (palettegen) and GIF Generation (paletteuse).
ffmpeg \
-ss 00:10:29.100 -t 1.1 -i input.mp4 \
-vf \
'fps=20,scale=500:-1:flags=lanczos,split[v1][v2];
[v1]palettegen=stats_mode=diff[palette];
[v2][palette]paletteuse=dither=floyd_steinberg' \
output.gifSteps are explained bellow.
Pallete Generation
There is one parameter that worth adjusting depending on the GIF to be generated, it is stats_mode.
stats_mode=fullstats_mode=diff
full: The default value. All pixels will be part of the color statistics. It favors static content at the cost of worst animations.
diff: Only the pixel that differs from previous frame will be accounted. It favors moving content at the cost of worst static content.
ffmpeg \
-ss 00:10:29.100 -t 1.1 -i input.mp4 \
-vf 'fps=20,scale=500:-1:flags=lanczos,palettegen=stats_mode=diff' \
/tmp/palette.pngGIF Generation
To get the best out of the palette, dithering is used. The only predictable dithering available is bayer, all the others are error diffusion based.
These options are recommended, in order:
dither=floyd_steinbergdither=sierra2_4adither=bayer:bayer_scale=3
Remember to keep the other options (fps scale) the same as when you generated the palette.
ffmpeg \
-ss 00:10:29.100 -t 1.1 -i input.mp4 \
-i /tmp/palette.png \
-vf \
'fps=20,scale=500:-1:flags=lanczos[0v];
[0v][1:v]paletteuse=dither=floyd_steinberg'
output.gif