[Bf-python] option to choose executable instead of raising error inside function

flavio soares qazav3.0 at gmail.com
Thu Oct 17 00:48:31 CEST 2013


Hi, Bastien,

I've been studying your addon and the way you set the prefs. Thanks, that's
exactly what I was looking for. =)

*Well, actually, not exactly - setting preferences was more clever than
what I had in mind, so thumbs up!


2013/10/15 flavio soares <qazav3.0 at gmail.com>

> Alright! Thanks, that's probably it! =)
>
>
> 2013/10/15 Bastien Montagne <montagne29 at wanadoo.fr>
>
>>  Eh, it’s like any file, right? Just have a look around in other addons,
>> many of them handle files…
>>
>> I would point you to official ui_translate addon, for example, but it has
>> some extra complexity you do not need… Just note that simply adding
>> "subtype='FILE_PATH'" parameter to a string prop definition will turn it
>> into a file-selector one in the UI… ;)
>>
>>
>> On 15/10/2013 19:38, flavio soares wrote:
>>
>>  Hi, Bastien,
>>
>>  Thanks for the link. I'll try to mess with it, but I think the addon
>> part is ok. The problem is really calling a window to choose the executable
>> and storing it in a variable.
>>
>>
>> 2013/10/15 Bastien Montagne <montagne29 at wanadoo.fr>
>>
>>>  Hi Flavio,
>>>
>>> Think you are looking for AddonPreferences ?
>>>
>>> http://www.blender.org/documentation/blender_python_api_2_69_1/bpy.types.AddonPreferences.html
>>>
>>> Bastien
>>>
>>>
>>> On 15/10/2013 19:03, flavio soares wrote:
>>>
>>>     Hi,
>>>
>>>  I'm doing an exporter to ardour and it runs an external ffmpeg. I'm
>>> wondering if there is a way of letting user point to a local ffmpeg
>>> executable in case it is not recognized by "which". The idea is to replace
>>> the RuntimeError with something like:
>>>
>>> with open(self.filepath) as file:
>>>             ffCommand = self.filepath
>>>
>>>  but this only works inside classes.
>>>
>>>
>>>
>>>  Relevant code is below:
>>>
>>>  this is the main class:
>>>
>>> class ExportArdour(bpy.types.Operator, ExportHelper):
>>>     """Export audio timeline (including audios from videos) to Ardour"""
>>>     bl_idname = "export.ardour"
>>>     bl_label = "Export to Ardour"
>>>     filename_ext = ".ardour"
>>>     filter_glob = StringProperty(default="*.ardour", options={'HIDDEN'})
>>>
>>>     @classmethod
>>>     def poll(cls, context):
>>>         if bpy.context.sequences:
>>>             return context.sequences is not None
>>>
>>>     def execute(self, context):
>>>         scene = bpy.context.scene
>>>         startFrame = scene.frame_start
>>>         endFrame = scene.frame_end
>>>         fps, timecode = checkFPS()
>>>
>>>         system = bpy.context.user_preferences.system
>>>         audioRate = int(system.audio_sample_rate.split("_")[1])
>>>
>>>         audiosFolderPath, ardourFile = os.path.split(self.filepath)
>>>         ardourBasename = os.path.splitext(ardourFile)[0]
>>>         audiosFolder = audiosFolderPath + os.sep + "Audios_for_" +
>>> ardourBasename
>>>
>>>         Session = createXML(startFrame, endFrame, fps, timecode,
>>> audioRate,
>>>                             ardourBasename, audiosFolder)
>>>
>>>         runFFMPEG(sources, audioRate, audiosFolder)
>>>         writeXML(self.filepath, Session)
>>>
>>>         return {'FINISHED'}
>>>
>>>
>>>  ..........that calls this function (notice the RunTime error):
>>>
>>> def runFFMPEG(sources, audioRate, outputFolder):
>>>     if which('ffmpeg') is not None:
>>>         if (os.name == "nt"):
>>>             ffCommand = ffmpegPath + os.sep + "ffmpeg.exe"
>>>         else:
>>>             ffCommand = "ffmpeg"
>>>     else:
>>>         raise RuntimeError("You don\'t seem to have FFMPEG installed on
>>> your system. \
>>>                             Please install it and re-run the Ardour
>>> exporter.")
>>>
>>>     if (os.path.exists(outputFolder) is False):
>>>         os.mkdir(outputFolder)
>>>
>>>     for source in sources:
>>>         basename, ext = os.path.splitext(source['name'])
>>>
>>>         input = source['origin']
>>>         if (input.startswith("//")):
>>>             input = input.replace("//", "")
>>>
>>>         output = outputFolder + os.sep + basename + ".wav"
>>>
>>>         # Due to spaces, the command entries (ffCommand, input and
>>> output) have
>>>         # to be read as strings by the call command, thus the escapings
>>> below
>>>         callFFMPEG = "\"%s\" -i \"%s\" -y -vn -ar %i -ac 1 \"%s\"" \
>>>                      % (ffCommand, input, audioRate, output)
>>>         call(callFFMPEG, shell=True)
>>>
>>>     return {'FINISHED'}
>>>
>>>
>>>
>>> thanks.
>>>
>>>  flavio
>>>
>>>
>>>  _______________________________________________
>>> Bf-python mailing listBf-python at blender.orghttp://lists.blender.org/mailman/listinfo/bf-python
>>>
>>>
>>> _______________________________________________
>>> Bf-python mailing list
>>> Bf-python at blender.org
>>> http://lists.blender.org/mailman/listinfo/bf-python
>>>
>>>
>>
>>
>> _______________________________________________
>> Bf-python mailing listBf-python at blender.orghttp://lists.blender.org/mailman/listinfo/bf-python
>>
>>
>> _______________________________________________
>> Bf-python mailing list
>> Bf-python at blender.org
>> http://lists.blender.org/mailman/listinfo/bf-python
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.blender.org/pipermail/bf-python/attachments/20131016/d904854c/attachment.html>


More information about the Bf-python mailing list