/video-til-gif

Video to GIF Maker Online (MP4, WebM, MOV)

Make an animated GIF from a slice of a video, pick start and end with a slider, plus width and FPS. Everything runs locally in your browser.

Drop a video here, or click to choose

MP4, WebM, MOV, OGG

How it works

This tool turns a slice of your video into an animated GIF, entirely in your browser, nothing is uploaded. Drag the two handles to pick the start and end, then choose the width and frame rate. Frames are grabbed straight from the video and encoded to GIF locally.

GIFs grow large quickly, so it works best on short clips (up to 15 seconds). Lower the width or frame rate to shrink the result. Because it only reads the video and draws frames, it works in every modern browser.

About this tool

The video-to-GIF tool turns a small slice of a video into an animated GIF, one hundred per cent locally in the browser. Drag two handles to pick start and end (max 15 seconds), set width (240-640 px) and frame rate (8-24 FPS), and generate the GIF directly. Great for reaction GIFs, product demos in documentation, explainer clips on Slack and Discord, or short animations on sites that can’t play video. GIF is large but works everywhere, even in older email clients and group chats.

How to use it

  1. Drop a video file (MP4, WebM, MOV, OGG) on the drop zone.
  2. Drag the start and end markers on the timeline to pick up to 15 seconds.
  3. Choose output width and frame rate (lower = smaller file).
  4. Press "Make GIF" and download the finished animation.

Examples

Reaction GIF from a movie clip
InputMP4 3 sec, 320 px wide, 12 FPS
OutputGIF approx. 1.5 MB. Works in Slack, Discord, Teams, iMessage, WhatsApp and so on.
Slack and Discord compress large GIFs automatically. 320 px width and 12 FPS is a good balance of smoothness and size.
Product demo in README
InputScreen recording MP4 10 sec, 640 px wide, 15 FPS
OutputGIF approx. 5 MB. Drops straight into a GitHub README, Notion or Confluence.
GitHub allows GIFs up to 10 MB per file in READMEs. For larger demos, embed an MP4 video on YouTube or upload as issue attachment.

Common use cases

  • Reaction GIFs in chat, email and forums.
  • Product demos and how-to clips in README files, docs and blog posts.
  • Short animations on pages that can’t use `<video>` (newsletters, wiki platforms).
  • Bug reporting: capture the exact sequence where a UI issue happens.
  • Social media posts where video autoplay is not desired.

Frequently asked questions

Why 15 seconds max?
GIFs grow huge very fast. 15 s @ 24 FPS = 360 frames, each a full 256-color bitmap. Even with LZW compression you end up at 5-20 MB per clip. Longer clips give 50+ MB files that are impractical everywhere. For long clips, use MP4 or WebM. The frame cap is also 450 (MAX_FRAMES), so longer clips get subsampled anyway.
Why do the colors look worse than in the video?
GIF supports max 256 colors per frame, versus 16 million in video. The GIF encoder must quantize colors, causing banding in soft gradients and slight loss in skin and shadow tones. This is a fundamental format limit, not a tool issue. For photographic content with many colors, use MP4 or animated WebP instead.
Can I get higher FPS than 24?
No, 24 FPS is the upper cap in the tool. Even though GIF technically supports higher, browsers often cap around 24 FPS in playback (many limit to 20 FPS). File size scales almost linearly with FPS, so 30 FPS would give 25% larger file for minimal visible gain. For smooth motion at higher FPS, use MP4 or WebM.
Can I make a GIF with transparent background?
No, not from this tool. Video files have no alpha channel, so there is no background to make transparent. GIF supports one transparent color per frame (not true alpha), but if you had green-screen footage you’d have to key out the green in an editor first. For truly transparent animations, use animated WebP or PNG sequences in CSS.

Technical background

Process: the video element is scrubbed via `currentTime = t`. At each frame time, the video is drawn onto a `<canvas>` with `drawImage`, giving `ImageData` with RGBA pixels. Frames are sent to gif.js (a Web Worker running LZW compression with NeuQuant color quantization to 256 colors). Frame rate = FPS choice; frame delay = 1000/FPS ms. Max 450 frames (MAX_FRAMES); 15 s × 24 FPS = 360. Output is a `Blob` with MIME `image/gif` wired up via `URL.createObjectURL`. All processing happens in the browser, no server calls.