mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-25 05:14:40 +01:00
OP-4643 - refactored according to review
Function turned into single filepath input.
This commit is contained in:
parent
ffec1179ad
commit
5a562dc821
2 changed files with 57 additions and 58 deletions
|
|
@ -1047,12 +1047,12 @@ def convert_ffprobe_fps_to_float(value):
|
|||
return dividend / divisor
|
||||
|
||||
|
||||
def convert_colorspace_for_input_paths(
|
||||
input_paths,
|
||||
output_dir,
|
||||
def convert_colorspace(
|
||||
input_path,
|
||||
out_filepath,
|
||||
config_path,
|
||||
source_color_space,
|
||||
target_color_space,
|
||||
source_colorspace,
|
||||
target_colorspace,
|
||||
logger=None
|
||||
):
|
||||
"""Convert source files from one color space to another.
|
||||
|
|
@ -1063,13 +1063,13 @@ def convert_colorspace_for_input_paths(
|
|||
frame template
|
||||
|
||||
Args:
|
||||
input_paths (str): Paths that should be converted. It is expected that
|
||||
input_path (str): Paths that should be converted. It is expected that
|
||||
contains single file or image sequence of samy type.
|
||||
output_dir (str): Path to directory where output will be rendered.
|
||||
out_filepath (str): Path to directory where output will be rendered.
|
||||
Must not be same as input's directory.
|
||||
config_path (str): path to OCIO config file
|
||||
source_color_space (str): ocio valid color space of source files
|
||||
target_color_space (str): ocio valid target color space
|
||||
source_colorspace (str): ocio valid color space of source files
|
||||
target_colorspace (str): ocio valid target color space
|
||||
logger (logging.Logger): Logger used for logging.
|
||||
|
||||
"""
|
||||
|
|
@ -1083,21 +1083,18 @@ def convert_colorspace_for_input_paths(
|
|||
# Don't add any additional attributes
|
||||
"--nosoftwareattrib",
|
||||
"--colorconfig", config_path,
|
||||
"--colorconvert", source_color_space, target_color_space
|
||||
"--colorconvert", source_colorspace, target_colorspace
|
||||
]
|
||||
for input_path in input_paths:
|
||||
# Prepare subprocess arguments
|
||||
# Prepare subprocess arguments
|
||||
|
||||
oiio_cmd.extend([
|
||||
input_arg, input_path,
|
||||
])
|
||||
oiio_cmd.extend([
|
||||
input_arg, input_path,
|
||||
])
|
||||
|
||||
# Add last argument - path to output
|
||||
base_filename = os.path.basename(input_path)
|
||||
output_path = os.path.join(output_dir, base_filename)
|
||||
oiio_cmd.extend([
|
||||
"-o", output_path
|
||||
])
|
||||
# Add last argument - path to output
|
||||
oiio_cmd.extend([
|
||||
"-o", out_filepath
|
||||
])
|
||||
|
||||
logger.debug("Conversion command: {}".format(" ".join(oiio_cmd)))
|
||||
run_subprocess(oiio_cmd, logger=logger)
|
||||
logger.debug("Conversion command: {}".format(" ".join(oiio_cmd)))
|
||||
run_subprocess(oiio_cmd, logger=logger)
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ from openpype.lib import (
|
|||
)
|
||||
|
||||
from openpype.lib.transcoding import (
|
||||
convert_colorspace_for_input_paths,
|
||||
convert_colorspace,
|
||||
get_transcode_temp_directory,
|
||||
)
|
||||
|
||||
|
|
@ -69,7 +69,7 @@ class ExtractColorTranscode(publish.Extractor):
|
|||
continue
|
||||
|
||||
colorspace_data = repre["colorspaceData"]
|
||||
source_color_space = colorspace_data["colorspace"]
|
||||
source_colorspace = colorspace_data["colorspace"]
|
||||
config_path = colorspace_data.get("configData", {}).get("path")
|
||||
if not os.path.exists(config_path):
|
||||
self.log.warning("Config file doesn't exist, skipping")
|
||||
|
|
@ -80,8 +80,8 @@ class ExtractColorTranscode(publish.Extractor):
|
|||
for _, output_def in profile.get("outputs", {}).items():
|
||||
new_repre = copy.deepcopy(repre)
|
||||
|
||||
new_staging_dir = get_transcode_temp_directory()
|
||||
original_staging_dir = new_repre["stagingDir"]
|
||||
new_staging_dir = get_transcode_temp_directory()
|
||||
new_repre["stagingDir"] = new_staging_dir
|
||||
files_to_convert = new_repre["files"]
|
||||
if not isinstance(files_to_convert, list):
|
||||
|
|
@ -92,27 +92,28 @@ class ExtractColorTranscode(publish.Extractor):
|
|||
output_extension = output_def["output_extension"]
|
||||
output_extension = output_extension.replace('.', '')
|
||||
if output_extension:
|
||||
new_repre["name"] = output_extension
|
||||
if new_repre["name"] == new_repre["ext"]:
|
||||
new_repre["name"] = output_extension
|
||||
new_repre["ext"] = output_extension
|
||||
|
||||
files_to_convert = self._rename_output_files(
|
||||
files_to_convert, output_extension)
|
||||
|
||||
files_to_convert = [os.path.join(original_staging_dir, path)
|
||||
for path in files_to_convert]
|
||||
|
||||
target_colorspace = output_def["output_colorspace"]
|
||||
if not target_colorspace:
|
||||
raise RuntimeError("Target colorspace must be set")
|
||||
|
||||
convert_colorspace_for_input_paths(
|
||||
files_to_convert,
|
||||
new_staging_dir,
|
||||
config_path,
|
||||
source_color_space,
|
||||
target_colorspace,
|
||||
self.log
|
||||
)
|
||||
for file_name in files_to_convert:
|
||||
input_filepath = os.path.join(original_staging_dir,
|
||||
file_name)
|
||||
output_path = self._get_output_file_path(input_filepath,
|
||||
new_staging_dir,
|
||||
output_extension)
|
||||
convert_colorspace(
|
||||
input_filepath,
|
||||
output_path,
|
||||
config_path,
|
||||
source_colorspace,
|
||||
target_colorspace,
|
||||
self.log
|
||||
)
|
||||
|
||||
instance.context.data["cleanupFullPaths"].extend(
|
||||
files_to_delete)
|
||||
|
|
@ -130,16 +131,16 @@ class ExtractColorTranscode(publish.Extractor):
|
|||
|
||||
instance.data["representations"].append(new_repre)
|
||||
|
||||
def _rename_output_files(self, files_to_convert, output_extension):
|
||||
"""Change extension of converted files."""
|
||||
renamed_files = []
|
||||
for file_name in files_to_convert:
|
||||
file_name, _ = os.path.splitext(file_name)
|
||||
new_file_name = '{}.{}'.format(file_name,
|
||||
output_extension)
|
||||
renamed_files.append(new_file_name)
|
||||
files_to_convert = renamed_files
|
||||
return files_to_convert
|
||||
def _get_output_file_path(self, input_filepath, output_dir,
|
||||
output_extension):
|
||||
"""Create output file name path."""
|
||||
file_name = os.path.basename(input_filepath)
|
||||
file_name, input_extension = os.path.splitext(file_name)
|
||||
if not output_extension:
|
||||
output_extension = input_extension
|
||||
new_file_name = '{}.{}'.format(file_name,
|
||||
output_extension)
|
||||
return os.path.join(output_dir, new_file_name)
|
||||
|
||||
def _get_profile(self, instance):
|
||||
"""Returns profile if and how repre should be color transcoded."""
|
||||
|
|
@ -161,10 +162,10 @@ class ExtractColorTranscode(publish.Extractor):
|
|||
|
||||
if not profile:
|
||||
self.log.info((
|
||||
"Skipped instance. None of profiles in presets are for"
|
||||
" Host: \"{}\" | Families: \"{}\" | Task \"{}\""
|
||||
" | Task type \"{}\" | Subset \"{}\" "
|
||||
).format(host_name, family, task_name, task_type, subset))
|
||||
"Skipped instance. None of profiles in presets are for"
|
||||
" Host: \"{}\" | Families: \"{}\" | Task \"{}\""
|
||||
" | Task type \"{}\" | Subset \"{}\" "
|
||||
).format(host_name, family, task_name, task_type, subset))
|
||||
|
||||
self.log.debug("profile: {}".format(profile))
|
||||
return profile
|
||||
|
|
@ -181,18 +182,19 @@ class ExtractColorTranscode(publish.Extractor):
|
|||
|
||||
if repre.get("ext") not in self.supported_exts:
|
||||
self.log.debug((
|
||||
"Representation \"{}\" of unsupported extension. Skipped."
|
||||
"Representation '{}' of unsupported extension. Skipped."
|
||||
).format(repre["name"]))
|
||||
return False
|
||||
|
||||
if not repre.get("files"):
|
||||
self.log.debug((
|
||||
"Representation \"{}\" have empty files. Skipped."
|
||||
"Representation '{}' have empty files. Skipped."
|
||||
).format(repre["name"]))
|
||||
return False
|
||||
|
||||
if not repre.get("colorspaceData"):
|
||||
self.log.debug("Repre has no colorspace data. Skipped.")
|
||||
self.log.debug("Representation '{}' has no colorspace data. "
|
||||
"Skipped.")
|
||||
return False
|
||||
|
||||
return True
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue