SparkStart free
GIFs11 min read

How to Turn a Video into a GIF Without Losing Quality

A GIF can't hold your footage's colours, but it can fool the eye. We exported one clip 13 different ways and measured what each setting really costs.

By the Spark team ·

A couple dancing on a hillside at purple-blue dusk, the city lights spread out below them
La La Land (2016), dir. Damien Chazelle, DoP Linus Sandgren

Strictly speaking, you can't turn a video into a GIF without losing quality. A GIF holds at most 256 colours per frame and your footage has millions, so something always gives. What you can do is make a high quality GIF that reads as the video at a glance and still opens on a client's phone. For most clips the recipe is: 480 to 640 px wide, 12 to 15 frames per second, a palette built from the clip itself (the "two-pass" method), the right dither for the footage, and a trim so tight it hurts. Get those right and nobody in the meeting notices it's a GIF.

The rest of this page is the why, with numbers. We exported the same 4-second clip from Spark's launch film 13 different ways and wrote down every file size, so you can see what each setting actually costs instead of taking a converter's word for it.

Why GIFs make good footage look bad

GIF dates from 1987. It shows. Three things go wrong, and each one has a fix.

The 256-colour ceiling. Every frame gets a palette of up to 256 colours. A flat, graphic shot fits into that easily. A dusk sky doesn't, because a gradient from violet to navy is thousands of slightly different shades and the GIF has to pick 256 of them. The result is banding: smooth skies turn into stripes, like a contour map.

Dithering, which is the cure and the cost. To fake the missing shades, encoders scatter pixels of neighbouring colours so your eye blends them, the way a newspaper photo is made of dots. There are two families. Error diffusion (Floyd-Steinberg, Sierra) gives the smoothest gradients, but its pattern is different on every frame, so it shimmers and compresses badly. Ordered dithering (Bayer) lays a fixed crosshatch over the picture. It looks a touch more "printed", but it stays put from frame to frame, and that makes files much smaller.

Compression that hates movement. A GIF can skip pixels that didn't change since the last frame, and that's about the only trick it has. A locked-off shot of a product on a table is cheap. A handheld shot with film grain changes every pixel on every frame, and the file balloons.

Pixel art icons, a heart, a coin and a camera, circle and spin on a paper-white background
GIF heaven: Jordan Watkins' Change is flat colour on white. A 256-colour palette has room to spare.Change, Jordan Watkins
A lone figure stands in a pool of light in a dark sunflower field at night
GIF's worst night: a soft pool of light fading into dark leaves. Thousands of near-identical shades, all fighting for 256 slots.Spotlit Sunflowers, Zach

So before you touch a setting, look at the footage. Flat colour and a still camera will forgive almost anything. Skies, smoke, skin in soft light and grain will punish lazy settings.

We exported the same clip 13 ways

The test clip is 4 seconds of 1080p, 25 fps footage: a sunset hillside with interface cards floating over it, which is to say gradients everywhere. We used FFmpeg 7 with lanczos scaling and changed one thing at a time.

WidthFPSPalette and ditherFile size
800 px25ffmpeg default (single pass)5.99 MB, noisy and banded
800 px25Two-pass, Sierra dither15.02 MB
1080 px15Two-pass, Sierra16.47 MB
800 px15Two-pass, Sierra9.19 MB
640 px15Two-pass, Sierra5.97 MB
480 px15Two-pass, Sierra3.44 MB
480 px12Two-pass, Sierra2.85 MB
480 px10Two-pass, Sierra2.41 MB
320 px12Two-pass, Sierra1.32 MB
480 px15Two-pass, Bayer dither1.85 MB
480 px15Two-pass, no dither1.66 MB, visible banding
480 px15128 colours, Bayer1.49 MB
480 px1564 colours, Bayer1.18 MB

What that table is telling you:

  • The good-looking GIF can be the big one. ffmpeg's default (one pass, a generic palette) made a 5.99 MB file that looked rough. Same size and frame rate with a proper palette looked far better and weighed 15.02 MB. "Higher quality" and "smaller" pull in opposite directions, so decide which one you need before you start.
  • Width costs roughly the square. 480 to 640 px is a third wider and 74% heavier. 1080 px came out nearly five times the size of 480 px.
  • Dither choice is a big lever on gradient footage. Same width, same frame rate: Sierra 3.44 MB, Bayer 1.85 MB. On our sunset, Bayer looked nearly as smooth.
  • Halving the colours saves less than you'd think. 256 to 128 colours saved about a fifth. 64 saved another fifth, and that's where skies start to stripe and the pinks in our clip went muddy.

Frame rate is gentler than width, too. Dropping from 15 to 10 fps cut a third of the frames but only 30% of the size.

The same frame as a GIF twice: left with ffmpeg's default palette, grainy with banding in the sky; right with a two-pass palette, smooth
Same frame, same 480 px. Left: ffmpeg's default palette, all speckle and stripes. Right: a palette built from the clip itself.

The settings that matter, in order

Width: 480 to 640 px for nearly everything

