Free Video to GIF Converter
MP4, MOV, WebM, AVI, MKV and more — convert any video format to a looping GIF with full FPS and size control. Runs entirely in your browser. No upload. No account.
Drop a video here or click to browse
Accepts MP4, WebM, MOV, AVI — converts in your browser
How It Works
Drop any video file onto the converter
MP4, WebM, MOV, AVI, MKV — any common format is accepted. The file is read into browser memory and processed locally. No data is sent over the network. Files up to 50 MB are supported.
Set FPS and output width for your target
Frame rate controls smoothness and file size — 10–15 FPS suits most sharing contexts. Output width sets GIF dimensions: 320px for compact reaction GIFs, 480–640px for social media and documentation, 800px for high-fidelity product demos. Lower values mean dramatically smaller files.
Convert in your browser and download
FFmpeg WebAssembly runs a two-pass palette-optimized encode locally on your device. Progress displays in real time. Click Download when complete. The output GIF loops infinitely and auto-plays on every platform.
Share your GIF anywhere it needs to go
Drop it into Slack, Discord, GitHub, Reddit, Twitter, iMessage, Notion, Confluence, or embed it on a webpage using a standard img tag. No special attributes or JavaScript needed.
Why GifToMP4 Converts Any Video Format
Most online video to GIF tools only accept MP4. This converter is built on FFmpeg WebAssembly — the same multi-format decoding engine used in professional video editing software — which natively understands every major container and codec combination. You do not need to pre-convert your source file to MP4 first. iPhone recordings (.mov), OBS screen captures (.mkv or .webm), Android clips (.mp4), and legacy Windows files (.avi) all go directly into the same conversion pipeline.
This matters because video format diversity in practice is enormous. iPhone and iPad record in QuickTime .mov containers. OBS Studio defaults to MKV or WebM. Some Android screen recorders produce AVI. Older camcorders and surveillance cameras use AVI or even FLV. Video archives from a decade ago are frequently AVI or WMV. Requiring users to convert to MP4 as an intermediate step adds friction and introduces an extra quality-loss cycle. Supporting all formats directly means you go from source file to GIF in a single step.
When GIF is the right output: Choose GIF when you need the animation to auto-play without user interaction in a platform you do not control — messaging apps, email clients, GitHub Markdown, Notion pages, Confluence, Jira, Linear, and Slack all render GIF inline automatically. No play button, no download prompt, no dependency on the platform's video player.
When to choose video instead: GIF is not efficient for clips longer than 8–10 seconds or content with complex motion and many colors. A 12-second video clip at 15 FPS produces 180 frames as a GIF and can weigh 10–20 MB — too large for most sharing contexts. For longer or higher-quality content, convert to MP4 or WebM instead, where the same clip will be 300–800 KB.
File size guidance for GIF output: Use 10–15 FPS rather than 24 FPS. Set output width to 480px or smaller for sharing contexts, 640px for detailed demos. Clips with simple motion and limited color variation (screen recordings, UI animations, graphics on solid backgrounds) compress most efficiently. If the output GIF is over 5 MB, pass it through a GIF compressor afterward to reduce it further.
Practical rule of thumb: Keep source clips under 8 seconds for clean, shareable GIFs. The shorter and simpler the clip, the smaller the GIF. Reserve video formats for everything longer or more complex.
Key Features
Any Video Format Accepted
MP4, MOV, WebM, AVI, MKV — FFmpeg decodes all major containers and codecs without pre-conversion.
Palette-Optimized Output
Two-pass palettegen with stats_mode=diff builds a custom 256-color palette from your actual content for noticeably better color quality.
FPS and Width Control
Set the exact frame rate and output width for your target platform and file size requirement.
Fully Private — No Uploads
No network requests during conversion. Your video stays on your device from start to finish.
Works on Mobile Devices
Android Chrome and iOS Safari are both supported. Devices from 2019+ handle files up to 20–30 MB smoothly.
Infinite Loop Built In
All output GIFs include the Netscape loop extension. They auto-loop on every platform and browser.
Format Comparison
| Format | Extension | Common Source | Notes |
|---|---|---|---|
| MP4 (H.264/H.265) | .mp4 | Android, camera, web downloads | Most common format — fully supported |
| WebM (VP8/VP9) | .webm | OBS Studio, browser screen recording | Open web format — excellent support |
| QuickTime | .mov | iPhone, iPad, macOS screen recording | H.264 or HEVC codec inside |
| AVI | .avi | Legacy Windows apps, older cameras | Older container — widely decodable by FFmpeg |
| MKV | .mkv | OBS Studio, Handbrake exports | Flexible container with H.264 or VP9 inside |
Technical Details
This tool loads @ffmpeg/core — a complete build of FFmpeg compiled to WebAssembly using Emscripten. WebAssembly runs at near-native speed inside the browser sandbox with no server required. The Wasm binary is fetched once and cached by the browser for all subsequent conversions on the same device. When you submit a video, the tool writes it to FFmpeg's in-memory virtual filesystem, runs the full conversion pipeline (demux → decode → filter → palettegen → paletteuse → mux GIF), reads the output file from the virtual filesystem, and creates a browser object URL for download. The entire process runs in a Web Worker so the browser UI stays responsive during encoding.
GIF color optimization uses FFmpeg's palettegen filter in stats_mode=diff mode, which weights palette color selection based on inter-frame pixel differences rather than analyzing each frame independently. Because animation frames share large regions of identical pixels, this approach dedicates palette slots to the colors that actually change between frames — where color error is most visible. The result is noticeably richer color in animated content compared to per-frame palette generation, at the cost of a slightly longer first-pass analysis step.
