Compression Quality Test

Finding the optimal bitrate: 720p @ 2000 kbps recommendation

⚠️

Video Players May Not Work

Video files are not included in this repository (files >50MB cannot be pushed to GitHub). The video players will only work on local machines where the test videos have been generated.
To generate test videos locally: Run ./test-double-compress.sh and ./test-bitrate-floor.sh

Quality Metrics (vs Original 1080p Source)

Excellent: VMAF 93+ / PSNR 38+
Good: VMAF 80-93 / PSNR 35-38
Fair: VMAF 70-80 / PSNR 33-35
Poor: VMAF 60-70 / PSNR 30-33
Bad: VMAF <60 / PSNR <30
PSNR (Peak Signal-to-Noise Ratio): Measures pixel-level fidelity between original and compressed video. Higher values = less distortion. Fast to compute but doesn't model human perception well.
VMAF (Video Multi-Method Assessment Fusion): Netflix's perceptual quality metric that predicts how humans perceive video quality. More realistic than PSNR for real-world quality assessment.

Goal: Find Optimal Bitrate for Video Streaming

The Question

What bitrate cap gives us acceptable quality while minimizing file size and bandwidth?

The Method

Test various bitrates at 720p resolution and measure quality using VMAF (perceptual) and PSNR (pixel-level) metrics.

The Answer

720p @ 2000 kbps - VMAF 71.50 (Fair quality), 7.2 MB per 30s video, ~240 KB/s bandwidth.

Compression Strategy: Client uploads at 720p. Server conditionally re-encodes only when needed (bitrate too high, wrong codec, missing faststart). This avoids unnecessary double compression.

720p: Single vs Double Compression

PSNR measured against original 1080p source. Double compression loses ~0.7 dB.

Original 1080p (Reference)

Resolution1920x1080
Bitrate4,190 kbps
File Size15.0 MB
PSNRReference

Single 720p (CRF 23)

Bitrate3,011 kbps
File Size10.8 MB
PSNR vs Source34.99 dB (Fair)

Double 720p (CRF 23 x2)

Bitrate2,634 kbps
File Size9.4 MB
PSNR vs Source34.25 dB (Fair)
PSNR Loss-0.74 dB

480p: Single vs Double Compression

Resolution downscale contributes more to quality loss than double compression.

Original 1080p (Reference)

Resolution1920x1080
Bitrate4,190 kbps
PSNRReference

Single 480p

Bitrate1,596 kbps
File Size5.7 MB
PSNR vs Source32.09 dB (Poor)

Double 480p

Bitrate1,307 kbps
File Size4.7 MB
PSNR vs Source31.40 dB (Poor)
PSNR Loss-0.70 dB

360p: Single vs Double Compression

Original 1080p (Reference)

Resolution1920x1080
Bitrate4,190 kbps
PSNRReference

Single 360p

Bitrate1,003 kbps
File Size3.6 MB
PSNR vs Source30.64 dB (Poor)

Double 360p

Bitrate877 kbps
File Size3.1 MB
PSNR vs Source30.17 dB (Poor)
PSNR Loss-0.47 dB

320p: Single vs Double Compression

At 320p, quality is primarily limited by resolution, not compression method.

Original 1080p (Reference)

Resolution1920x1080
Bitrate4,190 kbps
PSNRReference

Single 320p

Bitrate958 kbps
File Size3.4 MB
PSNR vs Source30.09 dB (Poor)

Double 320p

Bitrate716 kbps
File Size2.6 MB
PSNR vs Source29.71 dB (Bad)
PSNR Loss-0.38 dB

240p: Single vs Double Compression

Original 1080p (Reference)

Resolution1920x1080
Bitrate4,190 kbps
PSNRReference

Single 240p

Bitrate566 kbps
File Size2.0 MB
PSNR vs Source29.05 dB (Bad)

Double 240p

Bitrate453 kbps
File Size1.6 MB
PSNR vs Source28.76 dB (Bad)
PSNR Loss-0.29 dB

