1 # SPDX-License-Identifier: GPL-3.0-or-later
2 # Copyright 2016-2020 by Nathan Lovato, Daniel Oakey, Razvan Radulescu, and contributors
4 # This file is part of Power Sequencer.
7 Add-on preferences and interface in the Blender preferences window.
12 from bpy
.props
import BoolProperty
, StringProperty
15 def get_preferences(context
):
16 return context
.preferences
.addons
[__package__
].preferences
19 class PowerSequencerPreferences(bpy
.types
.AddonPreferences
):
20 bl_idname
= __package__
22 proxy_25
: bpy
.props
.BoolProperty(name
="25%", default
=False)
23 proxy_50
: bpy
.props
.BoolProperty(name
="50%", default
=False)
24 proxy_75
: bpy
.props
.BoolProperty(name
="75%", default
=False)
25 proxy_100
: bpy
.props
.BoolProperty(name
="100%", default
=False)
27 # Code adapted from Krzysztof TrzciĆski's work
28 ffmpeg_executable
: StringProperty(
29 name
="Path to ffmpeg executable",
31 update
=lambda self
, context
: self
.update_ffmpeg_executable(context
),
34 ffmpeg_status
: StringProperty(default
="")
35 ffmpeg_is_executable_valid
: BoolProperty(default
=False)
37 def update_ffmpeg_executable(self
, context
):
38 error_message
, info
= self
._try
_run
_ffmpeg
(self
.ffmpeg_executable
)
39 self
.ffmpeg_is_executable_valid
= error_message
== ""
40 self
.ffmpeg_status
= error_message
if error_message
!= "" else info
42 def _try_run_ffmpeg(self
, path
):
43 """Runs ffmpeg -version, and returns an error message if it failed"""
44 error_message
, info
= "", ""
46 info
: str = subprocess
.check_output([path
, "-version"]).decode("utf-8")
47 info
= info
[: info
.find("Copyright")]
49 except (OSError, subprocess
.CalledProcessError
):
50 error_message
= "Path `{}` is not a valid ffmpeg executable".format(path
)
51 return error_message
, info
53 def draw(self
, context
):
56 layout
.label(text
="Proxy")
59 row
.prop(self
, "proxy_25")
60 row
.prop(self
, "proxy_50")
61 row
.prop(self
, "proxy_75")
62 row
.prop(self
, "proxy_100")
65 "(Optional) FFMpeg executable to use for multithread renders and proxy generation. "
66 "Use this to render with a version of ffmpeg that's not on your system's PATH variable."
69 layout
.label(text
=line
)
70 layout
.prop(self
, "ffmpeg_executable")
71 icon
= "INFO" if self
.ffmpeg_is_executable_valid
else "ERROR"
72 layout
.label(text
=self
.ffmpeg_status
, icon
=icon
)
75 register_preferences
, unregister_preferences
= bpy
.utils
.register_classes_factory(
76 [PowerSequencerPreferences
]