A GIF in a deck or a Slack thread rarely displays wider than 600 px, and on a phone it's narrower still. 480 px is the sweet spot for decks and moodboards. Go to 640 or 800 only if the GIF will fill a slide on a big screen. 1080 px GIFs exist, but ours was 16.47 MB for four seconds, and at that point you want a video.

Frame rate: 12 to 15 fps

Film runs at 24 or 25. A GIF at 15 still reads as motion; at 12 it starts to look deliberate, a little like stop-motion, which can be charming. Below 10, fast action falls apart.

A nerdy footnote for the people who care (we do). GIF stores frame timing in hundredths of a second, so 15 fps can't be stored exactly. Good encoders alternate 6 and 7 hundredths; ffmpeg did, and our 60 frames still ran exactly 4 seconds. Never go above 50 fps, because many browsers slow very short frame delays down rather than speed them up.

A runner leaps in silhouette across a giant golden moon in an amber sky
Nike ACG's Change of pace at 15 fps. Fast movement, but a clean silhouette, so it holds together without needing 24 frames a second.Nike ACG: Change of pace, Paddy Cartwright

Palette: always two-pass

The single most important setting, and the one free converters most often skip. Two-pass means the encoder looks at your clip first, builds the best 256 colours for that footage, then encodes with them. Without it you get a one-size-fits-all palette and the speckled mess on the left of the comparison above.

Dither: match it to the footage

  • Gradients, skies, skin: Bayer for a sensible file, Sierra or Floyd-Steinberg if size truly doesn't matter.
  • Flat graphics, screen recordings, UI: no dither at all. It just adds noise to areas that were clean.
  • Grainy film footage: Bayer, and consider smoothing the grain first (more on that in our guide to reducing GIF file size).
A kaleidoscope of green and lime dots and squares pulsing out from a pink star
Oddfellows' film for Figma is flat colour from edge to edge. Dither would only add fizz to shapes that were clean to begin with.Figma x Oddfellows, Oddfellows

Length: trim like you're paying by the frame

Because you are. Size grows in step with duration, so a 3-second loop of the one perfect moment beats 10 seconds of the scene. Find the loop point, the moment where the end flows back into the start, and the GIF will feel longer than it is. And if the GIF already exists and is simply too heavy, the GIF compressor on this site works through the same levers (width, frames, colours, dither) on the finished file, in your browser.

Four ways to make a high quality GIF

ToolWhat it's good atPrice (as of October 2026)
Spark Video to GIFFrame-accurate trims in the browser, nothing uploadedFree
FFmpegFull control, batches, cropsFree, open source
GifskiSmooth gradients with very few decisionsFree
PhotoshopThe best live preview of size and qualityFrom £21.98 a month (annual plan, billed monthly)

The free converter in your browser

For a good GIF without installing anything, convert it right here in the browser. The tool runs locally, so the file never leaves your computer. It takes videos up to 2 GB with no watermark or sign-up. Trim the clip (up to 30 seconds), then nudge the in and out points one frame at a time with comma and full stop until the loop sits exactly where you want it. Pick a width from 320 to 1080 px and a frame rate from 10 to 24 fps, and choose Small, Balanced or Best.

Those presets map onto the table above. Small is 128 colours without dithering. Balanced is one 256-colour palette shared across the clip with light ordered dithering. Best builds a fresh palette for every frame with error diffusion. It estimates the file size before you commit, which saves a lot of guessing.

ffmpeg, for full control

ffmpeg is free, runs on Mac, Windows and Linux, and does the two-pass palette in one line. This is the exact command we used for the Bayer row of our test:

ffmpeg -ss 12 -t 4 -i input.mp4 -vf "fps=15,scale=480:-1:flags=lanczos,split[a][b];[a]palettegen=stats_mode=diff[p];[b][p]paletteuse=dither=bayer:bayer_scale=3" output.gif

-ss 12 -t 4 takes 4 seconds starting 12 seconds in. stats_mode=diff builds the palette from what moves, which helps when the background is still. For the smoothest gradients and a bigger file, swap the last part for paletteuse=dither=sierra2_4a. For flat graphics, use paletteuse=dither=none. If one palette can't cover a clip that changes a lot (a cut from a red interior to a blue exterior, say), give each frame its own:

ffmpeg -ss 12 -t 4 -i input.mp4 -vf "fps=15,scale=480:-1:flags=lanczos,split[a][b];[a]palettegen=stats_mode=single[p];[b][p]paletteuse=new=1" output.gif

On our clip, per-frame palettes came out at 4.69 MB against 3.44 MB for one shared palette, so save it for clips that need it. Installing ffmpeg differs by platform; we've written the steps for Mac and Windows.

Gifski, when gradients matter

Gifski is a free encoder for Mac and the command line. It dithers across frames rather than one frame at a time, which often looks cleaner on skies and skin, at the cost of fewer knobs. Their own homepage demo is a GIF of laundrette washing machines spinning, which is a nicely smug way of proving the point.

Gifski's homepage with its logo over rainbow stripes and a GIF of spinning washing machines
Gifski's homepage. The washing machines are a GIF, and a good advert for what a smart palette can do.Screenshot: gif.ski, October 2026

