Skip to content
New issue

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

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

Already on GitHub? # 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)
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant