Thanks for the super detailed reply Larry, very interesting! It must have
taken forever to write :).

First of all I'm not complaining at all about oiiotool and I'm perfectly
happy if the python bindings can be used to speed up the results (via
multiprocessing). I just assumed it would be the other way around.

I did to the test you asked for.

1. Crop a single (8K) exr file:
    oiiotool: 1.53s
    oiiotool (with modifiers): 1.27s
    python (no multiprocessing): 1.08s

2. Crop a sequence of (8K) exr files:
    oiiotool: 26.23s
    oiiotool (with modifiers): 23.43
    python (loop over files without multiprocessing): 19.36s

So python still seems to be faster. One thing to note here is that I'm
using a very old version of oiio (2.1.9) due to the hassle of getting stuff
to work on Windows. Maybe the results come out different in newer versions.

Regarding your thoughts about improving oiiotool I'm not sure. I mean it
would be nice if oiiotool could operate in parall for sequences, but for me
personally it's totally fine to use python for such cases (as I would
imagine it would be a lot of work to get oiio to work that way).

@Daniel: Thanks for the suggestion, I'll try to do some more tests!

/Simon




-------------------------------
Simon Björk
Compositor/TD

+46 (0)70-2859503
www.bjorkvisuals.com


Den tis 9 maj 2023 kl 21:19 skrev Daniel Flehner Heen <
flehnerhee...@gmail.com>:

> HI Simon!
>
> Not certain, but you might be running into something I've experienced
> before regarding image cache size(?). However, I experienced the
> opposite where Python was slower than oiiotool due to different defaults.
> For the long explanation from Larry please search for the email with this
> subject: "Python - ImageBufAlgo.channels taking it's time (OIIO - 2.3.9.1)"
>
> Have you tried upping your cache size (in MB) with the "--cache" flag?
> Docs:
> https://openimageio.readthedocs.io/en/v2.4.11.0/oiiotool.html#cmdoption-cache
>
> On Mon, May 8, 2023 at 11:41 AM Simon Björk <bjork.si...@gmail.com> wrote:
>
>> I'm trying to crop a sequence of (8k) exr files and it seems like
>> oiiotool is quite a bit slower than using the python bindings and
>> mulitprocessing.
>>
>> Is this expected? I was under the assumption that it's always
>> better/faster to use oiiotool if possible. I've tried changing the
>> --threads argument but the results are the same. I'm on Windows.
>>
>> oiiotool path/to/src.3935-3954%06d.exr --crop 6640x5760+1000+0 --runstats -o 
>> path/to/dst.3935-3954%06d.exr
>> --------------------------------
>> Time: 59 seconds
>>
>> import sys
>> import os
>> import time
>> from multiprocessing.dummy import Pool as ThreadPool
>>
>> import OpenImageIO as oiio
>>
>> oiio.attribute("threads", 1)
>>
>> def crop(path):
>>     im = oiio.ImageBuf(path)
>>     new_im = oiio.ImageBufAlgo.crop(im, oiio.ROI(1000, 7640, 0, 5760))
>>     new_filepath = "{0}/{1}".format("D:/tmp/exr_crop", 
>> os.path.basename(path))
>>     new_im.write(new_filepath)
>>
>> dir_path = "D:/tmp/exr_src"
>> files  = ["{0}/{1}".format(dir_path, x) for x in os.listdir(dir_path)]
>>
>> st = time.time()
>>
>> pool = ThreadPool(48)
>> results = pool.map(crop, files)
>>
>> et = time.time()
>>
>> print("Total time: {0}".format(et-st))
>>
>> --------------------------------
>> Time: 6.9 seconds
>>
>>
>> /Simon
>>
>>
>>
>> -------------------------------
>> Simon Björk
>> Compositor/TD
>>
>> +46 (0)70-2859503
>> www.bjorkvisuals.com
>> _______________________________________________
>> Oiio-dev mailing list
>> Oiio-dev@lists.openimageio.org
>> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
>>
>
>
> --
> -Daniel
> _______________________________________________
> Oiio-dev mailing list
> Oiio-dev@lists.openimageio.org
> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
>
_______________________________________________
Oiio-dev mailing list
Oiio-dev@lists.openimageio.org
http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org

Reply via email to