Video to GIF
Cut a few seconds out of a video and encode them as a looping animated GIF.
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
- 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.
- 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.
- 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.
- 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.
- 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?
Why is my GIF so large?
What is the largest clip to GIF job this handles?
My file will not open. What now?
Does the GIF keep the sound?
Will the animation play at exactly the frame rate I choose?
Does the quality match the original video?
Related tools
- Compress Video — Reduce video file size with a quality target.
- Video to MP3 — Extract the audio track from a video.
- Convert Video — Convert between MP4, WebM, MOV and MKV.
- Trim Video — Cut a clip to a start and end point.
- Merge Videos — Join several clips into one file.
- Mute Video — Remove the audio track from a video.