Version 1.2.1

Fixed some minor errors
Added more robust error handling
This commit is contained in:
seiichiro 2012-08-29 11:58:56 +02:00
parent 86eacfa9b5
commit 5ed4fb4ae6

View file

@ -48,8 +48,11 @@ def main(argv):
# CLI Argument Processing # CLI Argument Processing
try: try:
opts, args = getopt.getopt(argv, "i:o:m:v:a:t:hf", ["input=", "output=", "mpopts=", "abitrate=", "vbitrate=", "threads=", "help", "force-overwrite"]) opts, args = getopt.getopt(argv, "i:o:m:v:a:t:hf", ["input=", "output=", "mpopts=", "abitrate=", "vbitrate=", "threads=", "help", "force-overwrite"])
except getopt.GetoptError as err: except:
printi(str(err)) usage()
if (len(args) != 0):
print("Error: Unsupported Arguments found!")
usage() usage()
input = None input = None
@ -80,7 +83,7 @@ def main(argv):
# Check for needed Programs # Check for needed Programs
global mpbin global mpbin
mpbin = None mpbin = None
if not _mpbin == None and os.path.exists(_mpbin) and not os.path.isdir(_mpbin): if not _mpbin == None and os.path.isfile(_mpbin):
mpbin = _mpbin mpbin = _mpbin
else: else:
mpbin = progpath("mplayer") mpbin = progpath("mplayer")
@ -90,7 +93,7 @@ def main(argv):
global ffbin global ffbin
ffbin = None ffbin = None
if not _ffbin == None and os.path.exists(_ffbin) and not os.path.isdir(_ffbin): if not _ffbin == None and os.path.isfile(_ffbin):
ffbin = _ffbin ffbin = _ffbin
else: else:
ffbin = progpath("ffmpeg") ffbin = progpath("ffmpeg")
@ -99,7 +102,7 @@ def main(argv):
sys.exit(1) sys.exit(1)
# Check input and output files # Check input and output files
if not os.path.isfile(input): if (input == None or not os.path.isfile(input)):
print("Error: input file is not a valid File or doesn't exist") print("Error: input file is not a valid File or doesn't exist")
sys.exit(2) sys.exit(2)
@ -121,7 +124,11 @@ def calculate(input):
# Get characteristics using mplayer # Get characteristics using mplayer
cmd=[mpbin, "-ao", "null", "-vo", "null", "-frames", "0", "-identify", input] cmd=[mpbin, "-ao", "null", "-vo", "null", "-frames", "0", "-identify", input]
mp = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() try:
mp = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
except:
print("Error: Couldn't execute mplayer")
sys.exit(1)
try: try:
s = re.compile("^ID_VIDEO_ASPECT=(.*)$", re.M) s = re.compile("^ID_VIDEO_ASPECT=(.*)$", re.M)
@ -159,8 +166,12 @@ def convert(input, output, res, abitrate, vbitrate, threads, mpopts):
pid = os.getpid() pid = os.getpid()
afifo = "/tmp/stream" + str(pid) + ".wav" afifo = "/tmp/stream" + str(pid) + ".wav"
vfifo = "/tmp/stream" + str(pid) + ".yuv" vfifo = "/tmp/stream" + str(pid) + ".yuv"
os.mkfifo(afifo) try:
os.mkfifo(vfifo) os.mkfifo(afifo)
os.mkfifo(vfifo)
except:
print("Error: Couldn't create fifos!")
sys.exit(2)
# Define mplayer command for video decoding # Define mplayer command for video decoding
mpvideodec = [ mpbin, mpvideodec = [ mpbin,
@ -230,13 +241,22 @@ def convert(input, output, res, abitrate, vbitrate, threads, mpopts):
except: except:
print("Error: Starting decoding threads failed!") print("Error: Starting decoding threads failed!")
sys.exit(3) sys.exit(3)
print("Waiting for decoding threads to start...")
# Wait
sleep(2)
# Check if the decoding processes are running
if (mda.poll() != None or mdv.poll() != None):
print("Error: Starting decoding threads failed!")
sys.exit(3)
# Start ffmpeg encoding process in foreground # Start ffmpeg encoding process in foreground
try: try:
subprocess.check_call(ffmenc) subprocess.check_call(ffmenc)
except subprocess.CalledProcessError: except subprocess.CalledProcessError:
print("Error: Encoding thread failed!") print("Error: Encoding thread failed!")
sys .exit(4) sys.exit(4)
def progpath(program): def progpath(program):
@ -256,20 +276,21 @@ def cleanup():
# Cleanup # Cleanup
try: try:
if (mda != None): if (mda != None):
os.kill(mda.pid()) if (mda.returncode == None):
mda.kill()
if (mdv != None): if (mdv != None):
os.kill(mdv.pid()) if (mdv.returncode == None):
mdv.kill()
finally: finally:
if (afifo != None): if (afifo != None and os.path.exists(afifo)):
os.remove(afifo) os.remove(afifo)
if (vfifo != None): if (vfifo != None and os.path.exists(vfifo)):
os.remove(vfifo) os.remove(vfifo)
os._exit(0)
def usage(): def usage():
"""Print avaiable commandline arguments""" """Print avaiable commandline arguments"""
print("This is n900-encode.py (C) 2010 Stefan Brand <seiichiro0185 AT tol DOT ch>") print("This is n900-encode.py (C) 2012 Stefan Brand <seiichiro0185 AT seiichiro0185 DOT org>")
print("Usage:") print("Usage:")
print(" n900-encode.py --input <file> [opts]\n") print(" n900-encode.py --input <file> [opts]\n")
print("Options:") print("Options:")