From 5ed4fb4ae66f82b57cd46d1ee51471772f062b2b Mon Sep 17 00:00:00 2001 From: Stefan Brand Date: Wed, 29 Aug 2012 11:58:56 +0200 Subject: [PATCH 1/2] Version 1.2.1 Fixed some minor errors Added more robust error handling --- n900-encode.py | 53 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 37 insertions(+), 16 deletions(-) diff --git a/n900-encode.py b/n900-encode.py index 3ab601d..5ac67c8 100755 --- a/n900-encode.py +++ b/n900-encode.py @@ -48,8 +48,11 @@ def main(argv): # CLI Argument Processing try: 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: - printi(str(err)) + except: + usage() + + if (len(args) != 0): + print("Error: Unsupported Arguments found!") usage() input = None @@ -80,7 +83,7 @@ def main(argv): # Check for needed Programs global mpbin 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 else: mpbin = progpath("mplayer") @@ -90,7 +93,7 @@ def main(argv): global ffbin 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 else: ffbin = progpath("ffmpeg") @@ -99,7 +102,7 @@ def main(argv): sys.exit(1) # 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") sys.exit(2) @@ -121,7 +124,11 @@ def calculate(input): # Get characteristics using mplayer 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: s = re.compile("^ID_VIDEO_ASPECT=(.*)$", re.M) @@ -159,8 +166,12 @@ def convert(input, output, res, abitrate, vbitrate, threads, mpopts): pid = os.getpid() afifo = "/tmp/stream" + str(pid) + ".wav" vfifo = "/tmp/stream" + str(pid) + ".yuv" - os.mkfifo(afifo) - os.mkfifo(vfifo) + try: + os.mkfifo(afifo) + os.mkfifo(vfifo) + except: + print("Error: Couldn't create fifos!") + sys.exit(2) # Define mplayer command for video decoding mpvideodec = [ mpbin, @@ -230,13 +241,22 @@ def convert(input, output, res, abitrate, vbitrate, threads, mpopts): except: print("Error: Starting decoding threads failed!") 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 try: subprocess.check_call(ffmenc) except subprocess.CalledProcessError: print("Error: Encoding thread failed!") - sys .exit(4) + sys.exit(4) def progpath(program): @@ -256,20 +276,21 @@ def cleanup(): # Cleanup try: if (mda != None): - os.kill(mda.pid()) + if (mda.returncode == None): + mda.kill() if (mdv != None): - os.kill(mdv.pid()) + if (mdv.returncode == None): + mdv.kill() finally: - if (afifo != None): + if (afifo != None and os.path.exists(afifo)): os.remove(afifo) - if (vfifo != None): + if (vfifo != None and os.path.exists(vfifo)): os.remove(vfifo) - os._exit(0) def usage(): """Print avaiable commandline arguments""" - print("This is n900-encode.py (C) 2010 Stefan Brand ") + print("This is n900-encode.py (C) 2012 Stefan Brand ") print("Usage:") print(" n900-encode.py --input [opts]\n") print("Options:") From 50bb00be4c0fcbc802da672ef3c59c44ff3b61ef Mon Sep 17 00:00:00 2001 From: Stefan Brand Date: Mon, 3 Sep 2012 13:02:40 +0200 Subject: [PATCH 2/2] Added checking for sane -a and -v values --- n900-encode.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/n900-encode.py b/n900-encode.py index 5ac67c8..f0796c8 100755 --- a/n900-encode.py +++ b/n900-encode.py @@ -4,7 +4,7 @@ # n900-encode.py: Encode almost any Video to an Nokia N900-compatible format (h264,aac,mp4) # Disclaimer: This program is provided without any warranty, USE AT YOUR OWN RISK! # -# Version 1.2 (23.03.2012) +# Version 1.2.2 (03.08.2012) # # (C) 2010-2012 Stefan Brand # @@ -70,9 +70,17 @@ def main(argv): elif opt in ("-m" "--mpopts"): mpopts = arg elif opt in ("-a", "--abitrate"): - abitrate = int(arg) * 1000 + try: + abitrate = int(arg) * 1000 + except ValueError: + print("Error: invalid value for audio bitrate!") + usage() elif opt in ("-v", "--vbitrate"): - vbitrate = int(arg) + try: + vbitrate = int(arg) + except ValueError: + print("Error: Invalid value for video bitrate!") + usage() elif opt in ("-t", "--threads"): threads = arg elif opt in ("-f", "--force-overwrite"):