VMAF Perceptual Quality Results (Human Perception)

VMAF (Video Multi-Method Assessment Fusion) - Netflix's perceptual quality metric that predicts how humans perceive video quality. More realistic than PSNR.
Test Bitrate VMAF Quality Note
720p Single (baseline) 3,004 kbps 78.26 Fair Best possible
720p Double (CRF) 2,628 kbps 73.55 Fair -4.7 from single
720p @ 2500k 2,618 kbps 73.49 Fair Same as CRF
720p @ 2000k ⭐ 2,219 kbps 71.50 Fair Best perceptual
720p @ 1500k 1,667 kbps 67.98 Poor Mobile acceptable
720p @ 1000k 1,111 kbps 61.72 Poor TikTok level
720p @ 800k 887 kbps 57.43 Bad Below acceptable
PSNR vs VMAF Comparison:
• PSNR said 1500k = "Good" (35 dB) but VMAF says "Poor" (68)
• VMAF is stricter because it models human perception
• For perceptual "Fair" quality (VMAF 70+), use 2000 kbps

720p Bitrate Cap Recommendation

Updated Recommendation: 2000 kbps - Based on VMAF perceptual quality for "Fair" grade (VMAF 70+).
Bitrate Cap PSNR VMAF Quality File Size (30s) Use Case
No cap (CRF 23) 34.25 dB 73.55 Fair 9.4 MB Maximum quality
2000 kbps ⭐ 36.22 dB 71.50 Fair (VMAF 70+) 7.2 MB Recommended
1500 kbps 35.25 dB 67.98 Poor (VMAF) 5.4 MB Size priority
1000 kbps 33.89 dB 61.72 Poor 3.5 MB TikTok parity
800 kbps 33.13 dB 57.43 Bad 2.8 MB Not recommended
⭐ RECOMMENDED
2000 kbps
VMAF 71.50 (Fair)
Size Priority
1500 kbps
VMAF 67.98 (Poor)
TikTok Level
1000 kbps
VMAF 61.72 (Poor)
Why 2000 kbps?
• VMAF 71.50 = "Fair" perceptual quality (mobile/social media level)
• PSNR 36.22 dB = "Good" pixel-level fidelity
• 23% smaller than no-cap CRF 23 (7.2 MB vs 9.4 MB for 30s)
• ~240 KB/s bandwidth requirement

Bitrate Floor Test (720p Double Compressed)

All videos: 1080p source → 720p client compress → backend bitrate-capped + faststart

2000 kbps

PSNR36.22 dB
Size7.2 MB

1500 kbps

PSNR35.25 dB
Size5.4 MB

1000 kbps (TikTok)

PSNR33.89 dB
Size3.5 MB

800 kbps (Min TikTok)

PSNR33.13 dB
Size2.8 MB

600 kbps

PSNR32.16 dB
Size2.0 MB

300 kbps

PSNR29.98 dB
Size1.0 MB

Summary: Absolute Quality vs Original 1080p

Resolution Type Bitrate Size (30s) PSNR vs Source Grade
1080pOriginal4,190 kbps15.0 MBReference-
720pSingle3,011 kbps10.8 MB34.99 dBFair
720pDouble2,634 kbps9.4 MB34.25 dBFair
480pSingle1,596 kbps5.7 MB32.09 dBPoor
480pDouble1,307 kbps4.7 MB31.40 dBPoor
360pSingle1,003 kbps3.6 MB30.64 dBPoor
360pDouble877 kbps3.1 MB30.17 dBPoor
320pSingle958 kbps3.4 MB30.09 dBPoor
320pDouble716 kbps2.6 MB29.71 dBBad
240pSingle566 kbps2.0 MB29.05 dBBad
240pDouble453 kbps1.6 MB28.76 dBBad
Key Finding: Double compression adds only ~0.5-0.7 dB loss on top of resolution downscaling. The major quality loss comes from resolution reduction, not the double compression itself.