[Libav-user] ffmpeg -- averaging of psnr and ssim

siriannalisa siriannalisa at gmail.com
Fri May 13 22:53:17 CEST 2016


Hi,

While playing around with the psnr/ssim calculations in ffmpeg I
noticed that the average presented
is different from what I would expect.

The columns below are the psnr-values calculated by my own tool,
ffmpeg and tiny_ssim.c
(sorry for the formatting but gmail screws up the alignment, see
http://pastebin.com/B6BkwcVA)

Y-component

ycbcr.py        ffmpeg  tiny_ssim
26.194             26.19   26.194
25.950652       25.95   25.951
25.73425         25.73   25.734
26.296376       26.3    26.296
26.298215       26.3    26.298
26.324584       26.32   26.325
26.671997       26.67   26.672
26.365405       26.37   26.365
26.250325       26.25   26.25
26.915763       26.92   26.916
26.747261       26.75   26.747
26.774038       26.77   26.774
27.126952       27.13   27.127
27.597209       27.6    27.597
27.794023       27.79   27.794
28.070067       28.07   28.07
27.949201       27.95   27.949
27.996252       28       27.996
28.066139       28.07   28.066
28.084215       28.08   28.084
27.970032       27.97   27.97
27.958326       27.96   27.958
28.030713       28.03   28.031
28.190591       28.19   28.191
28.079677       28.08   28.08
28.285431       28.29   28.285
28.113496       28.11   28.113
28.342119       28.34   28.342
28.502148       28.5    28.502
28.268838       28.27   28.269
28.391678       28.39   28.392
28.417471       28.42   28.417

My calculated average:

28.417471    28.42    28.417

As you can see the psnr-values for each frame are the same and the
average for the
data above is the same.

However when I run ffmpeg, using (the data in the pastebin and the
ffmpeg-column above comes from the stats_{psnr,ssim}.log files created
below)

ffmpeg -s 1920x1080 -i F1.yuv  -s 1920x1080  -i F2.yuv   -lavfi
"ssim="stats_file=stats_ssim.log";[0:v]1:v]"psnr="stats_psnr.log"
-f null -

I get this:
[Parsed_ssim_0 @ 0x373bdc0] SSIM Y:0.836733 (7.871019) U:0.929458
(11.515509) V:0.953007 (13.279697) All:0.871566 (8.913210)
[Parsed_psnr_1 @ 0x373c960] PSNR y:27.339519 u:37.820406 v:40.238118
average:28.916038 min:27.338981 max:30.077372

tiny_ssim.c:
Total 32 frames | PSNR Y:27.340  U:37.820  V:40.238  All:28.950 | SSIM
Y:0.83673 U:0.92946 V:0.95301 All:0.87157 (8.91322)

Here ffmpeg/tiny_ssim reports the average for the Y-component as
~27.34. This I don't get.
The same behavior is seen for the ssim calculations. The average I get
by taking the value for each frame is not the same as reported by
ffmpeg/tiny_ssim.

Have I misunderstood something about how the averaging in ffmpeg is
done and what is the correct way of getting the average?

cheers
/Fredrik


More information about the Libav-user mailing list