-1

I did a python script that managed to unshuffle a shuffled (png) image according to a specific pattern, that python script uses ffmpeg and does 12 encodes to unshuffling it (by cropping a specific part and pasting it over the existing picture). As such the same file is re-encoded into a new file each time, which shouldn't be a problem since i am doing png conversion (lossless, right?), but i still lose quality on it.

Here are the pictures:

Notice the loss of quality on the "ONE PUNCH MAN" text. The rest of the picture is, seemingly, literally identical. So the problem seems to be with the colors.

Here are the ffmpeg commands i ran to get to the output:

ffmpeg -loglevel panic -y -i "output/001.png" -i "001.png" -qscale:v 2 -filter_complex "[0:v]crop=200:280:200:0[t];[0:v][t]overlay=0:280" "output/001.png"
ffmpeg -loglevel panic -y -i "output/001.png" -i "001.png" -qscale:v 2 -filter_complex "[0:v]crop=200:280:400:0[t];[0:v][t]overlay=0:560" "output/001.png"
ffmpeg -loglevel panic -y -i "output/001.png" -i "001.png" -qscale:v 2 -filter_complex "[0:v]crop=200:280:600:0[t];[0:v][t]overlay=0:840" "output/001.png"
ffmpeg -loglevel panic -y -i "output/001.png" -i "001.png" -qscale:v 2 -filter_complex "[1:v]crop=200:280:0:280[t];[0:v][t]overlay=200:0" "output/001.png"
ffmpeg -loglevel panic -y -i "output/001.png" -i "001.png" -qscale:v 2 -filter_complex "[0:v]crop=200:280:400:280[t];[0:v][t]overlay=200:560" "output/001.png"
ffmpeg -loglevel panic -y -i "output/001.png" -i "001.png" -qscale:v 2 -filter_complex "[0:v]crop=200:280:600:280[t];[0:v][t]overlay=200:840" "output/001.png"
ffmpeg -loglevel panic -y -i "output/001.png" -i "001.png" -qscale:v 2 -filter_complex "[1:v]crop=200:280:0:560[t];[0:v][t]overlay=400:0" "output/001.png"
ffmpeg -loglevel panic -y -i "output/001.png" -i "001.png" -qscale:v 2 -filter_complex "[1:v]crop=200:280:200:560[t];[0:v][t]overlay=400:280" "output/001.png"
ffmpeg -loglevel panic -y -i "output/001.png" -i "001.png" -qscale:v 2 -filter_complex "[0:v]crop=200:280:600:560[t];[0:v][t]overlay=400:840" "output/001.png"
ffmpeg -loglevel panic -y -i "output/001.png" -i "001.png" -qscale:v 2 -filter_complex "[1:v]crop=200:280:0:840[t];[0:v][t]overlay=600:0" "output/001.png"
ffmpeg -loglevel panic -y -i "output/001.png" -i "001.png" -qscale:v 2 -filter_complex "[1:v]crop=200:280:200:840[t];[0:v][t]overlay=600:280" "output/001.png"
ffmpeg -loglevel panic -y -i "output/001.png" -i "001.png" -qscale:v 2 -filter_complex "[1:v]crop=200:280:400:840[t];[0:v][t]overlay=600:560" "output/001.png"

Anyone got any idea why is there this quality loss? Strangely enough, there is no quality loss when i do it in an entirely different way (crop each square into an individual file, then each of them are put into a 1x2 vstack with the next one, then each of the resulting 1x2 files are vstacked with a second file to make a 1x4 file, then each of those are hstacked to make a 2x4 file, and finally we hstack the two resulting file for the resulting 4x4 output), even though there is more than double the amount of encodes.

kilo
  • 1
  • 1
  • 2
    You shouldn't be writing output to an opened input file. Since it's a single image, you're getting away with it. – Gyan Apr 14 '18 at 06:16
  • @kilo `-qscale:v 2` is unnecessary and ignored for PNG output. – llogan Apr 14 '18 at 17:48

1 Answers1

0

Try overlay=0:280:format=auto

Thank you, that worked, the output looks exactly like the input now.

kilo
  • 1
  • 1