The Problem With Raw Screen Recordings
Screen recording software captures everything at maximum quality — which is great for archiving but terrible for sharing. A 30-second screen recording from a MacBook Pro Retina display can easily hit 200–400 MB. Even after compression, raw screen recordings tend to be oversized, visually noisy at text edges, and formatted in ways that don't embed well in documentation, GitHub READMEs, or Slack.
The solution is format conversion — picking the right output format for the specific use case and converting with settings that prioritize clarity at small file sizes. Screen recordings are a unique category: they usually contain a lot of flat color, sharp text, and repetitive pixel regions across frames. The right codec exploits that structure for much better compression than general-purpose video settings.
This guide covers three main output scenarios: GIF (for GitHub, documentation, email), WebM (for web documentation and web apps), and MP4 (for social media and presentations). For each, there's a clear conversion workflow and the exact settings that produce good results.
Choosing Your Output Format
Different destinations have different requirements. The wrong format choice leads to either bloated files or quality loss:
| Use Case | Best Format | Why |
|---|---|---|
| GitHub README | GIF or WebM | GIF is universally supported; WebM is smaller but needs <video> tag |
| Notion / Confluence | GIF or MP4 | Embedded players support MP4; GIF works as inline image |
| Slack / Discord | GIF or MP4 | Auto-plays without click; GIF universally loops |
| Twitter/X | MP4 (H.264) | Platform re-encodes everything, needs MP4 source |
| Web documentation | WebM + MP4 | Serve WebM to Chrome/Firefox, MP4 to Safari via <video> |
| Email newsletter | GIF | Video doesn't embed in email clients |
| PowerPoint / Keynote | MP4 (H.264) | Built-in video players require MP4 |
Converting Screen Recordings to GIF
GIF is the most universally compatible format for animated content — it works in email clients, GitHub, every browser, and every modern app. The trade-off is file size. A 30-second GIF at full resolution will be massive. For GIF to work, you need to:
- Limit duration — Keep GIFs under 15 seconds when possible
- Reduce resolution — Scale down to 720p or smaller
- Reduce frame rate — 10–15 fps is usually sufficient for screen content
- Optimize the palette — GIF uses 256 colors max; optimizing the palette matters
The best tool for high-quality GIF conversion from screen recordings is FFmpeg with a two-pass palette optimization:
# Two-pass GIF with optimized palette (best quality/size ratio)
# Pass 1: Generate optimized color palette
ffmpeg -i screen-recording.mov \
-vf "fps=12,scale=1280:-1:flags=lanczos,palettegen=stats_mode=diff" \
palette.png
# Pass 2: Encode GIF using the palette
ffmpeg -i screen-recording.mov -i palette.png \
-vf "fps=12,scale=1280:-1:flags=lanczos,paletteuse=dither=bayer:bayer_scale=5:diff_mode=rectangle" \
output.gif
The stats_mode=diff and diff_mode=rectangle options tell FFmpeg to optimize the palette based on regions that actually change between frames, rather than all colors in the video. For screen recordings — where large areas of the screen stay static — this dramatically reduces the color artifacts that make GIFs look banded.
For faster conversion without the two-pass process, use the GIF maker tool online. Upload your screen recording, set the frame rate and dimensions, and download an optimized GIF.
Pro Tip: For screen recordings with text, keep resolution at 1280px wide minimum. Text in GIFs looks terrible when downscaled below ~72px height. Scale down width, not height, when you need a smaller file.
Converting Screen Recordings to WebM
WebM (using the VP9 codec) produces files that are 40–70% smaller than equivalent GIFs at the same visual quality. For web documentation — especially technical docs hosted on a custom site — WebM is the professional choice.
# Convert screen recording to WebM (VP9, optimized for screen content)
ffmpeg -i screen-recording.mov \
-c:v libvpx-vp9 \
-crf 35 \
-b:v 0 \
-vf "fps=24,scale=1280:-2" \
-an \
output.webm
# For browser auto-play compatibility (no audio, loopable)
ffmpeg -i screen-recording.mov \
-c:v libvpx-vp9 \
-crf 35 \
-b:v 0 \
-vf "fps=24,scale=1280:-2" \
-an \
-loop 0 \
output-loop.webm
CRF 30–40 works well for screen recordings. Lower CRF = better quality but larger files. Screen recordings compress especially well because large static regions (toolbars, sidebars, blank areas) can be stored with near-zero data between frames.
To use WebM in documentation HTML:
<video autoplay loop muted playsinline>
<source src="/demo.webm" type="video/webm" />
<source src="/demo.mp4" type="video/mp4" />
<!-- Fallback for very old browsers -->
<img src="/demo.gif" alt="Demo animation" />
</video>
For comparison, a 20-second screen recording at 1280×720:
- Raw MOV: ~180 MB
- GIF (optimized): ~8–15 MB
- WebM (VP9): ~1–3 MB
- MP4 (H.264): ~2–4 MB
WebM and MP4 are roughly comparable in size for screen recordings. The deciding factor is your target audience's browser environment and whether you need HTML <video> or inline image embedding.
For a deeper dive on the WebM vs MP4 trade-offs, see our WebM vs MP4 comparison guide.
Converting Screen Recordings to MP4
MP4 with H.264 is the most universally compatible video format. Use it for social media posts, presentations, Notion embeds, and any context where you need a video player rather than an animated image:
# Convert screen recording to MP4 (H.264, high quality, small file)
ffmpeg -i screen-recording.mov \
-c:v libx264 \
-preset slow \
-crf 23 \
-vf "fps=30,scale=1920:-2" \
-c:a aac -b:a 128k \
-movflags +faststart \
output.mp4
# For Slack/Discord (under 8MB for free accounts)
ffmpeg -i screen-recording.mov \
-c:v libx264 \
-preset medium \
-crf 28 \
-vf "fps=24,scale=960:-2" \
-c:a aac -b:a 96k \
-movflags +faststart \
output-slack.mp4
CRF 20–25 is visually lossless for screen content. CRF 28–32 produces small files (useful for Slack's 8 MB free tier limit) with still-acceptable quality for most screen recording content.
Handling Common Screen Recording Formats
Different tools produce different source formats. Here's what to expect:
| Tool | Default Format | Notes |
|---|---|---|
| macOS Screenshot | MOV | Apple ProRes or HEVC — needs transcoding |
| OBS Studio | MKV or MP4 | MKV needs container remux before platform upload |
| Loom | MP4 (H.264) | Already web-ready; may need resize |
| Camtasia | CAMREC / MP4 | Export to MP4 before converting |
| Windows Game Bar | MP4 (H.264) | Usually fine for YouTube/social; resize for docs |
| QuickTime | MOV (H.264) | Near-lossless MOV, needs size reduction |
| Screenflow | MOV (H.264) | Export to MP4 or GIF directly |
For MKV files from OBS, a fast lossless remux (no re-encoding) gets you an MP4 instantly:
# Remux MKV to MP4 without re-encoding (instant, lossless)
ffmpeg -i obs-recording.mkv -c copy output.mp4
The video converter handles all these source formats and converts to your chosen output with a few clicks if you prefer not to use the command line.
Optimizing for Specific Destinations
GitHub README GIFs
GitHub READMEs display inline GIFs as images. GitHub has a 10 MB file size limit for images. For demos in READMEs:
- Target under 5 MB for fast loading
- Keep under 10 seconds for attention retention
- Use 800–1000px wide (GitHub renders README at ~880px)
- 10–15 fps is indistinguishable from 24 fps for UI demos
# GitHub-optimized GIF (two-pass, 800px wide, 12fps)
ffmpeg -i demo.mov -vf "fps=12,scale=800:-1:flags=lanczos,palettegen=stats_mode=diff" palette.png
ffmpeg -i demo.mov -i palette.png \
-vf "fps=12,scale=800:-1:flags=lanczos,paletteuse=dither=bayer:bayer_scale=5:diff_mode=rectangle" \
readme-demo.gif
Documentation Sites
For Docusaurus, Mintlify, GitBook, and similar platforms, WebM in a <video> tag with MP4 fallback is the most professional approach. Set autoplay, loop, and muted — without muted, browsers block autoplay:
<video width="800" autoplay loop muted playsinline>
<source src="/img/demo.webm" type="video/webm" />
<source src="/img/demo.mp4" type="video/mp4" />
</video>
Twitter/X
Twitter supports GIF and MP4. MP4 is always preferred — Twitter re-encodes GIFs internally anyway, so you lose quality twice. Use the video converter to get a 720p MP4 under Twitter's 15-second limit for inline animated demos.
GIF Optimization Techniques
If GIF is required (email, README, tools that don't support <video>), extra optimization passes can meaningfully reduce file size:
# After creating the GIF, run gifsicle for further optimization
gifsicle --optimize=3 --lossy=80 input.gif -o output-optimized.gif
For more GIF-specific optimization techniques, see our GIF optimization for web performance guide.
Typical size reduction with gifsicle on top of two-pass FFmpeg: 20–40% additional compression with minimal visible quality loss. This combination is the most efficient pure-GIF pipeline available without specialized tools.
Frequently Asked Questions
My GIF looks blurry on Retina displays. What went wrong?
GIF is a raster format and doesn't scale — if you embed a 800px GIF in a space where the browser renders it at 400px CSS width, it'll look sharp. But if the device has a 2x pixel ratio and you're not providing a 2x source, it looks blurry. Solution: Create your GIF at 2x resolution (e.g., 1600px wide for a 800px display target) or switch to WebM/MP4 in a <video> tag where width CSS handles scaling correctly.
What's the fastest way to crop a screen recording before converting?
Use the video trimmer to cut the start and end, or use FFmpeg's -ss and -t flags directly. Trim before converting to save time — you're encoding less footage.
Can I convert a GIF back to video?
Yes. FFmpeg handles GIF-to-MP4 conversion:
ffmpeg -i input.gif -c:v libx264 -crf 22 -movflags +faststart output.mp4
GIF → MP4 often produces much smaller files than the source GIF.
Why does my screen recording have choppy playback after conversion?
This usually means the source recording had variable frame rate (VFR), which some converters struggle with. Add -vsync vfr to FFmpeg or use -r 30 to force a constant frame rate. macOS screen recordings are often VFR.
Is there a quick way to extract just a thumbnail from a screen recording?
Yes — the video thumbnail extraction workflow covers multiple methods including FFmpeg's -ss flag for single-frame extraction.
Conclusion
Screen recordings don't need to be large, blurry, or incompatible with your target platform. The right conversion workflow — whether that's an optimized two-pass GIF, a WebM for docs, or an H.264 MP4 for social — produces files that look professional and load fast.
For quick online conversions, the GIF maker and video converter handle the most common screen recording workflows without needing command-line tools. For high-volume or automated workflows, the FFmpeg commands in this guide give you full control over every quality and size parameter.



