Merge remote-tracking branch 'origin/bugfix/transcode_ignore_conversion_on_unknown_channel' into 989-ay-7315_extract-review-and-oiio-transcode-failing-to-transcode-media-blocking-publishes-2

# Conflicts:
#	client/ayon_core/lib/transcoding.py
This commit is contained in:
Roy Nieterau 2025-05-17 15:39:00 +02:00
commit 90070bc8ef
2 changed files with 42 additions and 17 deletions

View file

@ -67,6 +67,11 @@ VIDEO_EXTENSIONS = {
}
class UnknownRGBAChannelsError(ValueError):
"""Raised when we can't find RGB channels for conversion in input media."""
pass
def get_transcode_temp_directory():
"""Creates temporary folder for transcoding.
@ -1463,7 +1468,7 @@ def get_oiio_input_and_channel_args(oiio_input_info, alpha_default=None):
review_channels = get_convert_rgb_channels(channel_names)
if review_channels is None:
raise ValueError(
raise UnknownRGBAChannelsError(
"Couldn't find channels that can be used for conversion "
f"among channels: {channel_names}."
)

View file

@ -11,6 +11,7 @@ from ayon_core.lib import (
is_oiio_supported,
)
from ayon_core.lib.transcoding import (
UnknownRGBAChannelsError,
convert_colorspace,
)
@ -99,7 +100,19 @@ class ExtractOIIOTranscode(publish.Extractor):
self.log.warning("Config file doesn't exist, skipping")
continue
# Get representation files to convert
if isinstance(repre["files"], list):
repre_files_to_convert = copy.deepcopy(repre["files"])
else:
repre_files_to_convert = [repre["files"]]
repre_files_to_convert = self._translate_to_sequence(
repre_files_to_convert)
# Process each output definition
for output_def in profile_output_defs:
# Local copy to avoid accidental mutable changes
files_to_convert = list(repre_files_to_convert)
output_name = output_def["name"]
new_repre = copy.deepcopy(repre)
@ -110,11 +123,6 @@ class ExtractOIIOTranscode(publish.Extractor):
)
new_repre["stagingDir"] = new_staging_dir
if isinstance(new_repre["files"], list):
files_to_convert = copy.deepcopy(new_repre["files"])
else:
files_to_convert = [new_repre["files"]]
output_extension = output_def["extension"]
output_extension = output_extension.replace('.', '')
self._rename_in_representation(new_repre,
@ -158,6 +166,7 @@ class ExtractOIIOTranscode(publish.Extractor):
files_to_convert = self._translate_to_sequence(
files_to_convert)
self.log.debug("Files to convert: {}".format(files_to_convert))
unknown_rgba_channels = False
for file_name in files_to_convert:
self.log.debug("Transcoding file: `{}`".format(file_name))
input_path = os.path.join(original_staging_dir,
@ -165,18 +174,29 @@ class ExtractOIIOTranscode(publish.Extractor):
output_path = self._get_output_file_path(input_path,
new_staging_dir,
output_extension)
try:
convert_colorspace(
input_path,
output_path,
config_path,
source_colorspace,
target_colorspace,
view,
display,
additional_command_args,
self.log
)
except UnknownRGBAChannelsError:
unknown_rgba_channels = True
self.log.error(
"Skipping OIIO Transcode. Unknown RGBA channels"
f" for colorspace conversion in file: {input_path}"
)
break
convert_colorspace(
input_path,
output_path,
config_path,
source_colorspace,
target_colorspace,
view,
display,
additional_command_args,
self.log
)
if unknown_rgba_channels:
# Stop processing this representation
break
# cleanup temporary transcoded files
for file_name in new_repre["files"]: