I'm back. So after doing some more research and refinement I've improved my VP9 image creation script, I've reduced the length by using multiple lines and it turns out the constant quality CRF thing works on images too. Full color range is now used and most importantly BT 601 is used instead of BT 709 which caused the wrong colors to be displayed. If you have any ideas on how we could improve it, I'd love to hear it.
for %%f in (*.png) do (
ffmpeg -framerate 1 -stream_loop 1 -i "%%f" -pix_fmt yuv420p -color_range full -y temp.y4m
ffmpeg -color_range full -colorspace bt470bg -color_primaries unknown -color_trc unknown ^
-i temp.y4m -c:v libvpx-vp9 -quality best -cpu-used -1 -crf 40 -b:v 0 -pix_fmt yuv420p "%%~nf.webm"
)
Furthermore I'm going to do an actual quality comparison this time. There's like a billion different quality metrics but I settled with PSNR-HMA since it's fast and generally accurate. Deciding what subjective quality level to test wasn't easy since as expected JPG was slaughtered in low and medium quality and given how I chose to start using VP9 for higher quality images I see no point in doing tests of quality settings I'll probably never use so only high quality will be tested. Normally any PSNR scores around 40dB are good but to give JPG a fighting chance I'll go above that.
PS I'll be redoing previous image encodes with this script since the old ones have playback/color problems.
https://pypi.org/project/psnr-hvsm/#description