| def compress(src, fmt="png"):
|
| fmt = fmt or "png"
|
| cmd = {
|
| "bmp": [ "ffmpeg", "-i", "pipe:0", "-f", "image2", "-codec:v", "bmp", "pipe:1" ],
|
| "tga": [ "ffmpeg", "-i", "pipe:0", "-f", "image2", "-codec:v", "targa", "pipe:1" ],
|
| "png": [ "ffmpeg", "-i", "pipe:0", "-f", "image2", "-codec:v", "png", "-compression_level", "9", "-pred", "mixed", "pipe:1" ],
|
| "jpg": [ "ffmpeg", "-i", "pipe:0", "-f", "image2", "-codec:v", "mjpeg", "-global_quality", "75", "pipe:1" ]
|
| }
|
| cmd = cmd[fmt] if fmt in cmd else cmd["png"]
|
| try:
|
| proc = Popen(cmd, stdout=PIPE, stdin=PIPE, stderr=PIPE)
|
| res = proc.communicate(input = src)
|
| out = res[0] ; err = res[1] ; msg = err.decode("ascii")
|
| if proc.returncode != 0:
|
| raise Exception(f"ffmpeg: {msg}")
|
| except Exception as e:
|
| out = src
|
| print(f"Error: {str(e)}")
|
| # raise e
|
| return out
|