A 12 MB GIF that loops in a Slack channel beats a 80 MB MP4 nobody clicks on. The trade-off: GIFs lose color depth and aren’t great for clips longer than 15 seconds. Within those limits, they’re a superpower.
These are the three ways that work in 2026, fastest to slowest.
Method 1: Record directly to GIF (Zenguy, CleanShot X)
If your recorder supports it, this is the right answer. Zenguy’s export panel shows GIF, MP4, and WebM as side-by-side options. Pick GIF, optionally trim, click export. You’re done in two clicks.
A well-tuned recorder will:
- Drop the frame rate (15 fps is usually fine for screen content)
- Limit the palette (256 colors, dithered if needed)
- Apply size caps (warn if the output will exceed 10 MB)
The output is typically 5–15× smaller than what you’d get from a converted-after-the-fact MP4. This is the only method that gives you a clean GIF in under 30 seconds.
If your GIF is over 10 seconds long or over 15 MB, it's not a GIF — it's a misuse of GIF. Trim or convert to MP4.
Method 2: ffmpeg (free, sharp, command-line)
If you already have an MP4 and want maximum control, ffmpeg is the tool. Install it via Homebrew:
brew install ffmpeg
Then convert your MP4 to GIF in two passes — generate a custom palette first, then encode against it. This is what gives you decent color quality at a small size:
# Pass 1: build a per-clip palette
ffmpeg -i recording.mov -vf "fps=15,scale=720:-1:flags=lanczos,palettegen" palette.png
# Pass 2: encode with that palette
ffmpeg -i recording.mov -i palette.png -filter_complex "fps=15,scale=720:-1:flags=lanczos[x];[x][1:v]paletteuse" output.gif
What those flags do:
fps=15— 15 frames per second. 30 fps doubles the file size for screen content nobody can perceive at speed.scale=720:-1— width 720px, height auto. Scale down before encoding; full-resolution GIFs are wasteful.palettegen/paletteuse— the two-pass color trick. Without it, the default 8-bit GIF palette mangles UI colors.
Expect 2–8 MB GIFs from a 30-second clip. ffmpeg is also the most predictable tool — same input, same output, every time.
Method 3: QuickTime → screen recording → online converter (avoid)
Many tutorials suggest “just use a free online converter.” We don’t recommend it:
- Privacy. You’re uploading a screen recording to a stranger’s server. If it’s a bug repro of your dashboard with API keys visible, that’s a leak.
- Quality. Most free online converters use the lazy single-pass GIF encoding without palette generation. The output is twice the size and half the quality.
- Speed. Upload + convert + download is 2–5 minutes. ffmpeg does it in 8 seconds.
Use this only as a last resort, and never with sensitive content.
Tips for smaller, cleaner GIFs
- Crop tightly. Half the bytes go to whitespace nobody needs to see.
- Avoid scrolling content. Every pixel that changes is a pixel re-encoded. A scrolling page is the worst case for GIF.
- Use solid backgrounds. A flat backdrop compresses better than the macOS desktop wallpaper.
- Trim hard. A 6-second loop is more useful than a 22-second clip nobody finishes.
Comparison table
| Method | Time to GIF | Quality | File size | Privacy |
|---|---|---|---|---|
| Zenguy / CleanShot | ~10s | Excellent | Smallest | Local |
| ffmpeg (two-pass) | ~30s | Excellent | Smallest | Local |
| Online converter | 2–5 min | Mixed | Larger | Uploaded |
Skip the conversion step entirely
Zenguy exports record-to-GIF in two clicks. Pre-tuned palette, automatic size cap, no command line.