This is an old revision of the document!
x264 Quality
- Meaning of PSNR and SSIM scores - doom9, source of formula by Dark Shikari
Use SSIM or PSNR to gauge differences between encoding settings.
SSIM
When comparing two values, here is the formula to discern what percentage amount something has improved.
First of all, let's look at a two-pass encode of a file:
x264 -o movie.264 --ssim --tune ssim --profile high --level 3.1 --bitrate 1024 --preset medium --keyint 30 --pass 1 movie.y4m x264 -o movie.264 --ssim --tune ssim --profile high --level 3.1 --bitrate 1024 --preset medium --keyint 30 --pass 2 movie.y4m
Find this value in the output, and use the Y variable.
x264 [info]: SSIM Mean Y:0.9613678 (14.131db)
Run the same tests, against a 2048k bitrate instead of a 1024k one:
x264 -o movie.264 --ssim --tune ssim --profile high --level 3.1 --bitrate 1024 --preset medium --keyint 30 --pass 1 movie.y4m x264 -o movie.264 --ssim --tune ssim --profile high --level 3.1 --bitrate 1024 --preset medium --keyint 30 --pass 2 movie.y4m
With separate SSIM output:
x264 [info]: SSIM Mean Y:0.9751283 (16.043db)
Here's the formula:
(((1 - old) / (1 - new)) - 1) * 100
Here's a simpler visualization:
1 - 0.9613678 = 0.0386322 1 - 0.9751283 = 0.0248717 0.0386322 / 0.0248717 = 1.55325932686547361057 1.55325932686547361057 - 1 = 0.55325932686547361057 0.55325932686547361057 * 100 = 55.325932686547361057
Rounding it out to an integer, would be 55, for a result of 55%. So when encoding this particular video at double the bitrate, the SSIM increases by 55%. Not bad!
Here's a PHP function to do the same thing:
function ssim_improvement($old_ssim, $new_ssim) { $a = 1 - $old_ssim; $b = 1 - $new_ssim; $c = $a / $b; $d = $c - 1; $e = $d * 100; return $e; }