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.
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.
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
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.