Guide

Compress a Mac Screen Recording

By the Smol team9 min read

A one-minute Mac screen recording of a Retina display is about 56 MB. Ours was exactly 56,384,195 bytes for 60.05 seconds. One ffmpeg command took it to 1,019,781 bytes, a 98.2% reduction, in 8.9 seconds, and it still reads perfectly.

Screen recordings compress far better than camera footage, and they respond to completely different settings. The advice that works on a holiday video is close to useless here, and two of the things people reach for first (lowering the frame rate, and the default keyframe interval) are actively working against you.

We build Smol, a Mac compression app, so one route below is ours. The rest is ffmpeg, and everything is measured.

Why is a Mac screen recording so large?

Three reasons, and the first one accounts for most of it. To measure rather than guess, we captured a recording on the machine described below using macOS’s own capture tool from the command line, so it is reproducible:

screencapture -v -V 60 -D 1 screenrec60.mov

What came out, straight from ffprobe:

PropertyValue
Size56,384,195 bytes for 60.05 seconds
Bitrate7.51 Mbps
Resolution3024 × 1964
CodecH.264, Main profile, yuv420p
Frames994 over 60.05 s, so 16.55 fps on average
Declared timebase240/1
Audionone

Resolution is the main culprit. macOS records the display at its native pixel size, and on a 14-inch MacBook Pro that is 3024×1964. That is 5.94 megapixels per frame, 2.86 times a 1080p frame. You are recording at better than 4K height without ever choosing to.

The content is hostile to the codec in one specific way. Screen content is mostly static, which is great for compression, but the parts that do change are sharp text and hard-edged UI. Video codecs are built around the assumption that high-frequency detail can be blurred without anyone minding. Text is exactly the case where that assumption is wrong, so the encoder has to spend real bits whenever anything moves.

It is captured in realtime by a hardware encoder. A recorder cannot think about a frame for 40 milliseconds, so it uses the Apple Silicon Media Engine, which is built for speed rather than efficiency. That is the same trade we measured directly in our tested guide to compressing video on Mac: the hardware H.265 encoder was three times faster than software x265 and fifteen VMAF points worse at the same file size.

A useful rule of thumb from two separate captures on this machine: a 20-second recording came out at 20,067,955 bytes and the 60-second one at 56,384,195. Budget about a megabyte per second of Retina screen recording. A ten-minute product walkthrough is over half a gigabyte before you have edited anything.

What actually shrinks a screen recording?

Everything in this table starts from the same 56,384,195-byte recording, re-encoded with x265 at CRF 28, -preset medium, all 994 original frames preserved with -fps_mode passthrough. Only the one named setting changes per row.

ChangeResultvs baselineTime
Baseline: native 3024×1964, default keyframe interval3,875,578 B−93.1% from source32.5 s
Half resolution, 1512 × 9821,316,662 B−66.0%9.3 s
Scale to 1920 wide (1920 × 1247)2,002,030 B−48.3%13.5 s
CRF 34 instead of 282,220,687 B−42.7%30.9 s
Keyframe interval 600 frames3,002,539 B−22.5%35.3 s
Force 10 fps (994 → 602 frames)3,340,523 B−13.8%21.8 s
Force 15 fps (994 → 902 frames)3,515,765 B−9.3%30.0 s
Keyframe interval 60 frames8,547,577 B+120.6%48.3 s
H.264 at CRF 23 instead of H.2657,126,558 B+83.9%11.8 s
Half resolution and keyframe interval 6001,019,781 B−73.7%8.9 s

The ranking is the point. Resolution beats everything, the keyframe interval is worth more than most people would guess, frame rate is nearly worthless, and two of the rows made the file dramatically worse. The bottom row is the combination we would actually ship: 98.2% off the source, in under nine seconds.

Here is that command, and yes, it was run:

ffmpeg -i screenrec.mov -fps_mode passthrough \
  -vf scale=1512:982 -c:v libx265 -crf 28 -preset medium \
  -x265-params keyint=600:min-keyint=600 \
  -tag:v hvc1 -c:a copy small.mp4

-tag:v hvc1 is required if you want Finder, QuickTime and Photos to preview the result. Without it you get a valid H.265 file that macOS pretends not to understand.

Why does the keyframe interval matter so much here?

A keyframe is a complete picture, compressed on its own with no reference to any other frame. Everything between keyframes is stored as differences. On a 5.94-megapixel screen capture, one keyframe is expensive and one difference frame is almost free, because for long stretches of a screen recording nothing at all has changed.

So the interval between keyframes sets how often you pay full price. Our three measurements on the identical recording:

Keyframe intervalRoughlySizevs default
60 framesevery 3.6 seconds8,547,577 B+120.6%
250 frames (x265 default)every 15 seconds3,875,578 B—
600 framesevery 36 seconds3,002,539 B−22.5%

Between the tightest and loosest setting the file changes by a factor of 2.85, with the picture quality target untouched. If a tool is producing a suspiciously large screen recording, a short keyframe interval is a good first suspect. Several capture tools use two seconds, because that is the streaming convention, and streaming conventions exist to let a player seek and switch bitrates, not to make small files.

What you give up by going long is seek granularity. A player has to decode from the last keyframe, so with a 36-second interval, scrubbing can hesitate. For a demo clip that someone watches start to finish, that is a non-issue. For reference footage you will be scrubbing through in an editor, keep the default.

Should you record at 2× and deliver at 1×?

Almost always, yes. A Retina capture stores two device pixels for every point of interface you designed, and the person watching your clip in a Slack thread is looking at it in a box perhaps 700 pixels wide. You are shipping 3024 pixels of width so that a browser can throw most of them away.

Halving the long edge is the single biggest saving available:

Delivered atSizevs native
3024 × 1964 (native)3,875,578 B—
1920 × 12472,002,030 B−48.3%
1512 × 982 (exact half)1,316,662 B−66.0%

The exact-half number matters more than it looks. Scaling by precisely 0.5 maps a clean 2×2 block of source pixels onto one output pixel, which keeps text edges crisp. Scaling to an awkward ratio like 1920 from 3024 resamples on fractional boundaries and softens exactly the thing you most want to stay readable. If you are going to downscale a Retina capture, halve it.

Two things to check before you do. If the recording shows anything at small type sizes, a terminal at 11 point, dense spreadsheet cells, a code editor at its default size, open the downscaled version and read the smallest text in it. That takes ten seconds and it is the only test that matters. And if the clip is a bug report where the exact pixels are the evidence, do not downscale at all; raise CRF instead.

If you would rather not think in pixel dimensions, Smol’s video resolution options are bounding boxes rather than exact sizes. Setting 1920 on this recording produced 1662×1080, because the box is 1920×1080 and a 3024×1964 frame is taller than it is wide relative to that box. Useful to know before you wonder why the output is not 1920 across.

Does lowering the frame rate help?

Hardly at all, and this is the advice we would most like to retire. Forcing our recording to a constant 10 fps threw away 39% of the frames and saved 13.8% of the bytes. Forcing 15 fps saved 9.3%.

There are two reasons for that, and both are worth understanding. At a fixed quality target the encoder spends whatever each frame costs; dropping frames means the frames that survive are more different from their predecessors, so each one costs more. And a macOS screen recording is already variable frame rate. Ours declared a 240 timebase but contained 994 frames in 60 seconds, because the capture only emits a frame when something changes. It has already done the frame-rate optimisation for you, and forcing a constant rate on top can make things worse: our 15 fps version contains 902 frames, barely fewer than the original 994.

Where frame rate is genuinely the right lever: a talking-head demo capture where you are deliberately targeting a small, smooth-enough deliverable and you are also encoding to a fixed bitrate rather than a quality target. In that case the bits are rationed per second and fewer frames means more bits each. That is a different mode, and the trade-offs are in reducing video file size without losing quality.

One thing that does work and costs nothing: cut the dead time at the start and end with a stream copy, before compressing anything. No re-encoding, no quality loss, and on a recording that begins with fifteen seconds of you finding the right window it is the largest saving on this page.

ffmpeg -ss 15 -to 75 -i screenrec.mov -c copy trimmed.mov

What is the version that takes two minutes?

Drop the file into an app and pick a quality. Smol’s results on the same 56,384,195-byte recording, timed by the app itself:

SettingOutputSizeSavingsTime
Default (H.265, high)3024 × 19643,691,160 B93.5%38.4 s
Web quality3024 × 19642,451,184 B95.7%50.4 s
Resolution 19201662 × 10801,399,221 B97.5%16.3 s

Note the bottom row is both the smallest and the fastest, by a wide margin, because downscaling first means the encoder has a third as many pixels to think about. That is the same reason the half-resolution ffmpeg run took 9.3 seconds against the native run’s 32.5.

Under the hood there is no magic: the output carries an x265 options string you can read yourself, and the quality labels are CRF values. High is CRF 24 and web is CRF 28, both in 10-bit HEVC.

strings -a output.mp4 | grep -o "rc=crf crf=[0-9.]*"
# rc=crf crf=24.0

What an app buys you here is the folder case. Screen recordings arrive in batches: one per bug, one per support ticket, one per onboarding step. For the upload limits these are usually fighting, Slack and Discord and email, the current numbers are in our help article on compressing video for sharing. Smol is a one-time $29 purchase for one Mac, and it handles video alongside images and documents, which is the same argument we make for compressing PDFs on Mac.

When is Smol the wrong tool for this?

When the real fix is recording differently. If you are producing screen recordings weekly, capture a smaller region with the Screenshot toolbar’s Record Selected Portion, or record from a scaled resolution. Apple documents the capture options in the Mac User Guide. A 1280-wide capture never needs compressing in the first place, and no amount of post-processing recovers the sharpness you lose by downscaling later.

When you want the trim more than the compression. Cutting with -c copy is instant and lossless. QuickTime Player’s own Edit → Trim does the same job with a slider.

When you need burned-in captions, cursor highlighting or zoom. That is a screen-recording editor, not a compressor. We do not do any of it.

When ffmpeg is already open. The one command in this article is shorter than a paragraph and does exactly what we do. If you are comfortable with it, use it. HandBrake also handles this well, is free, and is actively developed, with its most recent commit dated 25 September 2026.

  • Where we do think we earn it: a queue of recordings rather than one, a sane default instead of a settings tab, nothing leaving the machine, and Finder integration so the whole thing is a right-click.

Frequently asked questions

Why is my Mac screen recording so big?

Mostly resolution. macOS records at the display native pixel size, which on a 14-inch MacBook Pro is 3024 by 1964, or 2.86 times a 1080p frame. Our 60-second capture was 56,384,195 bytes at 7.51 Mbps. Budget about a megabyte per second of Retina screen recording before any editing.

What is the best way to compress a screen recording on Mac?

Halve the resolution and lengthen the keyframe interval, then encode with H.265. On our 56,384,195-byte recording that combination produced 1,019,781 bytes in 8.9 seconds, a 98.2% reduction, with text still readable. In ffmpeg: -vf scale=1512:982 -c:v libx265 -crf 28 -x265-params keyint=600:min-keyint=600 -tag:v hvc1.

Should I lower the frame rate of a screen recording to shrink it?

No. Forcing our recording to 10 fps discarded 39% of the frames and saved only 13.8% of the bytes. A macOS screen recording is already variable frame rate and only emits a frame when the screen changes, so it has done that work for you. Forcing a constant rate on top can even increase the frame count.

Does the keyframe interval really change screen recording file size?

Substantially. On the same recording at the same quality target, a 60-frame keyframe interval produced 8,547,577 bytes, the x265 default of 250 frames produced 3,875,578, and a 600-frame interval produced 3,002,539. That is a factor of 2.85 from one setting. Screen content is mostly static, so full keyframes dominate the file size.

Should I record at Retina resolution and deliver at half size?

Usually yes, and halve it exactly rather than scaling to an odd width. Exact halving maps each 2 by 2 block of source pixels to one output pixel, which keeps text edges crisp. On our recording, 1512 by 982 was 66.0% smaller than native while 1920 by 1247 was only 48.3% smaller and slightly softer.

Keep reading