Video to GIF

Video to GIF - Online Animated GIF Maker — Turn a video clip into a looping animated GIF with the frame rate, width, and palette quality of your choice. GIF is a long-standing open format understood by virtually every device and chat platform. Everything is processed locally in your browser, with files never uploaded to a server.
Supported input: WebM, OGV (Ogg Video), MKV, AVI, GIF, WebP, APNG and other common video formats. Everything is converted locally in your browser; files are never uploaded to a server.
First use loads an ~30MB video processing engine into the current browser. It is cached and reused afterwards, so please be patient.
🎥
Click to select or drag and drop a video file
Supports WebM, OGV, MKV, AVI, GIF and other common formats; under 500MB recommended
Frame rate:higher = smoother but larger file
Max width:scaled automatically to preserve the aspect ratio
Palette colors:fewer colors = smaller file, slight quality loss
Animated GIF conversion: extracts frames at the chosen frame rate, scales to the max width, and builds an optimized color palette for the loop. The audio track (if any) is discarded.
Why are GIFs so big? Palettes, dithering and the 1987 format doing video duty

GIF (Graphics Interchange Format, 1987) was designed as a still-image format with a small animation bonus, and it shows. Two properties drive everything on this page: every frame is limited to 256 colors chosen from a stored palette, and frames are compressed with LZW — a general-purpose byte compressor from the zip era — which has no idea a video is being stored. There is no motion compensation, no "this frame is mostly the previous frame" arithmetic like real video codecs; each frame is essentially an individually compressed picture. Understanding the palette is the key to getting small, good-looking GIFs.

Five facts to anchor the rest of the page:
• each frame carries at most 256 colors (28) from a palette; true-color video must be quantized down
• dithering fakes missing colors by scattering dots of neighboring palette entries — bigger files, smoother gradients
• frame timing is stored in 10 ms units: 10 fps → delay 10 (100 ms); the practical floor is delay 2 (20 ms = 50 fps)
• frames are LZW-compressed independently — no inter-frame compression is the #1 size killer
• fewer colors, fewer frames, smaller dimensions: each knob shrinks LZW input, and the effect multiplies
The 256-color palette and banding

A true-color video pixel needs 24 bits (16.7 million possibilities); a GIF pixel is an 8-bit index into a table of at most 256 colors. Converting a video to GIF therefore runs palette quantization: pick the 256 colors that best represent the content, then snap every pixel to the nearest one. Gradients pay the price — a sky needing 4,000 slightly different blues gets 30 of them, and the smooth ramp collapses into visible stripes called banding. High-contrast flat graphics (logos, game sprites, charts) barely notice; photographs and video are hit hardest. A converter's palette quality is a large part of its output quality.

Dithering: trading noise for smoothness

Dithering is the classic fix for banding: instead of snapping each pixel to its nearest palette color, scatter a mix of the two nearest colors so the average over a small area matches the original tone. Gradients look dramatically smoother — the stripes dissolve into fine noise that the eye blends at normal viewing distance. The cost is file size: noise is high-frequency detail, and LZW compresses regular stripes far better than scattered dots. That is the fundamental GIF trade-off this page exposes: disable dithering for smaller files with banding, enable it for smooth gradients at a size premium.

Frame timing: the 20 ms floor

GIF stores the delay between frames in units of 1/100 second. 10 fps means delay 10 (100 ms per frame); 20 fps means delay 5 (50 ms). The smallest useful value is 2 (20 ms, i.e. 50 fps), and in practice most browsers clamp anything below that to 100 ms — asking for 60 fps silently produces slower playback. Beyond the floor, every fps increase multiplies the frame count: 15 fps → 50 fps for the same clip means more than three times the frames, and GIF size scales roughly linearly with frame count. A 10-second clip at 15 fps is 150 frames; at 50 fps it would be 500.

Why GIFs balloon compared to real video

Modern video codecs spend most of their bits describing change between frames — a locked-off camera means later frames cost almost nothing. GIF's LZW sees every frame as a fresh image (its only inter-frame trick is a transparency flag that skips pixels identical to the frame before, which helps far less than true motion compensation). The rule of thumb: for the same clip, expect a GIF to be many times larger than a well-encoded WebM at the same resolution. If the destination accepts real video, prefer it; GIF wins only where its universality and auto-play/loop behavior matter.

Common misconceptions
  • "GIF is compressed, so it's efficient for video." LZW is a byte-level compressor from 1987 with no motion model; for moving footage it is the least efficient widely-used format on the web.
  • "My source is 60 fps, so the GIF should be too." The 20 ms delay floor caps GIF at 50 fps, and browsers clamp sub-floor delays upward. Frame-for-frame fidelity is not something GIF can deliver.
  • "Dithering is just noise that should be turned off." It is a deliberate quality/size trade: off gives smaller files with banding, on gives smooth gradients that cost bytes.
  • "Fewer colors always looks terrible." For flat graphics and high-contrast animation, even 64 colors can look identical to 256 — and shrink the file further.

Related tools: Video to WebP/APNG for true-color animation with real compression, GIF to Video for the reverse direction (palette to true color), Video to WebM for the same clip as real video, and Video Cutter to trim the source before converting.