[Bf-python] option to choose executable instead of raising error inside function
flavio soares
qazav3.0 at gmail.com
Tue Oct 15 19:03:19 CEST 2013
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.blender.org/pipermail/bf-python/attachments/20131015/5cb0deb9/attachment.html>
More information about the Bf-python
mailing list