Video to GIF

Cut a few seconds out of a video and encode them as a looping animated GIF.

Runs on your deviceVideoWorkingNo account needed

What this tool does

Video to GIF works the way a person would if they had to do it by hand. The clip is opened in an off-screen video element, the tool seeks to one timestamp per output frame, paints each of those frames onto a canvas at the width you asked for, and hands the sequence to gif.js, which runs the palette reduction and encoding in Web Workers. Every one of those stages happens inside this browser tab, so the video is never uploaded and nothing about it reaches a server.

Most of the settings exist because GIF is an old format with hard edges. Each frame is limited to 256 colours, and there is no motion compression worth the name, so file size climbs with the frame count and with the square of the width. That is why the length control stops at 30 seconds, why the width defaults to 480 px, and why the frame rate defaults to 12 rather than the source rate. Dither, on by default, uses Floyd–Steinberg to spread the palette error across neighbouring pixels: gradients and skin tones band far less, and the file grows a little because the noise it adds is harder to compress.

There are limits worth knowing before you start. Frames are captured by seeking, not by decoding every frame in order, so the output is a resampling of the original rather than a copy of its timeline — motion that does not divide evenly into your chosen frame rate will judder slightly. The format stores each frame's delay in hundredths of a second, so 12 fps is written as an 80 ms delay and plays fractionally fast. A GIF has no audio track, so sound is discarded with no way to keep it. And the width control only ever scales down: ask for 480 px from a 320 px source and you get 320 px back, because enlarging would add nothing but bytes.

The tool also refuses jobs rather than producing something absurd. Any combination of length and frame rate that would exceed 600 frames is rejected with the count it would have produced — 30 seconds at 12 fps is 361 frames and runs fine, while 30 seconds at 30 fps would be 901 and is turned away. A start point past the end of the video is refused too, and a length longer than what remains after the start point is trimmed to fit instead of failing.

How to use it

  1. Choose the clip. One video per job. It has to be something this browser can decode: MP4 with H.264 and WebM open everywhere, MOV only when it holds H.264 or HEVC, and MKV only with VP8, VP9 or AV1. The picker will still let you select an AVI, WMV, FLV, MPG, MPEG, TS or RM — the refusal arrives a moment later, when the decoder cannot open the container, and the message names Convert Video, which does that job on the server.
  2. Set the start point and the length. Start accepts plain seconds (12.5), mm:ss (1:23) or hh:mm:ss. Length runs from 0.2 to 30 seconds and is clamped to whatever is left after the start point.
  3. Pick the frame rate and the width. 2 to 30 frames per second, and 80 to 1280 px wide. When the width actually scales, height follows the aspect ratio and is nudged up to an even number, so a 320×180 source asked down to 200 px comes back 200×114. Both controls govern size, but not in the same proportion: halving the frame rate halves the frame count, while halving the width cuts the pixel area to a quarter.
  4. Decide on dithering and looping. Leave Dither on unless the clip is flat graphics or text, where the added noise costs bytes for no visible gain. Loop forever is the default; turn it off and the animation plays once and stops on the last frame.
  5. Run it and check the summary. The result reports the frame count, the clip length and frame rate, the final pixel dimensions and the file size, so you can tell immediately whether it is small enough for wherever it is going.

Processing & privacy

Runs on your device. Your file is processed directly in this browser.

Common use cases

Filing a bug report

An animated GIF plays inline in GitHub, GitLab and most issue trackers, where an attached MP4 becomes a link somebody has to open. Three seconds at 10 fps and 480 px is usually enough to show the broken interaction.

Illustrating a README or a changelog

A short loop of the feature working sits in documentation without a player, a poster frame or a hosting decision, and keeps working when the page is read offline.

Posting to somewhere that wants a GIF

Some forums, wikis and chat rooms accept GIF and nothing else. Trimming the moment that matters and dropping the frame rate gets the file under the upload ceiling.

Making a silent loop for a slide

Presentation software plays a looping GIF without the timing and audio complications of an embedded video, which suits a five-second demo in a design review.

Questions

Is my video uploaded anywhere?
No. The clip is decoded, sampled and encoded inside this browser tab, so the file is not transmitted or stored. Watch the network panel while a job runs and the only requests you will see are for our own encoder worker script, one per worker — nothing carries the video. There is no offline cache, though, so the first visit still needs the network to fetch the page and that encoder.
Why is my GIF so large?
GIF compresses each frame on its own with a scheme designed in 1987, so the size is roughly the frame count multiplied by the pixel area. Cutting the width from 960 to 480 removes about three quarters of the data, and dropping from 24 to 12 fps removes half of what is left. Turning Dither off saves a little more. GIF Compressor and GIF Resizer can shrink a finished file further.
What is the largest clip to GIF job this handles?
Length caps at 30 seconds, and the frame plan refuses anything over 600 frames — so length multiplied by frame rate has to stay under that. 30 seconds at 15 fps is fine; 20 seconds at 30 fps is not, and the error names the number it would have produced.
My file will not open. What now?
The browser is doing the decoding, so it only handles what it can already play. ProRes MOV files, H.264 inside MKV, and the older AVI, WMV, FLV and MPEG containers all fail here. Run the file through Convert Video first to get an MP4 or WebM, then come back.
Does the GIF keep the sound?
No, and nothing can change that — the GIF format has no audio track at all. If you need the audio separately, Video to MP3 extracts it from the same source file.
Will the animation play at exactly the frame rate I choose?
Near it, never on it. GIF records each frame's delay in hundredths of a second, so 12 fps becomes an 80 ms delay and runs at about 12.5. Viewers vary too, and some email clients — Outlook on Windows among them — display only the first frame.
Does the quality match the original video?
No, and the palette is the reason. Every frame is reduced to 256 colours, so film grain, gradients and video noise all suffer, and dithering trades that banding for a grainier, larger file. GIF is the right choice when the destination demands it, not when quality is the priority.

Related tools