mirror of
https://github.com/blw1138/Zordon.git
synced 2025-12-17 16:58:12 +00:00
Add job polish (#63)
* Remove legacy client * Misc cleanup * Add message box after submission success / fail * Use a new is_localhost method to handle localhost not including '.local' * Code cleanup * Fix issue where engine browser would think we're downloading forever * Add message box after submission success / fail * Use a new is_localhost method to handle localhost not including '.local' * Code cleanup * Fix issue where engine browser would think we're downloading forever * Add pubsub messages to serverproxy_manager.py * Add resolution, fps and renderer versions to add_job.py * Add cameras to add_job.py * Add message box after submission success / fail * Use a new is_localhost method to handle localhost not including '.local' * Code cleanup * Fix issue where engine browser would think we're downloading forever * Add message box after submission success / fail * Code cleanup * Add cameras to add_job.py * Add dynamic engine options and output format * Move UI work out of BG threads and add engine presubmission tasks * Submit dynamic args when creating a new job * Hide groups and show messagebox after submission * Choose file when pressing New Job in main window now
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import json
|
||||
import re
|
||||
|
||||
from src.engines.core.base_engine import *
|
||||
@@ -29,6 +30,46 @@ class FFMPEG(BaseRenderEngine):
|
||||
logger.error("Failed to get FFMPEG version: {}".format(e))
|
||||
return version
|
||||
|
||||
def get_project_info(self, project_path, timeout=10):
|
||||
return self.get_video_info_ffprobe(project_path)
|
||||
|
||||
@staticmethod
|
||||
def get_video_info_ffprobe(video_path):
|
||||
try:
|
||||
# Run ffprobe and parse the output as JSON
|
||||
cmd = [
|
||||
'ffprobe', '-v', 'quiet', '-print_format', 'json',
|
||||
'-show_streams', '-select_streams', 'v', video_path
|
||||
]
|
||||
result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
|
||||
video_info = json.loads(result.stdout)
|
||||
|
||||
# Extract the necessary information
|
||||
video_stream = video_info['streams'][0]
|
||||
frame_rate = eval(video_stream['r_frame_rate'])
|
||||
duration = float(video_stream['duration'])
|
||||
width = video_stream['width']
|
||||
height = video_stream['height']
|
||||
|
||||
# Calculate total frames (end frame)
|
||||
total_frames = int(duration * frame_rate)
|
||||
end_frame = total_frames - 1
|
||||
|
||||
# The start frame is typically 0
|
||||
start_frame = 0
|
||||
|
||||
return {
|
||||
'frame_start': start_frame,
|
||||
'frame_end': end_frame,
|
||||
'fps': frame_rate,
|
||||
'resolution_x': width,
|
||||
'resolution_y': height
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
print(f"An error occurred: {e}")
|
||||
return None
|
||||
|
||||
def get_encoders(self):
|
||||
raw_stdout = subprocess.check_output([self.renderer_path(), '-encoders'], stderr=subprocess.DEVNULL,
|
||||
timeout=SUBPROCESS_TIMEOUT).decode('utf-8')
|
||||
|
||||
Reference in New Issue
Block a user