diff options
author | Nathan Lovato <nathan@gdquest.com> | 2020-02-09 04:59:08 +0300 |
---|---|---|
committer | Nathan Lovato <nathan@gdquest.com> | 2020-02-13 18:19:35 +0300 |
commit | cf9fde2568aa81197d0f36019ee429880430906d (patch) | |
tree | b74875c507001fa41ca979bc689cfd4a0dee0f13 /power_sequencer/addon_preferences.py | |
parent | 47d56e88240dc330e9173c668f1ee9fee39fb36c (diff) |
power_sequencer: update to the latest master
This commit brings Power Sequencer to the current rolling version, that is
commit 9562eb58d164e234f61225250d6ac5ca858ada7b on
https://github.com/GDQuest/blender-power-sequencer/.
I had already made an intermediate commit that added new features and fixed some
bugs. This commit brings bug fixes and many quality of life improvements.
- Human-readable changelog:
https://github.com/GDQuest/blender-power-sequencer/blob/master/CHANGELOG.md
- 1.4.0 release post:
https://github.com/GDQuest/blender-power-sequencer/releases/tag/1.4.0
- All the commits since v1.3.0 (previous update + this one in this repository):
https://github.com/GDQuest/blender-power-sequencer/compare/1.3.0...master
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] |