Worker improvements

This commit is contained in:
Brett Williams
2022-10-23 18:07:25 -07:00
parent 8bf064520b
commit b2a6d0e79e
4 changed files with 79 additions and 48 deletions

View File

@@ -33,10 +33,11 @@ class BaseRenderWorker(object):
render_engine = None
supported_extensions = []
install_paths = []
supported_export_formats = []
@staticmethod
def version():
return 'Unknown'
@classmethod
def version(cls):
raise NotImplementedError("Unknown version")
def __init__(self, input_path, output_path, args=None, ignore_extensions=True):
@@ -78,12 +79,13 @@ class BaseRenderWorker(object):
self.is_finished = False
self.last_output = None
def renderer_path(self):
@classmethod
def renderer_path(cls):
path = None
try:
path = subprocess.check_output(['which', self.render_engine]).decode('utf-8').strip()
path = subprocess.check_output(['which', cls.render_engine]).decode('utf-8').strip()
except Exception as e:
for p in self.install_paths:
for p in cls.install_paths:
if os.path.exists(p):
path = p
# if not path:
@@ -91,7 +93,7 @@ class BaseRenderWorker(object):
return path
def _generate_subprocess(self):
return []
raise NotImplementedError("_generate_subprocess not implemented")
def start(self):
@@ -142,6 +144,7 @@ class BaseRenderWorker(object):
f.write("{3} - Starting {0} {1} Render for {2}\n".format(self.renderer, self.version(), self.input,
self.start_time.isoformat()))
f.write(f"Running command: {' '.join(subprocess_cmds)}\n")
for c in io.TextIOWrapper(self.process.stdout, encoding="utf-8"): # or another encoding
f.write(c)
logger.debug(f"{self.renderer}Worker: {c.strip()}")
@@ -198,7 +201,7 @@ class BaseRenderWorker(object):
return 0
def _parse_stdout(self, line):
pass
raise NotImplementedError("_parse_stdout not implemented")
def elapsed_time(self):
elapsed = ""
@@ -214,25 +217,30 @@ class RenderWorkerFactory:
@staticmethod
def create_worker(renderer, input_path, output_path, args=None):
worker_class = RenderWorkerFactory.class_for_name(renderer)
return worker_class(input_path=input_path, output_path=output_path, args=args)
@staticmethod
def supported_renderers():
return ['aerender', 'blender', 'ffmpeg']
@staticmethod
def class_for_name(name):
from utilities.blender_worker import BlenderRenderWorker
from utilities.aerender_worker import AERenderWorker
from utilities.ffmpeg_worker import FFMPEGRenderWorker
if "blender" == renderer.lower():
worker = BlenderRenderWorker(input_path, output_path, args=args)
elif "aerender" == renderer.lower() or "after effects" == renderer.lower():
worker = AERenderWorker(input_path, output_path, args=args)
elif "ffmpeg" == renderer.lower():
worker = FFMPEGRenderWorker(input_path, output_path, args=args)
else:
raise ValueError(f"Cannot find renderer for type '{renderer}'")
name = name.lower()
return worker
if "blender" == name:
return BlenderRenderWorker
elif "aerender" == name:
return AERenderWorker
elif "ffmpeg" == name:
return FFMPEGRenderWorker
@staticmethod
def supported_renderers():
return ['aerender', 'blender', 'ffmpeg']
raise LookupError(f'Cannot find class for name: {name}')
def timecode_to_frames(timecode, frame_rate):