CRF 18 vs 23 vs 28 for a Vertical AI Short: File Size and VMAF on One 10-Second Clip
Disclosure: this post has no affiliate links. The shop page linked at the end is our own product list and may contain affiliate links; we may earn a commission if you buy through those. The test clip is an AI-generated video we made ourselves, and this post was drafted with AI assistance, then checked line by line against our measurement file from October 29, 2026 (KST). No tool vendor provided or reviewed it.
Short answer from one test: on our 10-second vertical AI clip, each 5-step rise in CRF cut the file by 41-51% (about half from CRF 23 upward), and CRF 23 on the x264 "veryfast" preset was not the same quality as CRF 23 on "medium". Veryfast made a file 30% smaller, but its VMAF score (91.93) landed next to medium at CRF 28 (92.18), not next to medium at CRF 23 (95.97). If you change the preset to save time, do not assume the CRF number still means the same quality.
The question
You export a 1080×1920 short and have to pick a CRF value. Lower CRF means a bigger file and fewer compression losses. How big is the jump between common values, how much quality does the score say you lose, and does the encoder preset change the answer?
What we ran
- Source: one finished 10.03-second AI-generated clip from our own short (local image-to-video plus one generated paper insert, no paid API calls). 1080×1920, 30 fps, 301 frames, H.264 at about 6,456 kbps, 8.35 MB.
- Encodes: ffmpeg 9.0.1 with libx264, video only (audio removed), yuv420p. Preset medium at CRF 18, 23, 28 and 33, plus CRF 23 on the veryfast and slow presets. One encode per setting.
- Score: VMAF with ffmpeg's libvmaf filter and its default model (vmaf_v0.6.1), every frame compared with the source file, plus PSNR on the luma channel. "Worst frame" below is the lowest single-frame VMAF.
- Machine: one Apple M5 Pro laptop, 8 encoder threads. Times are wall-clock seconds for the encode only.
Results
| Preset / CRF | File size | Bitrate | VMAF mean | Worst frame | Encode time |
|---|---|---|---|---|---|
| medium / 18 | 6.83 MB | 5,444 kbps | 97.52 | 95.85 | 3.2 s |
| medium / 23 | 4.00 MB | 3,189 kbps | 95.97 | 93.73 | 2.8 s |
| medium / 28 | 2.00 MB | 1,593 kbps | 92.18 | 89.35 | 2.2 s |
| medium / 33 | 0.99 MB | 787 kbps | 85.54 | 81.32 | 1.9 s |
| veryfast / 23 | 2.81 MB | 2,240 kbps | 91.93 | 88.33 | 1.0 s |
| slow / 23 | 3.82 MB | 3,049 kbps | 95.86 | 93.68 | 4.6 s |
What the numbers say
- Size dropped 41-51% every 5 CRF steps here. 6.83 → 4.00 → 2.00 → 0.99 MB (18→23 cut 41%; each later step about half). The score drop grows as you go: 1.6 points from 18 to 23, 3.8 from 23 to 28, 6.6 from 28 to 33.
- Preset changes what CRF means. Veryfast at CRF 23 was smaller and faster, but it scored like medium at CRF 28, which was smaller still (2.00 MB vs 2.81 MB). On this clip, medium at a higher CRF gave a similar score in a smaller file than veryfast at CRF 23.
- Slow bought little here. Slow at CRF 23 was 4% smaller than medium with almost the same score (95.86 vs 95.97) and took about 1.7 times as long.
- What we saw by eye. We pulled the frame at 5 seconds from the source and the CRF 33 file and cropped the printed bill on the table. The digits were still readable at CRF 33; the marble texture around it looked flatter. That is one still frame, not a viewing test.
What we decided
For our own uploads we keep medium at CRF 18 to 23, and we will not switch to veryfast at the same CRF to save time. If a smaller file matters more than the last few points, raising CRF on medium looked like the better trade on this clip than changing the preset.
Limits
- One 10-second clip with mostly calm motion. Fast motion, grain or text overlays can behave differently.
- The reference is our already-compressed export, so VMAF measures loss against that file, not against the original render.
- The default VMAF model was built for viewing 1080p video at a set distance on a larger screen, not for a phone held in hand. We did not run a viewing test with people.
- Platforms re-encode what you upload. We did not measure what YouTube, Instagram or TikTok delivered after upload.
- One encode per setting on one laptop; times will differ on other machines.
Try it yourself
Encode: ffmpeg -i source.mp4 -an -c:v libx264 -preset medium -crf 23 -pix_fmt yuv420p out.mp4. Score: ffmpeg -i out.mp4 -i source.mp4 -lavfi libvmaf -f null - (encoded file first, reference second).
Sources checked
- FFmpeg H.264 encoding guide (CRF and presets), read October 29, 2026.
- VMAF project page (what the score measures), read October 29, 2026.
Related: our earlier test on fitting an AI voiceover to an exact length.
Our product list: Label Picks shop page (may contain affiliate links).
Comments
Post a Comment