mirror of
https://github.com/blw1138/Zordon.git
synced 2025-12-17 16:58:12 +00:00
Wait for subjob completion and download render files to host (#17)
* Fix Blender image sequence -> video conversion and change video to use ProRes * Wait for child jobs to complete * Download and extract render files from subjobs * Fix issue where zip was not removed * Update client to use new method names in server proxy * Fix minor download issue
This commit is contained in:
@@ -1,12 +1,10 @@
|
||||
#!/usr/bin/env python3
|
||||
import json
|
||||
import re
|
||||
try:
|
||||
from .base_worker import *
|
||||
except ImportError:
|
||||
from base_worker import *
|
||||
from collections import Counter
|
||||
|
||||
from ..engines.blender_engine import Blender
|
||||
from lib.engines.blender_engine import Blender
|
||||
from lib.utilities.ffmpeg_helper import image_sequence_to_video
|
||||
from lib.workers.base_worker import *
|
||||
|
||||
|
||||
class BlenderRenderWorker(BaseRenderWorker):
|
||||
@@ -42,9 +40,7 @@ class BlenderRenderWorker(BaseRenderWorker):
|
||||
if self.camera:
|
||||
cmd.extend(['--python-expr', f"import bpy;bpy.context.scene.camera = bpy.data.objects['{self.camera}'];"])
|
||||
|
||||
# add dash at end of given path to separate frame numbers
|
||||
path_with_ending_dash = os.path.splitext(self.output_path)[0] + "-" + os.path.splitext(self.output_path)[1]
|
||||
cmd.extend(['-E', self.blender_engine, '-o', path_with_ending_dash, '-F', self.export_format])
|
||||
cmd.extend(['-E', self.blender_engine, '-o', self.output_path, '-F', self.export_format])
|
||||
|
||||
# set frame range
|
||||
cmd.extend(['-s', self.start_frame, '-e', self.end_frame, '-a'])
|
||||
@@ -117,19 +113,20 @@ class BlenderRenderWorker(BaseRenderWorker):
|
||||
return max(total_percent, 0)
|
||||
|
||||
def post_processing(self):
|
||||
output_dir = os.listdir(os.path.dirname(self.output_path))
|
||||
if self.total_frames > 1 and len(output_dir) > 1:
|
||||
from ..utilities.ffmpeg_helper import image_sequence_to_video
|
||||
|
||||
def most_common_extension(file_paths):
|
||||
extensions = [os.path.splitext(path)[1] for path in file_paths]
|
||||
counter = Counter(extensions)
|
||||
most_common_ext, _ = counter.most_common(1)[0]
|
||||
return most_common_ext
|
||||
|
||||
output_dir_files = os.listdir(os.path.dirname(self.output_path))
|
||||
if self.total_frames > 1 and len(output_dir_files) > 1:
|
||||
logger.info("Generating preview for image sequence")
|
||||
|
||||
# get proper file extension
|
||||
path_with_ending_dash = os.path.splitext(self.output_path)[0] + "-"
|
||||
found_output = next(obj for obj in output_dir if os.path.basename(path_with_ending_dash) in obj)
|
||||
glob_pattern = path_with_ending_dash + '%04d' + ('.' + found_output.split('.')[-1] if found_output else "")
|
||||
|
||||
try:
|
||||
image_sequence_to_video(source_glob_pattern=glob_pattern,
|
||||
output_path=self.output_path + '.mp4',
|
||||
pattern = self.output_path + "%04d" + most_common_extension(output_dir_files)
|
||||
image_sequence_to_video(source_glob_pattern=pattern,
|
||||
output_path=self.output_path + '.mov',
|
||||
framerate=self.scene_info['fps'])
|
||||
logger.info('Successfully generated preview video from image sequence')
|
||||
except Exception as e:
|
||||
|
||||
Reference in New Issue
Block a user