Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Frame on Frame RAM Increase Using PyBindings for 3.1.0 Converting EXR To Uncompressed PNG #4613

Open
julianjohnson2691 opened this issue Jan 31, 2025 · 0 comments

Comments

@julianjohnson2691
Copy link

I'm using the Python Bindings for 3.1.0 with Python 3.10.6 on Windows and getting increasing RAM usage with the script below which converts exrs to pngs - about 1Gb for every frame processed. For context, the original .exr is circa 20k x 2k so is pretty large. This doesn't seem to be a problem for oiiotool.exe (3.1.0) which does the same process perfectly with no increase in RAM usage frame by frame. It's also not a problem if I convert from .exr to .tiff so it does seem to be specific to png. Obvious answer is to switch from png to tiff which I will do but felt I should at least make a record of this here.

import OpenImageIO as oiio

def convert_exr_to_png(exr_file, png_file):
    # Open the EXR file
    input_image = oiio.ImageInput.open(exr_file)
    if not input_image:
        print("Error opening EXR file:", oiio.geterror())
        return

    # Read the image data
    spec = input_image.spec()
    pixels = input_image.read_image()
    input_image.close()

    # Create the output PNG file
    output_image = oiio.ImageOutput.create(png_file)
    if not output_image:
        print("Error creating PNG file:", oiio.geterror())
        return

    # Set the compression level to 0 (no compression)
    spec.attribute("png:compressionLevel", 0)
    spec.attribute("png:filter", 8)
    #spec.attribute("oiio:ColorSpace", "sRGB")

    # Open the output PNG file
    output_image.open(png_file, spec)
    
    # Write the image data to the PNG file
    output_image.write_image(pixels)
    
    # Close the output image
    output_image.close()
    pixels = None
    print(f"Successfully converted {exr_file} to {png_file} with no compression.")

for x in range(1, 2701):
    frame = str(x).zfill(4)
    exr = f"//flabby/jobs/client_62185/build/virtual_set/comps/openimage/stitchhalfres/stitch_v021.{frame}.exr"
    png = f"//flabby/jobs/client_62185/build/virtual_set/comps/openimage/stitchdebug/stitchcspace_v021.{frame}.png"
    convert_exr_to_png(exr, png)
    print("Processed Frame: ", x)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant