this formula estimates the perceptual quality of digital video files by considering key properties that affect viewer experience. each factor in the formula scales in a specific way with changes in the underlying video file properties. below is a summarized description of how each factor influences the overall quality score.
the score is suitable for estimating quality in contexts where detailed subjective testing is impractical. furthermore, it can aid in decision-making for video encoding settings, streaming quality selection, or benchmarking.
get_quality_score = (width, height, framerate, bitdepth, bitrate, codec) ->
codec_efficiencies =
av1: 1.5
h264: 1.0
h266: 2.0
hevc: 1.7
vp8: 0.9
vp9: 1.3
codec_factor = 1.0 / (codec_efficiencies[codec] or 0.8)
resolution = width * height
optimal_bitrate = resolution * bitdepth * framerate * codec_factor
bitrate_factor = 2.0 / (1 + Math.exp(-0.001 * (bitrate - optimal_bitrate)))
resolution_factor = Math.log2(resolution / (1920 * 1080) + 1)
framerate_factor = Math.log2(framerate / 30.0 + 1)
bitdepth_factor = Math.log2((bitdepth - 6.0) / 2.0)
score = 0.4 * resolution_factor + 0.3 * framerate_factor + 0.2 * bitdepth_factor + 0.1 * bitrate_factor
Math.max 0, Math.round(score * 10 - 1)640x480 30 8 9000000 h264 -> 3 640x480 30 8 25000000 h264 -> 3 640x480 30 8 75000000 h264 -> 5 640x480 30 8 100000000 h264 -> 5 640x480 30 8 200000000 h264 -> 5 640x480 30 8 9000000 av1 -> 3 640x480 30 8 25000000 av1 -> 3 640x480 30 8 75000000 av1 -> 5 640x480 30 8 100000000 av1 -> 5 640x480 30 8 200000000 av1 -> 5 640x480 30 10 9000000 h264 -> 5 640x480 30 10 25000000 h264 -> 5 640x480 30 10 75000000 h264 -> 5 640x480 30 10 100000000 h264 -> 7 640x480 30 10 200000000 h264 -> 7 640x480 30 10 9000000 av1 -> 5 640x480 30 10 25000000 av1 -> 5 640x480 30 10 75000000 av1 -> 7 640x480 30 10 100000000 av1 -> 7 640x480 30 10 200000000 av1 -> 7 640x480 60 8 9000000 h264 -> 5 640x480 60 8 25000000 h264 -> 5 640x480 60 8 75000000 h264 -> 5 640x480 60 8 100000000 h264 -> 5 640x480 60 8 200000000 h264 -> 7 640x480 60 8 9000000 av1 -> 5 640x480 60 8 25000000 av1 -> 5 640x480 60 8 75000000 av1 -> 5 640x480 60 8 100000000 av1 -> 7 640x480 60 8 200000000 av1 -> 7 640x480 60 10 9000000 h264 -> 7 640x480 60 10 25000000 h264 -> 7 640x480 60 10 75000000 h264 -> 7 640x480 60 10 100000000 h264 -> 7 640x480 60 10 200000000 h264 -> 9 640x480 60 10 9000000 av1 -> 7 640x480 60 10 25000000 av1 -> 7 640x480 60 10 75000000 av1 -> 7 640x480 60 10 100000000 av1 -> 7 640x480 60 10 200000000 av1 -> 9 640x480 120 8 9000000 h264 -> 7 640x480 120 8 25000000 h264 -> 7 640x480 120 8 75000000 h264 -> 7 640x480 120 8 100000000 h264 -> 7 640x480 120 8 200000000 h264 -> 7 640x480 120 8 9000000 av1 -> 7 640x480 120 8 25000000 av1 -> 7 640x480 120 8 75000000 av1 -> 7 640x480 120 8 100000000 av1 -> 7 640x480 120 8 200000000 av1 -> 9 640x480 120 10 9000000 h264 -> 9 640x480 120 10 25000000 h264 -> 9 640x480 120 10 75000000 h264 -> 9 640x480 120 10 100000000 h264 -> 9 640x480 120 10 200000000 h264 -> 9 640x480 120 10 9000000 av1 -> 9 640x480 120 10 25000000 av1 -> 9 640x480 120 10 75000000 av1 -> 9 640x480 120 10 100000000 av1 -> 9 640x480 120 10 200000000 av1 -> 9
1920x1080 30 8 9000000 h264 -> 6 1920x1080 30 8 25000000 h264 -> 6 1920x1080 30 8 75000000 h264 -> 6 1920x1080 30 8 100000000 h264 -> 6 1920x1080 30 8 200000000 h264 -> 6 1920x1080 30 8 9000000 av1 -> 6 1920x1080 30 8 25000000 av1 -> 6 1920x1080 30 8 75000000 av1 -> 6 1920x1080 30 8 100000000 av1 -> 6 1920x1080 30 8 200000000 av1 -> 6 1920x1080 30 10 9000000 h264 -> 8 1920x1080 30 10 25000000 h264 -> 8 1920x1080 30 10 75000000 h264 -> 8 1920x1080 30 10 100000000 h264 -> 8 1920x1080 30 10 200000000 h264 -> 8 1920x1080 30 10 9000000 av1 -> 8 1920x1080 30 10 25000000 av1 -> 8 1920x1080 30 10 75000000 av1 -> 8 1920x1080 30 10 100000000 av1 -> 8 1920x1080 30 10 200000000 av1 -> 8 1920x1080 60 8 9000000 h264 -> 8 1920x1080 60 8 25000000 h264 -> 8 1920x1080 60 8 75000000 h264 -> 8 1920x1080 60 8 100000000 h264 -> 8 1920x1080 60 8 200000000 h264 -> 8 1920x1080 60 8 9000000 av1 -> 8 1920x1080 60 8 25000000 av1 -> 8 1920x1080 60 8 75000000 av1 -> 8 1920x1080 60 8 100000000 av1 -> 8 1920x1080 60 8 200000000 av1 -> 8 1920x1080 60 10 9000000 h264 -> 10 1920x1080 60 10 25000000 h264 -> 10 1920x1080 60 10 75000000 h264 -> 10 1920x1080 60 10 100000000 h264 -> 10 1920x1080 60 10 200000000 h264 -> 10 1920x1080 60 10 9000000 av1 -> 10 1920x1080 60 10 25000000 av1 -> 10 1920x1080 60 10 75000000 av1 -> 10 1920x1080 60 10 100000000 av1 -> 10 1920x1080 60 10 200000000 av1 -> 10 1920x1080 120 8 9000000 h264 -> 10 1920x1080 120 8 25000000 h264 -> 10 1920x1080 120 8 75000000 h264 -> 10 1920x1080 120 8 100000000 h264 -> 10 1920x1080 120 8 200000000 h264 -> 10 1920x1080 120 8 9000000 av1 -> 10 1920x1080 120 8 25000000 av1 -> 10 1920x1080 120 8 75000000 av1 -> 10 1920x1080 120 8 100000000 av1 -> 10 1920x1080 120 8 200000000 av1 -> 10 1920x1080 120 10 9000000 h264 -> 12 1920x1080 120 10 25000000 h264 -> 12 1920x1080 120 10 75000000 h264 -> 12 1920x1080 120 10 100000000 h264 -> 12 1920x1080 120 10 200000000 h264 -> 12 1920x1080 120 10 9000000 av1 -> 12 1920x1080 120 10 25000000 av1 -> 12 1920x1080 120 10 75000000 av1 -> 12 1920x1080 120 10 100000000 av1 -> 12 1920x1080 120 10 200000000 av1 -> 12
3840x2160 30 8 9000000 h264 -> 11 3840x2160 30 8 25000000 h264 -> 11 3840x2160 30 8 75000000 h264 -> 11 3840x2160 30 8 100000000 h264 -> 11 3840x2160 30 8 200000000 h264 -> 11 3840x2160 30 8 9000000 av1 -> 11 3840x2160 30 8 25000000 av1 -> 11 3840x2160 30 8 75000000 av1 -> 11 3840x2160 30 8 100000000 av1 -> 11 3840x2160 30 8 200000000 av1 -> 11 3840x2160 30 10 9000000 h264 -> 13 3840x2160 30 10 25000000 h264 -> 13 3840x2160 30 10 75000000 h264 -> 13 3840x2160 30 10 100000000 h264 -> 13 3840x2160 30 10 200000000 h264 -> 13 3840x2160 30 10 9000000 av1 -> 13 3840x2160 30 10 25000000 av1 -> 13 3840x2160 30 10 75000000 av1 -> 13 3840x2160 30 10 100000000 av1 -> 13 3840x2160 30 10 200000000 av1 -> 13 3840x2160 60 8 9000000 h264 -> 13 3840x2160 60 8 25000000 h264 -> 13 3840x2160 60 8 75000000 h264 -> 13 3840x2160 60 8 100000000 h264 -> 13 3840x2160 60 8 200000000 h264 -> 13 3840x2160 60 8 9000000 av1 -> 13 3840x2160 60 8 25000000 av1 -> 13 3840x2160 60 8 75000000 av1 -> 13 3840x2160 60 8 100000000 av1 -> 13 3840x2160 60 8 200000000 av1 -> 13 3840x2160 60 10 9000000 h264 -> 15 3840x2160 60 10 25000000 h264 -> 15 3840x2160 60 10 75000000 h264 -> 15 3840x2160 60 10 100000000 h264 -> 15 3840x2160 60 10 200000000 h264 -> 15 3840x2160 60 10 9000000 av1 -> 15 3840x2160 60 10 25000000 av1 -> 15 3840x2160 60 10 75000000 av1 -> 15 3840x2160 60 10 100000000 av1 -> 15 3840x2160 60 10 200000000 av1 -> 15 3840x2160 120 8 9000000 h264 -> 15 3840x2160 120 8 25000000 h264 -> 15 3840x2160 120 8 75000000 h264 -> 15 3840x2160 120 8 100000000 h264 -> 15 3840x2160 120 8 200000000 h264 -> 15 3840x2160 120 8 9000000 av1 -> 15 3840x2160 120 8 25000000 av1 -> 15 3840x2160 120 8 75000000 av1 -> 15 3840x2160 120 8 100000000 av1 -> 15 3840x2160 120 8 200000000 av1 -> 15 3840x2160 120 10 9000000 h264 -> 17 3840x2160 120 10 25000000 h264 -> 17 3840x2160 120 10 75000000 h264 -> 17 3840x2160 120 10 100000000 h264 -> 17 3840x2160 120 10 200000000 h264 -> 17 3840x2160 120 10 9000000 av1 -> 17 3840x2160 120 10 25000000 av1 -> 17 3840x2160 120 10 75000000 av1 -> 17 3840x2160 120 10 100000000 av1 -> 17 3840x2160 120 10 200000000 av1 -> 17
7680x4320 30 8 9000000 h264 -> 18 7680x4320 30 8 25000000 h264 -> 18 7680x4320 30 8 75000000 h264 -> 18 7680x4320 30 8 100000000 h264 -> 18 7680x4320 30 8 200000000 h264 -> 18 7680x4320 30 8 9000000 av1 -> 18 7680x4320 30 8 25000000 av1 -> 18 7680x4320 30 8 75000000 av1 -> 18 7680x4320 30 8 100000000 av1 -> 18 7680x4320 30 8 200000000 av1 -> 18 7680x4320 30 10 9000000 h264 -> 20 7680x4320 30 10 25000000 h264 -> 20 7680x4320 30 10 75000000 h264 -> 20 7680x4320 30 10 100000000 h264 -> 20 7680x4320 30 10 200000000 h264 -> 20 7680x4320 30 10 9000000 av1 -> 20 7680x4320 30 10 25000000 av1 -> 20 7680x4320 30 10 75000000 av1 -> 20 7680x4320 30 10 100000000 av1 -> 20 7680x4320 30 10 200000000 av1 -> 20 7680x4320 60 8 9000000 h264 -> 20 7680x4320 60 8 25000000 h264 -> 20 7680x4320 60 8 75000000 h264 -> 20 7680x4320 60 8 100000000 h264 -> 20 7680x4320 60 8 200000000 h264 -> 20 7680x4320 60 8 9000000 av1 -> 20 7680x4320 60 8 25000000 av1 -> 20 7680x4320 60 8 75000000 av1 -> 20 7680x4320 60 8 100000000 av1 -> 20 7680x4320 60 8 200000000 av1 -> 20 7680x4320 60 10 9000000 h264 -> 22 7680x4320 60 10 25000000 h264 -> 22 7680x4320 60 10 75000000 h264 -> 22 7680x4320 60 10 100000000 h264 -> 22 7680x4320 60 10 200000000 h264 -> 22 7680x4320 60 10 9000000 av1 -> 22 7680x4320 60 10 25000000 av1 -> 22 7680x4320 60 10 75000000 av1 -> 22 7680x4320 60 10 100000000 av1 -> 22 7680x4320 60 10 200000000 av1 -> 22 7680x4320 120 8 9000000 h264 -> 22 7680x4320 120 8 25000000 h264 -> 22 7680x4320 120 8 75000000 h264 -> 22 7680x4320 120 8 100000000 h264 -> 22 7680x4320 120 8 200000000 h264 -> 22 7680x4320 120 8 9000000 av1 -> 22 7680x4320 120 8 25000000 av1 -> 22 7680x4320 120 8 75000000 av1 -> 22 7680x4320 120 8 100000000 av1 -> 22 7680x4320 120 8 200000000 av1 -> 22 7680x4320 120 10 9000000 h264 -> 24 7680x4320 120 10 25000000 h264 -> 24 7680x4320 120 10 75000000 h264 -> 24 7680x4320 120 10 100000000 h264 -> 24 7680x4320 120 10 200000000 h264 -> 24 7680x4320 120 10 9000000 av1 -> 24 7680x4320 120 10 25000000 av1 -> 24 7680x4320 120 10 75000000 av1 -> 24 7680x4320 120 10 100000000 av1 -> 24 7680x4320 120 10 200000000 av1 -> 24