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:
2023-11-22 10:47:47 -06:00
committed by GitHub
parent 4847338fc2
commit 525fd99a58
6 changed files with 22 additions and 9 deletions

View File

@@ -26,7 +26,7 @@ class ServerProxyManager:
@classmethod
def get_proxy_for_hostname(cls, hostname):
found_proxy = cls.server_proxys.get(hostname)
if not found_proxy:
if hostname and not found_proxy:
new_proxy = RenderServerProxy(hostname)
new_proxy.start_background_update()
cls.server_proxys[hostname] = new_proxy

View File

@@ -13,7 +13,7 @@ class BaseRenderEngine(object):
def __init__(self, custom_path=None):
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")
def renderer_path(self):

View File

@@ -72,6 +72,7 @@ class BaseRenderWorker(Base):
self.parent = parent
self.children = {}
self.name = name or os.path.basename(input_path)
self.maximum_attempts = 3
# Frame Ranges
self.project_length = -1
@@ -193,8 +194,15 @@ class BaseRenderWorker(Base):
while True:
# Log attempt #
if attempt_number:
f.write(f'\n{"=" * 80} Attempt #{attempt_number} {"=" * 30}\n\n')
logger.warning(f"Restarting render - Attempt #{attempt_number}")
if attempt_number >= self.maximum_attempts:
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
# Start process and get updates

View File

@@ -211,8 +211,8 @@ class EngineManager:
raise FileNotFoundError(f"Cannot find any installed {renderer} engines")
# Find the path to the requested engine version or use default
engine_path = None if engine_version else all_versions[0]['path']
if engine_version:
engine_path = None
if engine_version and engine_version != 'latest':
for ver in all_versions:
if ver['version'] == engine_version:
engine_path = ver['path']
@@ -225,6 +225,9 @@ class EngineManager:
raise FileNotFoundError(f"Cannot download requested version: {renderer} {engine_version}")
engine_path = download_result['path']
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:
raise FileNotFoundError(f"Cannot find requested engine version {engine_version}")

View File

@@ -17,7 +17,7 @@ class FFMPEGRenderWorker(BaseRenderWorker):
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
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(' '))
# Close with output path
cmd.append(self.output_path)
cmd.extend(['-max_muxing_queue_size', '1024', self.output_path])
return cmd
def percent_complete(self):

View File

@@ -186,6 +186,7 @@ class NewRenderJobForm(QWidget):
# Version
renderer_layout.addWidget(QLabel("Version:"))
self.renderer_version_combo = QComboBox()
self.renderer_version_combo.addItem('latest')
renderer_layout.addWidget(self.renderer_version_combo)
renderer_group_layout.addLayout(renderer_layout)
# dynamic options
@@ -248,6 +249,7 @@ class NewRenderJobForm(QWidget):
# load the version numbers
current_renderer = self.renderer_type.currentText().lower() or self.renderer_type.itemText(0)
self.renderer_version_combo.clear()
self.renderer_version_combo.addItem('latest')
self.file_format_combo.clear()
if current_renderer:
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()
job_json = {'owner': psutil.Process().username() + '@' + socket.gethostname(),
'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()},
'output_path': self.window.output_path_input.text(),
'start_frame': self.window.start_frame_input.value(),