mirror of
https://github.com/blw1138/Zordon.git
synced 2025-12-17 08:48:13 +00:00
Ffmpeg versioning issues (#68)
* FFMPEG version cleanup * Make sure attempts don't go on forever * Use latest version when version not defined. Add latest to UI
This commit is contained in:
@@ -26,7 +26,7 @@ class ServerProxyManager:
|
|||||||
@classmethod
|
@classmethod
|
||||||
def get_proxy_for_hostname(cls, hostname):
|
def get_proxy_for_hostname(cls, hostname):
|
||||||
found_proxy = cls.server_proxys.get(hostname)
|
found_proxy = cls.server_proxys.get(hostname)
|
||||||
if not found_proxy:
|
if hostname and not found_proxy:
|
||||||
new_proxy = RenderServerProxy(hostname)
|
new_proxy = RenderServerProxy(hostname)
|
||||||
new_proxy.start_background_update()
|
new_proxy.start_background_update()
|
||||||
cls.server_proxys[hostname] = new_proxy
|
cls.server_proxys[hostname] = new_proxy
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ class BaseRenderEngine(object):
|
|||||||
|
|
||||||
def __init__(self, custom_path=None):
|
def __init__(self, custom_path=None):
|
||||||
self.custom_renderer_path = custom_path
|
self.custom_renderer_path = custom_path
|
||||||
if not self.renderer_path():
|
if not self.renderer_path() or not os.path.exists(self.renderer_path()):
|
||||||
raise FileNotFoundError(f"Cannot find path to renderer for {self.name()} instance")
|
raise FileNotFoundError(f"Cannot find path to renderer for {self.name()} instance")
|
||||||
|
|
||||||
def renderer_path(self):
|
def renderer_path(self):
|
||||||
|
|||||||
@@ -72,6 +72,7 @@ class BaseRenderWorker(Base):
|
|||||||
self.parent = parent
|
self.parent = parent
|
||||||
self.children = {}
|
self.children = {}
|
||||||
self.name = name or os.path.basename(input_path)
|
self.name = name or os.path.basename(input_path)
|
||||||
|
self.maximum_attempts = 3
|
||||||
|
|
||||||
# Frame Ranges
|
# Frame Ranges
|
||||||
self.project_length = -1
|
self.project_length = -1
|
||||||
@@ -193,8 +194,15 @@ class BaseRenderWorker(Base):
|
|||||||
while True:
|
while True:
|
||||||
# Log attempt #
|
# Log attempt #
|
||||||
if attempt_number:
|
if attempt_number:
|
||||||
f.write(f'\n{"=" * 80} Attempt #{attempt_number} {"=" * 30}\n\n')
|
if attempt_number >= self.maximum_attempts:
|
||||||
logger.warning(f"Restarting render - Attempt #{attempt_number}")
|
err_msg = f"Maximum attempts exceeded ({attempt_number})"
|
||||||
|
logger.error(err_msg)
|
||||||
|
self.status = RenderStatus.ERROR
|
||||||
|
self.errors.append(err_msg)
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
f.write(f'\n{"=" * 80} Attempt #{attempt_number} {"=" * 30}\n\n')
|
||||||
|
logger.warning(f"Restarting render - Attempt #{attempt_number}")
|
||||||
attempt_number += 1
|
attempt_number += 1
|
||||||
|
|
||||||
# Start process and get updates
|
# Start process and get updates
|
||||||
|
|||||||
@@ -211,8 +211,8 @@ class EngineManager:
|
|||||||
raise FileNotFoundError(f"Cannot find any installed {renderer} engines")
|
raise FileNotFoundError(f"Cannot find any installed {renderer} engines")
|
||||||
|
|
||||||
# Find the path to the requested engine version or use default
|
# Find the path to the requested engine version or use default
|
||||||
engine_path = None if engine_version else all_versions[0]['path']
|
engine_path = None
|
||||||
if engine_version:
|
if engine_version and engine_version != 'latest':
|
||||||
for ver in all_versions:
|
for ver in all_versions:
|
||||||
if ver['version'] == engine_version:
|
if ver['version'] == engine_version:
|
||||||
engine_path = ver['path']
|
engine_path = ver['path']
|
||||||
@@ -225,6 +225,9 @@ class EngineManager:
|
|||||||
raise FileNotFoundError(f"Cannot download requested version: {renderer} {engine_version}")
|
raise FileNotFoundError(f"Cannot download requested version: {renderer} {engine_version}")
|
||||||
engine_path = download_result['path']
|
engine_path = download_result['path']
|
||||||
logger.info("Engine downloaded. Creating worker.")
|
logger.info("Engine downloaded. Creating worker.")
|
||||||
|
else:
|
||||||
|
logger.debug(f"Using latest engine version ({all_versions[0]['version']})")
|
||||||
|
engine_path = all_versions[0]['path']
|
||||||
|
|
||||||
if not engine_path:
|
if not engine_path:
|
||||||
raise FileNotFoundError(f"Cannot find requested engine version {engine_version}")
|
raise FileNotFoundError(f"Cannot find requested engine version {engine_version}")
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ class FFMPEGRenderWorker(BaseRenderWorker):
|
|||||||
|
|
||||||
def generate_worker_subprocess(self):
|
def generate_worker_subprocess(self):
|
||||||
|
|
||||||
cmd = [self.engine.default_renderer_path(), '-y', '-stats', '-i', self.input_path]
|
cmd = [self.renderer_path, '-y', '-stats', '-i', self.input_path]
|
||||||
|
|
||||||
# Resize frame
|
# Resize frame
|
||||||
if self.args.get('x_resolution', None) and self.args.get('y_resolution', None):
|
if self.args.get('x_resolution', None) and self.args.get('y_resolution', None):
|
||||||
@@ -29,7 +29,7 @@ class FFMPEGRenderWorker(BaseRenderWorker):
|
|||||||
cmd.extend(raw_args.split(' '))
|
cmd.extend(raw_args.split(' '))
|
||||||
|
|
||||||
# Close with output path
|
# Close with output path
|
||||||
cmd.append(self.output_path)
|
cmd.extend(['-max_muxing_queue_size', '1024', self.output_path])
|
||||||
return cmd
|
return cmd
|
||||||
|
|
||||||
def percent_complete(self):
|
def percent_complete(self):
|
||||||
|
|||||||
@@ -186,6 +186,7 @@ class NewRenderJobForm(QWidget):
|
|||||||
# Version
|
# Version
|
||||||
renderer_layout.addWidget(QLabel("Version:"))
|
renderer_layout.addWidget(QLabel("Version:"))
|
||||||
self.renderer_version_combo = QComboBox()
|
self.renderer_version_combo = QComboBox()
|
||||||
|
self.renderer_version_combo.addItem('latest')
|
||||||
renderer_layout.addWidget(self.renderer_version_combo)
|
renderer_layout.addWidget(self.renderer_version_combo)
|
||||||
renderer_group_layout.addLayout(renderer_layout)
|
renderer_group_layout.addLayout(renderer_layout)
|
||||||
# dynamic options
|
# dynamic options
|
||||||
@@ -248,6 +249,7 @@ class NewRenderJobForm(QWidget):
|
|||||||
# load the version numbers
|
# load the version numbers
|
||||||
current_renderer = self.renderer_type.currentText().lower() or self.renderer_type.itemText(0)
|
current_renderer = self.renderer_type.currentText().lower() or self.renderer_type.itemText(0)
|
||||||
self.renderer_version_combo.clear()
|
self.renderer_version_combo.clear()
|
||||||
|
self.renderer_version_combo.addItem('latest')
|
||||||
self.file_format_combo.clear()
|
self.file_format_combo.clear()
|
||||||
if current_renderer:
|
if current_renderer:
|
||||||
renderer_vers = [version_info['version'] for version_info in self.renderer_info[current_renderer]['versions']]
|
renderer_vers = [version_info['version'] for version_info in self.renderer_info[current_renderer]['versions']]
|
||||||
@@ -442,7 +444,7 @@ class SubmitWorker(QThread):
|
|||||||
hostname = self.window.server_input.currentText()
|
hostname = self.window.server_input.currentText()
|
||||||
job_json = {'owner': psutil.Process().username() + '@' + socket.gethostname(),
|
job_json = {'owner': psutil.Process().username() + '@' + socket.gethostname(),
|
||||||
'renderer': self.window.renderer_type.currentText().lower(),
|
'renderer': self.window.renderer_type.currentText().lower(),
|
||||||
'renderer_version': self.window.renderer_version_combo.currentText(),
|
'engine_version': self.window.renderer_version_combo.currentText(),
|
||||||
'args': {'raw': self.window.raw_args.text()},
|
'args': {'raw': self.window.raw_args.text()},
|
||||||
'output_path': self.window.output_path_input.text(),
|
'output_path': self.window.output_path_input.text(),
|
||||||
'start_frame': self.window.start_frame_input.value(),
|
'start_frame': self.window.start_frame_input.value(),
|
||||||
|
|||||||
Reference in New Issue
Block a user