Fix passing sequence to oiiotool

This commit is contained in:
Roy Nieterau 2025-04-25 12:21:34 +02:00
parent 7b91c0da1e
commit ea5f1c81d6
2 changed files with 18 additions and 10 deletions

View file

@ -1011,6 +1011,7 @@ def convert_colorspace(
display=None,
additional_command_args=None,
frames=None,
frame_padding=None,
parallel_frames=False,
logger=None,
):
@ -1020,7 +1021,7 @@ def convert_colorspace(
input_path (str): Path that should be converted. It is expected that
contains single file or image sequence of same type
(sequence in format 'file.FRAMESTART-FRAMEEND#.ext', see oiio docs,
eg `big.1-3#.tif` or `big.%04d.ext` with `frames` argument)
eg `big.1-3#.tif` or `big.1-3%d.ext` with `frames` argument)
output_path (str): Path to output filename.
(must follow format of 'input_path', eg. single file or
sequence in 'file.FRAMESTART-FRAMEEND#.ext', `output.1-3#.tif`)
@ -1036,9 +1037,11 @@ def convert_colorspace(
depth for .dpx)
frames (Optional[str]): Complex frame range to process. This requires
input path and output path to use frame token placeholder like
e.g. file.%04d.exr
`#` or `%d`, e.g. file.#.exr
parallel_frames (bool): If True, process frames in parallel inside
the `oiiotool` process. Only supported in OIIO 2.5.20.0+.
frame_padding (Optional[int]): Frame padding to use for the input and
output when using a sequence filepath.
logger (logging.Logger): Logger used for logging.
Raises:
ValueError: if misconfigured
@ -1066,6 +1069,12 @@ def convert_colorspace(
oiio_cmd.extend([
"--frames", frames,
])
if frame_padding:
oiio_cmd.extend([
"--framepadding", frame_padding,
])
if parallel_frames:
oiio_cmd.extend([
"--parallel-frames"

View file

@ -162,15 +162,16 @@ class ExtractOIIOTranscode(publish.Extractor):
if isinstance(file_name, clique.Collection):
# Support sequences with holes by supplying
# dedicated `--frames` argument to `oiiotool`
# Create `filename` string like "file.%04d.exr"
file_name = file_name.format("{head}{padding}{tail}")
# Create `filename` string like "file.#.exr"
# Create `frames` string like "1001-1002,1004,1010-1012
frames: str = file_name.format("{ranges}").replace(
" ", "")
file_name = file_name.format("{head}#{tail}")
frames = file_name.format("{ranges}").replace(" ", "")
frame_padding = file_name.padding
parallel_frames = True
elif isinstance(file_name, str):
# Single file
frames = None
frame_padding = None
parallel_frames = False
else:
raise TypeError(
@ -194,6 +195,7 @@ class ExtractOIIOTranscode(publish.Extractor):
display,
additional_command_args,
frames=frames,
frame_padding=frame_padding,
parallel_frames=parallel_frames,
logger=self.log
)
@ -279,10 +281,7 @@ class ExtractOIIOTranscode(publish.Extractor):
"""Returns original individual filepaths or list of a single two-tuple
representating sequence filename with its frames.
Uses clique to find frame sequence, in this case it merges all frames
into sequence format (`%04d`) together with all its frames to support
both regular sequences and sequences with holes.
Uses clique to find frame sequence, and return the collections instead.
If sequence not detected in input filenames, it returns original list.
Args: