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 <[email protected] <mailto:[email protected]>>

    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 <http://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 list
    [email protected]  <mailto:[email protected]>
    http://lists.blender.org/mailman/listinfo/bf-python

    _______________________________________________
    Bf-python mailing list
    [email protected] <mailto:[email protected]>
    http://lists.blender.org/mailman/listinfo/bf-python




_______________________________________________
Bf-python mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-python
_______________________________________________
Bf-python mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-python

Reply via email to