gifski

Highest-quality GIF encoder

(it's smooth and colorful)
↑ This is a GIF

Another example

Highest quality

Gifski makes smooth GIF animations using advanced techniques that work around the GIF format's limitations.

Share your clips in their full quality, not a bland dithered mess.

Good compression

Gifski lets you resize animations and tweak compression levels, so you can make your GIFs fit within upload file size limits.

It's more advanced than a simple color reduction.

State of the art

Gifski uses pngquant for the best palettes with temporal dithering. It can achieve thousands of colors per frame.

It supports true lossy LZW compression and temporal smoothing and denoising.

GUI application download

Free Software library

It can also be used as a library for seamless integration into other apps (supports C#, Swift, Rust, C, C++, and other languages with a C FFI). It's open-source! You can use it in Free Software or license for use in a closed-source application or a service. You can ask me for details.

Command-line version download

Download CLI binaries for Linux, macOS, and Windows (all releases).

You can also get it with cargo install gifski if you have latest Rust installed.

Usage

The CLI version must be run from a command line (a terminal, cmd.exe).

gifski --fps 10 --width 320 -o anim.gif video.mp4

The above example converts "video.mp4" file to GIF (replace the path with your video's actual path. Most terminals allow you to drag'n'drop the file!), with max resolution of 320 pixels and 10 frames per second. If you get erros about command not found, use full absolute path to gifski(.exe).

You may need ffmpeg to convert video to PNG frames first. In your favourite command line/terminal, run:

ffmpeg -i video.mp4 frame%04d.png

This command takes a file named "video.mp4" and makes files "frame0001.png", "frame0002.png", "frame0003.png", etc. from it (%04d makes the frame number. Windows may need %%04d). You can usually drag'n'drop files into the terminal window to avoid typing the paths.

and then make the GIF from the frames:

gifski -o file.gif frame*.png

This command makes file "file.gif" from PNG files with names starting with "frame" (* stands for frame numbers). It's equivalent of gifski -o file.gif frame0001.png frame0002.png frame0003.png, etc.

See gifski -h for more options. The conversion might be a bit slow, because it takes a lot of effort to nicely massage these pixels. Also, you should suffer waiting like the poor users who will be downloading these huge files.

Large file sizes

By default Gifski maximizes quality at cost of file size, so it is expected that the GIF files will be massive. If you need smaller files:

gifski app icon

Gifski by Kornel Lesiński. Follow @kornel on Mastodon.

Other GIF stuff I wrote: ImageOptim, lossy GIF encoder and GIF to video converter (which you should really do).

Logo designed by Valera Nazarov.

The example anim is from Cosmos Laundromat (CC) Blender Foundation.