Free Video to GIF Converter
Convert video clips to high-quality animated GIFs with a two-pass palette method.
Drag & drop a video file here
or click to browse · MP4, WebM, MOV, AVI, MKV (max 2 GB)
What video-to-GIF conversion actually does
Converting video to GIF involves three concurrent transformations: frame extraction (the video's continuous timeline is sampled at a fixed rate, typically 10 to 24 fps), palette quantization (each frame is reduced from 16 million colors to at most 256 from a chosen palette, because GIF can only store 256 colors per frame), and LZW compression (the indexed palette frames are compressed with the same lossless algorithm GIF has used since 1987). The result is a single file containing all the frames, the palette, and timing information, playable on any device that supports GIF (which is essentially every device made in the last 30 years).
The palette step is where quality is gained or lost. A naive single-palette approach picks 256 colors that approximate the whole clip, which works for grayscale content but fails on color-rich footage (skin tones banded, gradients posterized). The two-pass palette approach this tool uses runs FFmpeg's palettegen filter first to analyze every frame and build an optimized 256-color palette, then runs paletteuse with dithering to map each pixel of every frame to the nearest palette color. The result is dramatically better quality at the same file size, especially on faces, sunsets, and high-color content.
GIF compression efficiency is poor compared to modern video. A 5-second 480p clip might be 500 KB as MP4 (H.264) but 8 to 15 MB as GIF at the same dimensions. This is fundamental to the format, not the encoder: LZW from 1987 cannot compete with H.264 or VP9. To keep GIFs small, you have three levers: lower frame rate (10 fps versus 24 fps roughly halves size), smaller dimensions (480px wide versus 800px wide is more than 2x smaller), and shorter duration (5 seconds versus 10 seconds is exactly half). All three are surfaced as controls in this tool.
How this tool works under the hood
Same ffmpeg.wasm engine as the other video tools: FFmpeg compiled to WebAssembly via Emscripten, ~30 MB browser-side binary, runs entirely in the tab via SharedArrayBuffer multi-threading. When you drop a video, the file is read into the WebAssembly virtual filesystem via a streaming reader.
The two-pass conversion runs as two distinct FFmpeg invocations. First pass: -i input.mp4 -ss 0 -t 5 -vf "fps=10,scale=480:-1:flags=lanczos,palettegen" palette.png. This trims to the chosen range, samples at the target frame rate, scales to the target width with Lanczos filtering, and generates an optimized palette. Second pass: -i input.mp4 -i palette.png -ss 0 -t 5 -filter_complex "fps=10,scale=480:-1:flags=lanczos[x];[x][1:v]paletteuse=dither=bayer:bayer_scale=5" output.gif. This applies the same trim/fps/scale and then maps each frame's pixels to the palette using Bayer dithering for smoother gradients.
The Bayer dithering pattern is a deterministic 8x8 ordered dither matrix that distributes quantization error across neighboring pixels, making banding less visible at the cost of a faint cross-hatched texture. Other dither modes (Floyd-Steinberg, Sierra) produce smoother results but at the cost of slightly larger file size. Progress messages stream from FFmpeg's stderr and update the on-screen progress bar in real time. The resulting GIF is built in memory and offered as a download via the browser's blob API.
Brief history of the GIF format
- GIF87a, 1987. CompuServe introduces GIF (Graphics Interchange Format) for transferring images over dialup modems. The format uses LZW compression, 256-color palette per image, and supports interlacing. Static images only in this initial version.
- GIF89a adds animation, 1989. The updated specification adds frame delays, transparency, and animation. A GIF can now contain multiple frames with timing information, enabling looping clips. This becomes the foundation of every animated GIF you've ever seen.
- Unisys LZW patent dispute, 1994. Unisys announces it will enforce its LZW patents, including in GIF encoders. The web community responds with the PNG format (1996) and Burn All GIFs Day (1999). The LZW patent finally expires in 2003 worldwide; GIF becomes legally free for everyone.
- GIF declared dead, then resurrected, late 2000s. Static GIF largely replaced by PNG; YouTube and Flash dominate animated content. Then Tumblr (2007), Reddit, and ImgUr (2009) make animated GIFs the de facto format for reactions, memes, and short loops. Despite being technically obsolete, GIF becomes universal again.
- GIFV and APNG try to compete, 2014 to 2020. ImgUr's GIFV (an MP4 with a .gifv extension) and the APNG format (animated PNG) attempt to replace GIF with smaller, higher-quality alternatives. Both see niche adoption but GIF remains the universal share format because of its decades of compatibility.
- Browser-side conversion matures, 2019 to 2026. Jerome Wu publishes the first ffmpeg.wasm in 2019. By 2024 the 4.x line stabilizes at ~30 MB with SharedArrayBuffer multi-threading. Browser-side video-to-GIF conversion with two-pass palette generation becomes practical, eliminating the need for cloud services.
How It Works
- Upload your video: Select an MP4, WebM, or MOV file. For large videos, you can trim to the section you want to convert.
- Set GIF options: Choose frame rate, dimensions, and optionally set the start and end time to extract a clip.
- Download the GIF: Click Convert and download the animated GIF file.
Why Use Video to GIF Converter?
Animated GIFs are the universal format for short looping clips, compatible everywhere including chat apps, social media, emails, issue trackers, and documentation. But MP4 and WebM videos won't loop or embed the same way GIFs do. Converting short video clips to GIF is the go-to technique for reaction clips, demo loops, tutorial highlights, and shareable moments. This browser-based tool handles the conversion without requiring software or cloud processing.
Features
- Clip trimmer: Set start and end time to extract just the segment you want as a GIF.
- Frame rate control: Choose frames per second (8, 12, 15, 24 fps) to balance smoothness and file size.
- Resize output: Scale down the GIF dimensions to reduce file size for web sharing.
- Loop count: Set the GIF to loop infinitely or a specific number of times.
- Browser-based: Conversion happens locally using Canvas and WebAssembly, no uploads required.
Real-world GIF conversion workflows
- Reaction GIFs and meme creation. The classic use case: capture a 2 to 4 second clip from a movie, show, or recording, convert to a 240 to 480px wide GIF at 10 to 15 fps. The resulting file is small enough to attach to chat (under 5 MB) and recognizable. Twitter, Discord, Slack, iMessage all accept GIFs directly.
- Documentation and tutorials. Software docs use looping GIFs to demonstrate UI flows, animations, or feature behavior. A 5-second screen recording of "click here, then this happens" embedded as a GIF in a README or docs page is more digestible than a static screenshot or a separate video file requiring a click to play.
- Bug reports and issue trackers. GitHub Issues, GitLab, Linear, and Jira all support GIF embedding inline. Recording a 3-second clip of a UI bug and pasting the GIF into the issue gives reviewers immediate context that a paragraph of text can't match. Smaller and more universal than attached video files.
- Social media micro-content. Tumblr, Twitter, and Reddit all auto-loop GIFs in the timeline. A 2 to 4 second loop of an interesting moment from a longer video gets more engagement than the full clip because users see it without clicking. Keeping the GIF under 8 MB ensures it auto-plays everywhere.
- Email signatures and marketing. Animated email signatures, holiday greetings, and product teasers use GIF because no other format auto-plays inside email clients. Keep file size under 1 MB for compatibility with most email providers; Gmail strips animation from larger GIFs in some views.
- Looping cinemagraphs and motion stills. A cinemagraph is a mostly-still image with one area of subtle motion. Extracting a 2-second loop from video, optionally with the still parts masked, creates an eye-catching share format. The seamless loop requires the first and last frames to align; often you trim manually to find a clean loop point.
Common pitfalls and what they mean
- File size explodes quickly. GIF is far less efficient than modern video codecs. A 10-second 720p 24fps clip might be 15 to 30 MB as a GIF but only 1 to 2 MB as MP4. Strategies: lower frame rate (10 fps reads as smoothly as 15 for most content), reduce dimensions (480px wide is a good sweet spot), trim duration tight (every extra second adds proportionally to size).
- Bad palette ruins quality. A naive single-pass GIF generation picks the first 256 colors it encounters or a generic Web Safe palette. Result: banded skin tones, posterized gradients, dirty grays. This tool uses two-pass
palettegen/paletteuseby default, which analyzes all frames before choosing the optimal palette. Vastly better quality at the same file size. - High-motion content shows artifacts. Fast camera pans or scene changes can show palette flicker (colors shifting between frames) because each frame's palette can't track sudden hue shifts well. For high-motion content, use a higher dither setting or accept that low-motion content (talking heads, simple animations) converts better than high-motion (sports, action scenes).
- GIF can't carry audio. The GIF format has no audio support. If your source video has voice or music, that audio is silently dropped during conversion. For audio-carrying clips, use MP4 (with audio) or convert to a webp/silent MP4 with a separate audio track.
- Loops don't seam automatically. A perfect seamless loop requires the last frame of the GIF to match the first frame visually. Without manual alignment, you get a visible jump at the loop point. For seamless results, trim a clip that has natural motion symmetry (a pendulum, a wave, a repeated gesture) or use desktop video tools to design a fade transition.
- Transparency is binary, not partial. GIF supports transparency, but it's all-or-nothing per pixel (1-bit). You can't have semi-transparent areas, smooth alpha edges, or fade-to-transparent effects. For transparent animated content with smooth alpha, use APNG or WebP animations; for full alpha on a single share, use a transparent PNG sequence.
Privacy: your video never leaves your device
Cloud video-to-GIF services (Giphy's upload converter, ezgif.com, Convertio, dozens more) all upload your full video, run FFmpeg on their hardware, and send back the resulting GIF. For a 200 MB phone video that's 200 MB up plus 5 to 30 MB down through their infrastructure. Video content commonly includes faces, locations, audio of conversations (which a GIF would discard but the operator still has), screen recordings of private interfaces. Most operators publish privacy policies committing to delete uploads within 1 to 24 hours and encrypt in transit, and major ones hold ISO/IEC 27001 certifications. They have strong business reasons to honor those policies. But "deleted within an hour" is not "never seen." During that window the file sits on operator infrastructure, accessible to any process or person with the right permissions, visible in logs and backups per the operator's retention policy.
This tool never uploads anything. The full pipeline (file selection, decoding via browser-native readers, palette generation and GIF encoding via ffmpeg.wasm WebAssembly, download via the browser's blob API) runs inside your browser tab. No uploads, no network requests carrying video data, no log entries. You can verify by opening browser dev tools on the Network tab before converting: no requests leave with video content. Only the initial page load and the one-time roughly 30 MB ffmpeg.wasm download (cached for subsequent visits) touch the network. Put the browser in airplane mode after page load and the converter still works on local files.
When another tool is the right pick
- For modern web use, MP4 or WebP beat GIF. On the web in 2026, MP4 files with autoplay+loop+muted attributes or animated WebP files give the same looping experience at a fraction of the file size and with better color fidelity. Twitter, Reddit, Discord, and most modern platforms accept MP4 directly. Use GIF only when you specifically need the universal GIF format (email, very old systems, certain chat clients).
- Files over 2 GB. Browser memory limits become a wall above roughly 2 GB. Use desktop FFmpeg CLI which can stream from disk and use all available system RAM.
- Cinemagraphs and advanced GIF craft. For masked motion (only part of the GIF animates while the rest stays still), use Photoshop's Animated GIF workflow, Plotagraph Pro, or Cinemagraph Pro. These give per-region masking and animation control that this tool's automated pipeline cannot.
- Batch GIF generation. A shell script with FFmpeg CLI handles many files:
for f in *.mp4; do ffmpeg -i "$f" -vf "fps=10,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" "${f%.mp4}.gif"; done. Single-shot palette generation in one filter graph; much faster than 100 manual browser runs.
Frequently Asked Questions
Why is my GIF file so large?
GIFs use an older compression algorithm (LZW) that is far less efficient than modern video codecs. A 5-second clip can easily be 5-20 MB as a GIF but only 500 KB as MP4. Reduce GIF size by lowering the frame rate, dimensions, and clip length.
What is the maximum video length I can convert?
There is no enforced limit, but GIFs from long clips become extremely large. For best results, keep GIF clips under 10 seconds. For longer animations, consider using a short looping clip from the best part of your video.
Can I convert GIF back to video?
Technically yes, a GIF is just a series of frames. But since GIFs use limited color palettes and low frame rates, the resulting video quality is typically lower than the original. Use the original video source for the best quality output.
Other frequently asked questions
What frame rate should I use?
10 to 15 fps is the sweet spot for most GIFs: smooth enough to read as motion, small enough to keep file size manageable. 24 fps gives smoother motion but roughly doubles file size compared to 12 fps. 5 fps is fine for slow content (talking heads, slow demos) and minimizes size. The human eye perceives motion at 10 fps and above; below that it looks like a slideshow.
Why does my GIF look color-banded compared to the video?
GIF stores only 256 colors per frame versus 16 million in video. Smooth gradients (skies, skin tones, sunsets) get banded into visible steps. The two-pass palette method this tool uses reduces this significantly compared to naive single-pass conversion, but cannot eliminate banding entirely. For best results, source content with strong contrast and few smooth gradients converts cleanly; smooth-gradient-heavy content stays imperfect even with optimal palette.
Should I use MP4 instead of GIF?
Often yes. MP4 with autoplay+loop+muted gives the same looping experience at 5 to 10x smaller file size with full 16-million-color fidelity. The catch: not every platform supports inline MP4 loops the way they support GIF. Twitter, Reddit, Discord, GitHub Issues, and most modern sites do; some legacy email clients, chat apps, and forums only support GIF. Pick MP4 if your target audience uses modern platforms; pick GIF for maximum compatibility.
Why is the second pass slower than the first?
The first pass (palettegen) only analyzes color statistics; it doesn't write a final output, just builds a 256-color palette. The second pass (paletteuse) actually maps every pixel of every frame to the nearest palette color, applies dithering, and encodes the GIF stream. The pixel-mapping step is what takes the most CPU time, especially with dithering enabled. For a 5-second 480p 10fps GIF, expect 5 to 30 seconds total processing time depending on your CPU.
Is there a desktop or command-line equivalent?
Yes. FFmpeg CLI is the canonical tool, using the same two-pass approach: ffmpeg -i input.mp4 -vf "fps=10,scale=480:-1:flags=lanczos,palettegen" palette.png then ffmpeg -i input.mp4 -i palette.png -filter_complex "fps=10,scale=480:-1:flags=lanczos[x];[x][1:v]paletteuse" output.gif. Gifski is a Rust-based tool that produces higher-quality GIFs than FFmpeg using per-frame palettes (larger files, better quality). Photoshop's Save for Web (Legacy) for GIF is the classic GUI workflow for graphic designers.
Does GIF support transparency?
Yes, but only binary (1-bit) transparency: each pixel is either fully opaque or fully transparent, no partial alpha. This is why GIF logos and icons with smooth edges look "jagged" against varied backgrounds. For smooth alpha-blended animation, use APNG (animated PNG) or animated WebP, both of which support 8-bit alpha per pixel. This tool's output does not preserve source transparency by default; if your video has transparent regions, they're filled with the chosen background color.