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]
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