mirror of
https://github.com/blw1138/Zordon.git
synced 2025-12-17 16:58:12 +00:00
Cleanup extension matching
This commit is contained in:
@@ -10,7 +10,6 @@ logger = logging.getLogger()
|
|||||||
class Blender(BaseRenderEngine):
|
class Blender(BaseRenderEngine):
|
||||||
|
|
||||||
install_paths = ['/Applications/Blender.app/Contents/MacOS/Blender']
|
install_paths = ['/Applications/Blender.app/Contents/MacOS/Blender']
|
||||||
supported_extensions = ['.blend']
|
|
||||||
binary_names = {'linux': 'blender', 'windows': 'blender.exe', 'macos': 'Blender'}
|
binary_names = {'linux': 'blender', 'windows': 'blender.exe', 'macos': 'Blender'}
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@@ -23,6 +22,10 @@ class Blender(BaseRenderEngine):
|
|||||||
from src.engines.blender.blender_worker import BlenderRenderWorker
|
from src.engines.blender.blender_worker import BlenderRenderWorker
|
||||||
return BlenderRenderWorker
|
return BlenderRenderWorker
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def supported_extensions():
|
||||||
|
return ['blend']
|
||||||
|
|
||||||
def version(self):
|
def version(self):
|
||||||
version = None
|
version = None
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -244,10 +244,11 @@ class EngineManager:
|
|||||||
@classmethod
|
@classmethod
|
||||||
def engine_for_project_path(cls, path):
|
def engine_for_project_path(cls, path):
|
||||||
name, extension = os.path.splitext(path)
|
name, extension = os.path.splitext(path)
|
||||||
|
extension = extension.strip('.')
|
||||||
for engine in cls.supported_engines():
|
for engine in cls.supported_engines():
|
||||||
if extension in engine.supported_extensions:
|
if extension in engine.supported_extensions():
|
||||||
return engine
|
return engine
|
||||||
undefined_renderer_support = [x for x in cls.supported_engines() if not x.supported_extensions]
|
undefined_renderer_support = [x for x in cls.supported_engines() if not x.supported_extensions()]
|
||||||
return undefined_renderer_support[0]
|
return undefined_renderer_support[0]
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,16 @@ class FFMPEG(BaseRenderEngine):
|
|||||||
from src.engines.ffmpeg.ffmpeg_worker import FFMPEGRenderWorker
|
from src.engines.ffmpeg.ffmpeg_worker import FFMPEGRenderWorker
|
||||||
return FFMPEGRenderWorker
|
return FFMPEGRenderWorker
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def supported_extensions(cls):
|
||||||
|
help_text = (subprocess.check_output([cls().renderer_path(), '-h', 'full'], stderr=subprocess.STDOUT)
|
||||||
|
.decode('utf-8'))
|
||||||
|
found = re.findall('extensions that .* is allowed to access \(default "(.*)"', help_text)
|
||||||
|
found_extensions = set()
|
||||||
|
for match in found:
|
||||||
|
found_extensions.update(match.split(','))
|
||||||
|
return list(found_extensions)
|
||||||
|
|
||||||
def version(self):
|
def version(self):
|
||||||
version = None
|
version = None
|
||||||
try:
|
try:
|
||||||
@@ -31,15 +41,11 @@ class FFMPEG(BaseRenderEngine):
|
|||||||
return version
|
return version
|
||||||
|
|
||||||
def get_project_info(self, project_path, timeout=10):
|
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:
|
try:
|
||||||
# Run ffprobe and parse the output as JSON
|
# Run ffprobe and parse the output as JSON
|
||||||
cmd = [
|
cmd = [
|
||||||
'ffprobe', '-v', 'quiet', '-print_format', 'json',
|
'ffprobe', '-v', 'quiet', '-print_format', 'json',
|
||||||
'-show_streams', '-select_streams', 'v', video_path
|
'-show_streams', '-select_streams', 'v', project_path
|
||||||
]
|
]
|
||||||
result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
|
result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
|
||||||
video_info = json.loads(result.stdout)
|
video_info = json.loads(result.stdout)
|
||||||
@@ -85,7 +91,7 @@ class FFMPEG(BaseRenderEngine):
|
|||||||
try:
|
try:
|
||||||
formats_raw = subprocess.check_output([self.renderer_path(), '-formats'], stderr=subprocess.DEVNULL,
|
formats_raw = subprocess.check_output([self.renderer_path(), '-formats'], stderr=subprocess.DEVNULL,
|
||||||
timeout=SUBPROCESS_TIMEOUT).decode('utf-8')
|
timeout=SUBPROCESS_TIMEOUT).decode('utf-8')
|
||||||
pattern = '(?P<type>[DE]{1,2})\s+(?P<id>\S{2,})\s+(?P<name>.*)\r'
|
pattern = '(?P<type>[DE]{1,2})\s+(?P<id>\S{2,})\s+(?P<name>.*)'
|
||||||
all_formats = [m.groupdict() for m in re.finditer(pattern, formats_raw)]
|
all_formats = [m.groupdict() for m in re.finditer(pattern, formats_raw)]
|
||||||
return all_formats
|
return all_formats
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@@ -105,7 +111,7 @@ class FFMPEG(BaseRenderEngine):
|
|||||||
return found_extensions
|
return found_extensions
|
||||||
|
|
||||||
def get_output_formats(self):
|
def get_output_formats(self):
|
||||||
return [x for x in self.get_all_formats() if 'E' in x['type'].upper()]
|
return [x['id'] for x in self.get_all_formats() if 'E' in x['type'].upper()]
|
||||||
|
|
||||||
def get_frame_count(self, path_to_file):
|
def get_frame_count(self, path_to_file):
|
||||||
raw_stdout = subprocess.check_output([self.renderer_path(), '-i', path_to_file, '-map', '0:v:0', '-c', 'copy',
|
raw_stdout = subprocess.check_output([self.renderer_path(), '-i', path_to_file, '-map', '0:v:0', '-c', 'copy',
|
||||||
@@ -117,7 +123,8 @@ class FFMPEG(BaseRenderEngine):
|
|||||||
return frame_number
|
return frame_number
|
||||||
|
|
||||||
def get_arguments(self):
|
def get_arguments(self):
|
||||||
help_text = subprocess.check_output([self.renderer_path(), '-h', 'long'], stderr=subprocess.STDOUT).decode('utf-8')
|
help_text = (subprocess.check_output([self.renderer_path(), '-h', 'long'], stderr=subprocess.STDOUT)
|
||||||
|
.decode('utf-8'))
|
||||||
lines = help_text.splitlines()
|
lines = help_text.splitlines()
|
||||||
|
|
||||||
options = {}
|
options = {}
|
||||||
|
|||||||
Reference in New Issue
Block a user