Blender image sequences now generate a preview mp4 on completion

This commit is contained in:
Brett Williams
2023-05-30 21:59:04 -05:00
parent 22cfe9c24e
commit 60eeb6d5e2
9 changed files with 64 additions and 34 deletions

View File

@@ -22,9 +22,10 @@ class AERenderWorker(BaseRenderWorker):
supported_extensions = ['.aep']
engine = AERender
def __init__(self, input_path, output_path, args=None):
super(AERenderWorker, self).__init__(input_path=input_path, output_path=output_path, ignore_extensions=False,
args=args)
def __init__(self, input_path, output_path, priority=2, args=None, owner=None,
client=None, name=None):
super(AERenderWorker, self).__init__(input_path=input_path, output_path=output_path, args=args,
client=client, priority=priority, owner=owner, name=name)
self.comp = args.get('comp', None)
self.render_settings = args.get('render_settings', None)

View File

@@ -8,9 +8,13 @@ import json
from datetime import datetime
from enum import Enum
from sqlalchemy import Column, Integer, String, DateTime, JSON, event
from sqlalchemy.ext.declarative import declarative_base
import psutil
logger = logging.getLogger()
Base = declarative_base()
class RenderStatus(Enum):
@@ -30,11 +34,25 @@ def string_to_status(string):
return RenderStatus.ERROR
class BaseRenderWorker(object):
class BaseRenderWorker(Base):
__tablename__ = 'render_workers'
id = Column(Integer, primary_key=True)
input_path = Column(String)
output_path = Column(String)
date_created = Column(DateTime)
renderer = Column(String)
renderer_version = Column(String)
priority = Column(Integer)
owner = Column(String)
client = Column(String)
name = Column(String)
file_hash = Column(String)
engine = None
def __init__(self, input_path, output_path, args=None, ignore_extensions=True):
def __init__(self, input_path, output_path, priority=2, args=None, ignore_extensions=True, owner=None, client=None,
name=None):
if not ignore_extensions:
if not any(ext in input_path for ext in self.engine.supported_extensions):
@@ -49,7 +67,12 @@ class BaseRenderWorker(object):
self.output_path = output_path
self.args = args or {}
self.date_created = datetime.now()
self.renderer = self.engine.name()
self.renderer_version = self.engine.version()
self.priority = priority
self.owner = owner
self.client = client
self.name = name
# Frame Ranges
self.total_frames = 0

View File

@@ -13,9 +13,10 @@ class BlenderRenderWorker(BaseRenderWorker):
engine = Blender
def __init__(self, input_path, output_path, args=None):
super(BlenderRenderWorker, self).__init__(input_path=input_path, output_path=output_path,
ignore_extensions=False, args=args)
def __init__(self, input_path, output_path, priority=2, args=None, owner=None,
client=None, name=None):
super(BlenderRenderWorker, self).__init__(input_path=input_path, output_path=output_path, args=args,
client=client, priority=priority, owner=owner, name=name)
# Args
self.blender_engine = self.args.get('engine', 'BLENDER_EEVEE').upper()

View File

@@ -8,9 +8,10 @@ class FFMPEGRenderWorker(BaseRenderWorker):
engine = FFMPEG
def __init__(self, input_path, output_path, args=None):
super(FFMPEGRenderWorker, self).__init__(input_path=input_path, output_path=output_path, ignore_extensions=True,
args=args)
def __init__(self, input_path, output_path, priority=2, args=None, owner=None,
client=None, name=None):
super(FFMPEGRenderWorker, self).__init__(input_path=input_path, output_path=output_path, args=args,
client=client, priority=priority, owner=owner, name=name)
stream_info = subprocess.check_output([self.engine.renderer_path(), "-i", # https://stackoverflow.com/a/61604105
input_path, "-map", "0:v:0", "-c", "copy", "-f", "null", "-y",

View File

@@ -10,9 +10,11 @@ class RenderWorkerFactory:
return classes
@staticmethod
def create_worker(renderer, input_path, output_path, args=None):
def create_worker(renderer, input_path, output_path, priority=2, args=None, owner=None,
client=None, name=None):
worker_class = RenderWorkerFactory.class_for_name(renderer)
return worker_class(input_path=input_path, output_path=output_path, args=args)
return worker_class(input_path=input_path, output_path=output_path, args=args, priority=priority, owner=owner,
client=client, name=name)
@staticmethod
def supported_renderers():