Converter · No upload

Turn a video clip into a GIF on your device

Choose an MP4, MOV or WebM video, pick the seconds you want and download a GIF.

Statusidle Files— File— Source size— Duration— Requested sampling10 fps GIF width480 px Frames— Output size— Network since file read—

A GIF sampled from the seconds you pick: up to 256 colours and never wider than the source; sound is dropped, frames use browser seek positions and HDR is reduced to 8-bit. Runs stop at 300 frames; ends past the video are clamped, with a row note. The encoder (about 31 KB) loads once before your file is read. Takes .mp4, .m4v, .mov, .webm, .mkv, .avi, .ogv and .3gp.

How this converter works

When you choose a video, the browser's File API gives this page its bytes, and the browser's own media engine decodes it. The page asks for frames at even time intervals set by the rate you chose and draws each one onto a canvas at the width you chose, capped at the source width. gif.js (MIT), built around the NeuQuant colour quantizer, encodes those frames into a GIF in a background worker in this tab, and the result is offered as a download. The encoder is served from this site, and there is no video decoder to download. The page reads only the local files you pick; it has no URL box. The methodology page records the encoder's licence and provenance and explains the network and offline checks.

GIF is an image format from 1987: each frame is reduced to at most 256 colours, a lossy step, and then compressed with LZW. This tool stores every sampled frame as a full image, while video codecs can encode the changes between frames. Reducing the palette can leave visible bands in gradients; dithering can soften them, adds grain and can change the file size. GIF suits a two-second reaction, a UI bug capture or a short demo where video is awkward, though how it plays depends on the app that receives it.

Your browser has to support the codec inside the file as well as its container, so an MP4, MOV, WebM, MKV or AVI file can succeed or fail depending on what it holds. Files without a readable video track get a named error row. Each frame is taken where the browser lands after a seek, so extraction is not accurate to the millisecond, and captured timestamps are not measured. The rate and range in the controls and the result row are the requested sampling, and any cap or clamp is shown on the row. GIF frame delays are rounded to hundredths of a second: the 15 fps setting encodes a 70 ms delay per frame. Frame counts are rounded up, so a range that does not hold a whole number of sampling intervals can produce an extra frame. Total encoded delays need not match the requested source duration, and playback also depends on the viewer. HDR input is reduced to 8-bit pixels before the palette is reduced. The cap is 300 frames, a 30-second range at the default 10 fps; use clip start and end to pick the section you need. Sampling and encoding long or wide clips takes time and memory on your device, and progress is reported frame by frame.

Frequently asked questions

Is my video uploaded anywhere?
No. The browser reads the video and decodes its frames, and the GIF is encoded in this tab. The meter counts resource-timing entries from the first file read, after the encoder code has loaded, so that download is not in its count; it also does not see every network channel. To test offline use, complete one conversion online first. A conversion with the network off then shows that converting runs on your device; it does not show what an online page might send.
Why is my GIF bigger than the video I made it from?
Because a GIF keeps each sampled frame whole, with at most 256 colors, and a modern video codec can predict a frame from the ones around it. A ten-second GIF can therefore be larger than its source video. A shorter clip, a smaller width and a lower frame rate all reduce what gets encoded, but the final size depends on the content.
How do I keep the file size reasonable?
Start with the shortest clip that shows what you need. Then pick a width: 320 px for a small preview or 480 px for more detail, checked against the size it will be shown at. Then the sampling rate: 10 fps can be enough for some clips, 5 fps uses about half as many sampled frames, and fast motion may need more. Dithering can reduce visible banding but can increase file size. Each result row shows the input and output sizes, so you can compare settings.
Which video files does this work with?
MP4, MOV, WebM, MKV and AVI files whose video codec your browser can decode. Support depends on the codec inside the file and on the browser or operating system, so the same extension can work in one browser and fail in another. A file the browser cannot read gets an error row naming it.
Why did my file produce an error?
The common causes are a video codec this browser cannot decode, DRM protection, a damaged file, or a clip range that does not fit, such as a start past the end of the video or a start at or after the chosen end. Each error row names the file and the reason; a browser decoding error does not always tell these causes apart. The rest of the batch still converts. A different browser may decode a codec this one cannot.

Related tools