How to Turn a Video Into a GIF in 2026: Tools and Settings That Work
Most GIFs worth sharing start life as video. A three-second clip from a match, a product demo, a screen recording: trim it, resize it, and you have a loop that plays everywhere without a player. The tooling in 2026 splits cleanly into three tiers, and picking the right one before you start saves an hour of fighting export settings later.
This walkthrough uses a concrete example throughout: a 12-second 1080p clip of a coffee pour that needs to become a 480-pixel-wide, 3-second looping GIF under 2 MB for a newsletter embed.

Three tiers of tools, one decision
Browser converters like Ezgif handle one-off jobs with zero install. Desktop apps such as ScreenToGif on Windows or Gifski on macOS and Linux give frame-level control and far better palettes. FFmpeg sits underneath most of them and wins whenever you need repeatability, batch jobs, or a pipeline.
When the browser is enough
Ezgif's video-to-GIF tool accepts uploads up to about 100 MB, lets you cut start and end points on a timeline, and shows output size before you commit. For a single clip under a minute it is the fastest path. The catch: uploads of anything sensitive go to someone else's server, and fine palette control is limited to a few dithering presets.
When you need a real editor
ScreenToGif records a region, a window, or a webcam feed, then opens a frame editor where you can delete stutters, adjust per-frame delays, and add captions. Gifski takes the opposite approach: you feed it a video file or a PNG sequence and it builds the best possible palette automatically, usually producing visibly cleaner gradients than any preset-based tool.
The FFmpeg recipe that just works
The classic mistake is converting video to GIF in one pass. Single-pass encoding uses the global 256-color default palette and everything turns grainy. The correct approach is two passes: first generate a custom palette from the actual frames, then apply it.
- Pass 1: ffmpeg -i pour.mp4 -vf "fps=15,scale=480:-1:flags=lanczos,palettegen" palette.png
- Pass 2: ffmpeg -i pour.mp4 -i palette.png -lavfi "fps=15,scale=480:-1:flags=lanczos[x];[x][1:v]paletteuse" pour.gif
- Trim first with -ss 00:00:04 -t 3 instead of converting 12 seconds and cutting later
- Keep fps at 12–15 for web use; 25 fps doubles the size with no visible gain at small widths
- Never upscale: a 480 px GIF stretched to 900 px by CSS still costs the full download
| Tool | Platform | Best for | Palette quality | Price |
|---|---|---|---|---|
| Ezgif | browser | one-off quick conversions | basic presets | free |
| ScreenToGif | Windows | screen recordings, tutorials | good, manual control | free, open source |
| Gifski | macOS, Linux, Win | clean gradients, quality work | excellent, automatic | free, open source |
| FFmpeg | all | pipelines and batch jobs | excellent with two-pass | free, open source |
| Photoshop | macOS, Win | frame-by-frame retouching | good, manual | subscription |
Settings that decide the final size
Three knobs do almost all the work: duration, width, and frame rate. Our coffee clip at 3 seconds, 480 px wide, 15 fps lands near 1.8 MB with a two-pass palette. Drop to 12 fps and it falls under 1.4 MB. Halve the width to 240 px and you are below 500 KB. Dithering strength matters less than people expect; the Floyd-Steinberg default in FFmpeg is fine for everything except smooth sky gradients, where Gifski's temporal dithering earns its keep.
A quick sanity check before publishing
Open the result in two browsers and one phone. Confirm the loop point is not jarring, the first frame looks acceptable as a static poster, and the file plays inline in your target platform. Some email clients and forums still proxy images through compressors that mangle GIFs above 1 MB, so when in doubt, go smaller. The optimization article on this site covers the rescue workflow when your export comes out overweight.

