# x264 Quality

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;

}```

#### PSNR

Using the doom9 forum post as a reference, the equation is:

`(new - old) / 0.05 = % improvement`