diff options
Diffstat (limited to 'power_sequencer/addon_preferences.py')
-rw-r--r-- | power_sequencer/addon_preferences.py | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/power_sequencer/addon_preferences.py b/power_sequencer/addon_preferences.py index 0e8e7d71..fcc67e9c 100644 --- a/power_sequencer/addon_preferences.py +++ b/power_sequencer/addon_preferences.py @@ -17,12 +17,16 @@ """ Add-on preferences and interface in the Blender preferences window. """ +import subprocess + import bpy +from bpy.props import BoolProperty, StringProperty def get_preferences(context): return context.preferences.addons[__package__].preferences + class PowerSequencerPreferences(bpy.types.AddonPreferences): bl_idname = __package__ @@ -31,6 +35,32 @@ class PowerSequencerPreferences(bpy.types.AddonPreferences): proxy_75: bpy.props.BoolProperty(name="75%", default=False) proxy_100: bpy.props.BoolProperty(name="100%", default=False) + # Code adapted from Krzysztof TrzciĆski's work + ffmpeg_executable: StringProperty( + name="Path to ffmpeg executable", + default="", + update=lambda self, context: self.update_ffmpeg_executable(context), + subtype="FILE_PATH", + ) + ffmpeg_status: StringProperty(default="") + ffmpeg_is_executable_valid: BoolProperty(default=False) + + def update_ffmpeg_executable(self, context): + error_message, info = self._try_run_ffmpeg(self.ffmpeg_executable) + self.ffmpeg_is_executable_valid = error_message == "" + self.ffmpeg_status = error_message if error_message != "" else info + + def _try_run_ffmpeg(self, path): + """Runs ffmpeg -version, and returns an error message if it failed""" + error_message, info = "", "" + try: + info: str = subprocess.check_output([path, "-version"]).decode("utf-8") + info = info[:info.find("Copyright")] + print(info) + except (OSError, subprocess.CalledProcessError): + error_message = "Path `{}` is not a valid ffmpeg executable".format(path) + return error_message, info + def draw(self, context): layout = self.layout @@ -42,6 +72,16 @@ class PowerSequencerPreferences(bpy.types.AddonPreferences): row.prop(self, "proxy_75") row.prop(self, "proxy_100") + text = [ + "(Optional) FFMpeg executable to use for multithread renders and proxy generation. " + "Use this to render with a version of ffmpeg that's not on your system's PATH variable." + ] + for line in text: + layout.label(text=line) + layout.prop(self, "ffmpeg_executable") + icon = "INFO" if self.ffmpeg_is_executable_valid else "ERROR" + layout.label(text=self.ffmpeg_status, icon=icon) + register_preferences, unregister_preferences = bpy.utils.register_classes_factory( [PowerSequencerPreferences] |