Photoshop, if you already pay for it

Photoshop does a good job and gives you the best preview, but it's the long way round. Go to File > Import > Video Frames to Layers, choose a range (and "Limit To Every 2 Frames" to halve a 25 fps clip to 12.5), and tick Make Frame Animation. Then File > Export > Save for Web (Legacy). Pick GIF, Selective colour reduction, 256 colours, Diffusion or Pattern dither (Pattern is Photoshop's ordered dither), set Looping Options to Forever, and watch the file size in the bottom left as you change the width.

The Lossy slider is handy for trimming size later. Long clips are slow, and Video Frames to Layers stops at 500 frames, so trim first. Editors working in Premiere Pro have a different route, covered in our guide to exporting a GIF from Premiere Pro. Motion designers starting from a comp can follow exporting a GIF from After Effects instead.

And if the video is a reference you've already saved

Most of our GIFs don't start as files at all. They start as an Instagram reel or a YouTube film someone saved for a pitch. (We've covered the platform routes for turning a reel into a GIF and making a GIF from a YouTube video.)

In Spark, open the saved video and click Export GIF. Set the in and out points, nudge either one by a second or a tenth, pick 8 to 24 fps and a width from 320 to 1080 px, and it saves a copy to Frames, ready for the deck. No downloading, no hunting for the file in a folder called refs_misc.

A saved video in Spark, Absolut Tabasco's volcano film, with Export GIF and Export Frame
Absolut Tabasco's launch film saved in Spark. Export GIF sits right on the video, next to the brand, its collections and the AI notes.
Spark's Export GIF window with in and out points, 15 fps and 640 px
The Export GIF window: in at 0:00.0, out at 0:10.0, 15 fps, 640 px, and Add to Frames switched on.

When you shouldn't make a GIF at all

One more row from our test, and it's an awkward one. The same 4 seconds at the same 480 px, saved as an ordinary H.264 MP4, was 0.29 MB. The leanest decent GIF was 1.85 MB. Video is six times smaller and looks better, because it was designed for footage and GIF wasn't.

So use a GIF where video won't play or won't autoplay: email (most mail apps won't play embedded video), Slack emoji, and any moodboard tool, website builder or form field that only takes images. If the clip is going into Keynote or PowerPoint and you control the laptop it plays on, a muted, looping MP4 usually looks better and keeps the deck light. When it has to be a GIF, there are a few playback traps, which our guide to putting GIFs into PowerPoint walks through.

Our own rule is blunt. If it's going in an email, or a deck the client will flick through on their phone, it's a GIF. If it's playing on the screen in the room, it's an MP4.

Six cinematic adverts playing at once: Absolut's lava volcano, Salomon's ridge, Nike ACG's leap, a Mile End underpass, Apple's Bounce and the Severance ice field
A moving moodboard of six GIFs in 1.17 MB. Small, quick to load, and every clip trimmed to the two seconds that matter.Clips: Absolut Tabasco: For Those Who Bring the Heat (Absolut); SALOMON: Sentry Pro DC (Tom Granier for Salomon); Nike ACG: Change of pace (Paddy Cartwright); Mile End Community Project: Hero Film (Perspective Pictures); Apple: Bounce by Oscar Hudson (Director's Cut) (Wanda Productions for Apple); Severance: Opening Title Sequence, Season 2 (Apple TV)

Moodboards are where GIFs still win outright, because a board of six clips playing at once does something a row of MP4 thumbnails can't. The moodboard tool we built lays them out as a deck, and they keep moving in the .pptx. More on that in how to create a video moodboard.

FAQs

What is the best frame rate for a GIF?

12 to 15 fps for footage. It halves the frames of a 25 fps source while still reading as smooth motion. Go to 20 or 24 only for fast action where smoothness matters more than file size, and avoid anything above 50 fps because many browsers slow it down.

What resolution should a GIF be?

480 px wide for decks, moodboards and messages, 640 to 800 px if it needs to fill a slide on a big screen. File size grows with roughly the square of the width, so 640 px is about 75% heavier than 480 px. Very wide GIFs are better as video.

Why does my GIF look grainy or dotty?

That's dithering: the encoder scattering pixels to fake colours that aren't in its 256-colour palette. It looks worst when the palette is generic, so use a two-pass palette built from your clip. If the dots crawl, switch to ordered (Bayer) dithering, or no dithering for flat graphics.

Can a GIF be HD or 4K?

Technically yes, practically no. Our 1080 px test GIF of a 4-second clip was 16.47 MB, and a 4K frame has more than 12 times the pixels of that. If you need HD motion, use an MP4.

How do I convert a video to a GIF without a watermark?

Use ffmpeg, Gifski, Photoshop, or a free converter that doesn't stamp one on, like our video to GIF tool, which runs in your browser so the video isn't uploaded anywhere. Plenty of online converters add a watermark unless you pay, so check the preview first.

Is it better to use MP4 or GIF?

MP4 whenever the place you're putting it plays video: it was six times smaller than our leanest decent GIF and looked better. GIF wins where video won't play or autoplay, like email, image-only tools and Slack emoji.

Keep reading

All articles