Convert GIF to MP4
Convert a heavy GIF into a small MP4 for Discord, WhatsApp and Twitter, with an optional silent audio track so iOS autoplays it properly.
- Runs in your browser
- Files are never uploaded
- Free, no account
First use downloads the 10 MB video engine from this site. After that it is cached and works offline. It is WebAssembly served from onthisdevice.com — no third-party CDN — and your file is still processed entirely on your own device.
Why a GIF is so much bigger than the same animation as video
GIF was designed in 1987 for static images on dial-up bulletin boards. It stores every frame as a complete picture limited to 256 colours, with only simple run-length compression and a crude "which pixels changed" optimisation. It has no concept of motion: a panning shot forces it to store an entirely new frame each time.
H.264 was designed for video. It stores a keyframe occasionally and then describes each following frame as motion vectors and small corrections. For the same animation, an MP4 is routinely 10-50× smaller, and it looks better too, because it is not restricted to a 256-colour palette — no more banded gradients or dithered noise.
| Typical 5-second clip | As GIF | As MP4 |
|---|---|---|
| 480p screen capture, mostly static | 4-8 MB | 150-400 KB |
| 720p camera footage, moving | 25-60 MB | 600 KB - 1.5 MB |
| Flat-colour animation | 1-3 MB | 80-250 KB |
Platform limits this gets you under
- Discord — 10 MB for free accounts. A GIF that is rejected almost always fits comfortably as an MP4.
- WhatsApp — converts GIFs to video internally anyway; sending an MP4 skips a lossy step.
- Twitter/X — 15 MB for GIF, far more for video, and video plays back more smoothly.
- Email and chat clients — a 40 MB GIF in a signature is a genuine problem; a 900 KB MP4 is not.
- Web pages — an autoplaying muted MP4 is the standard replacement for a heavy GIF, and it costs your visitors a fraction of the bandwidth.
The silent audio track
An MP4 with no audio stream at all is refused by iOS Safari’s autoplay rules and by several chat clients, which is the single most common reason a converted GIF "does not work" on a phone. Adding a silent AAC track costs a couple of kilobytes and makes the file behave exactly like the GIF it replaced. That is why the option is on by default; turn it off if you are feeding the file to an editor that would rather have no audio track at all.
Looping
A GIF stores its own loop count; MP4 has no equivalent, so looping is up to the player.
Discord, Twitter and an HTML video loop element all loop happily. Where a platform
insists on playing a video exactly once, use the repeat option to write the animation into the
file several times over — a five-second loop repeated five times is a 25-second video that
behaves like a loop everywhere.
Frame timing
GIF stores a delay per frame, often unevenly — a long pause on a punchline, then rapid motion. Keeping "source timing" preserves that exactly. Forcing a fixed frame rate resamples the timing, which smooths some animations and ruins the comic timing of others. Default to the source unless the result looks wrong.
Going the other way
If you need a GIF rather than a video — for a platform or a document that genuinely cannot take video — video to GIF does the reverse with palette generation for the best possible 256-colour result. For everything else, MP4 is the better format in every measurable way.
Questions
Why is the MP4 so much smaller than the GIF?
GIF stores every frame as an independent 256-colour image with no motion compression at all — a format designed in 1989. H.264 stores the differences between frames. Ten to fifty times smaller for the same animation is normal, and the MP4 usually looks better because it is not limited to 256 colours.
What is the silent audio track for?
iOS Safari and several chat clients refuse to autoplay a video that has no audio stream whatsoever. Adding a silent AAC track costs a couple of kilobytes and makes the clip behave like the GIF it replaced. It is on by default for that reason.
Will the MP4 loop like the GIF did?
That depends on the player, not the file — MP4 has no loop flag. Twitter, Discord and an HTML <video loop> element all loop it happily. Where a platform plays a video only once, use the repeat option to write the animation into the file several times over.
Does frame timing survive?
Yes, if you keep the default “source timing”. A GIF stores a delay per frame and FFmpeg honours it, so an animation with deliberate pauses keeps them. Forcing a fixed frame rate resamples the timing and can subtly change the pacing.