Video to GIF

Turn any video into a GIF. Trim the clip, pick your quality, and download. Everything happens on your device.

Drop your video here

or click to browse

MP4MOVWebMAVI
Runs in your browser. Your files are never uploaded.

How this converter works

This turns a video into an animated GIF without uploading anything. The whole pipeline is ffmpeg compiled to WebAssembly, running in the tab you have open. Pick a file, drag the handles on the timeline to the part you want, set the frame rate and width, convert.

Settings and limits

  • Max input500 MB
  • Colours256 per frame
  • Core25 MB, once
  • Threads1
Trim
Scrub the thumbnail timeline and set an in and out point. Only the selected range is encoded, so trimming first genuinely makes the job smaller.
Frame rate10, 15, 24
Lower is smaller. 10 is fine for a screen recording, 24 for anything with real motion. GIF has no meaningful 60fps, so there is nothing above 24 to pick.
Width120 to 1920 px
Height follows to keep the aspect ratio, scaled with Lanczos.
Quality preset3 levels
Small uses Bayer dithering with diff-mode palette stats, Balanced uses Sierra-2-4A, Best uses Floyd-Steinberg with full-frame stats. Best is slower and bigger.
Colours2 to 256
Drop below 256 if the source is flat. 64 colours on a UI recording is often indistinguishable and much smaller.
Ditheringon, off
Can be turned off entirely, which is usually the right call for flat colour and text.

More detail

How the encode works

The encode is two passes. The first walks the frames you selected and builds a 256-colour palette, the second maps the video onto that palette with dithering. One-pass converters pick a generic palette up front, which is why their output tends to band on gradients and skin tones. After ffmpeg finishes, the file goes through gifsicle at -O2 --lossy=40, which usually takes another 30-50% off the size with no visible difference.

Speed and memory

The ffmpeg core gets fetched from a public CDN the first time you convert in a session. After that it stays in memory and later conversions start immediately. The instance is recycled every 20 runs to keep the WebAssembly heap in check, so occasionally the 21st conversion pays that startup cost again.

It is single-threaded. A 10 second 1080p clip takes a few seconds. A 2 minute 4K clip will take a while and will pin one core. If you are converting something long, trim before you convert rather than after.

Memory is the real ceiling long before the 500 MB file cap. Chrome on a desktop handles most things; Safari and mobile browsers give the tab less headroom and a large 4K source can fail there outright. If a conversion dies partway through, reduce the output width first. It has the biggest effect on peak memory.

Why GIF looks the way it does

GIF is capped at 256 colours per frame, so photographic video will never look like the source whichever preset you pick. If wherever you are posting accepts video, WebP will look better at a fraction of the size. GIF earns its place mainly when you need something that autoplays inline everywhere, including places that strip video tags.

Questions

Does my video get uploaded?

No. ffmpeg.wasm runs in the page and reads the file through the browser's File API. The only network request the conversion makes is the initial fetch of the ffmpeg core from a CDN. You can check it yourself: open devtools, convert something, and watch the Network tab stay quiet.

Why is my GIF bigger than the video I started with?

Because GIF has no interframe compression worth the name. Every frame is stored as a palettised image with only rectangle-level diffing between frames. A 3 MB MP4 becoming a 12 MB GIF is completely normal. To fix it, drop the frame rate, then the width, then the colour count, in that order.

What is the largest video I can convert?

The file picker accepts up to 500 MB, but the practical limit is how much memory your browser gives the tab, and that is usually lower. Long 4K sources are where it falls over. Trim to the part you actually need before converting.

The result looks speckled. What do I change?

That is dithering. Switch to the Best preset if you want maximum fidelity, or turn dithering off entirely if the source is flat colour like a UI recording. Flat sources look cleaner undithered and compress considerably better.

Can I keep transparency?

No. The palette is generated with transparency disabled, so any alpha in the source is composited away. If you need transparency in an animation, WebP is the format to use.

Related tools