| | |
| | | import subprocess |
| | | import shlex |
| | | import json |
| | | |
| | | # arguments |
| | | # activation_key, file name, codec(default to mp3) |
| | | parser = argparse.ArgumentParser() |
| | | parser.add_argument("--code", help="Activation Code from audible to decrypt files") |
| | | parser.add_argument("-s","--single", help="Use this option to create a single file. This is false by default", action="store_true") |
| | | parser.add_argument("-d","--dpath", help="Use this to set the destination path. Otherwise I will use the current directory") |
| | | parser.add_argument("-v", "--verbose", help="Send output to stdout", action="store_true") |
| | | parser.add_argument("filename", help="Filename to convert, or directory to look in") |
| | | |
| | | args = parser.parse_args() |
| | | import getaaxkey.getaaxkey |
| | | |
| | | act_byte = "" |
| | | metadata = "" |
| | | mode = "" |
| | | mode = "chapter" |
| | | stats = "" |
| | | path = "" |
| | | args = "" |
| | | |
| | | if args.dpath: |
| | | path = args.dpath |
| | | else: |
| | | path = os.getcwd() |
| | | # arguments |
| | | # activation_key, file name, codec(default to mp3) |
| | | def processargs(): |
| | | parser = argparse.ArgumentParser() |
| | | parser.add_argument("-s","--single", help="Use this option to create a single file. This is false by default", action="store_true") |
| | | parser.add_argument("-d","--dpath", help="Use this to set the destination path. Otherwise I will use the current directory") |
| | | parser.add_argument("-v", "--verbose", help="Send output to stdout", action="store_true") |
| | | parser.add_argument("filename", help="Filename to convert, or directory to look in") |
| | | |
| | | if args.code: |
| | | act_byte = args.code |
| | | elif os.path.isfile('./.authcode'): |
| | | act_byte = open('./.authcode').readline() |
| | | args = parser.parse_args() |
| | | |
| | | if act_byte == "": |
| | | print "Please provide an activation code from audible. Either at the command line or the .authcode file" |
| | | act_byte = "" |
| | | metadata = "" |
| | | mode = "" |
| | | stats = "" |
| | | |
| | | if args.single: |
| | | mode = 'single' |
| | | else: |
| | | mode = 'chapter' |
| | | if args.dpath: |
| | | path = args.dpath |
| | | else: |
| | | path = os.getcwd() |
| | | |
| | | if args.verbose: |
| | | stats = "-stats" |
| | | else: |
| | | stats = "-nostats" |
| | | if args.single: |
| | | mode = 'single' |
| | | else: |
| | | mode = 'chapter' |
| | | |
| | | if args.verbose: |
| | | stats = "-stats" |
| | | else: |
| | | stats = "-nostats" |
| | | |
| | | |
| | | def getmetadata(aaxfile): |
| | | ret = subprocess.check_output(["ffprobe", "-v", "quiet", "-hide_banner", "-show_format", "-show_chapters", "-print_format", "json", os.path.abspath(aaxfile)]) |
| | | ret = subprocess.check_output(["ffprobe", "-v", "info", "-hide_banner", "-show_format", "-show_chapters", "-print_format", "json", os.path.abspath(aaxfile)]) |
| | | mdata = json.loads(ret) |
| | | return mdata |
| | | |
| | |
| | | process = subprocess.call(shlex.split(command)) |
| | | return |
| | | |
| | | for rfile in glob.glob(args.filename): |
| | | if rfile.find("aax") != -1 and os.path.isfile(rfile): |
| | | metadata = getmetadata(rfile) |
| | | album = getmetadatatags('album') |
| | | artist = getmetadatatags('artist') |
| | | title = getmetadatatags('title') |
| | | ddir = "%s/%s/%s" % (path, artist, title) |
| | | single_file_path = "%s/%s.mp3" % (ddir, title) |
| | | if not os.path.exists(ddir): |
| | | os.makedirs(ddir) |
| | | print ddir |
| | | reencode(rfile, single_file_path) |
| | | if mode == 'chapter': |
| | | chapter = 0 |
| | | numchapters = getchaptercount() |
| | | while (numchapters > 0 ): |
| | | cstart = getchaptermetadata(chapter, 'start_time') |
| | | cend = getchaptermetadata(chapter, 'end_time') |
| | | chapter += 1 |
| | | numchapters -= 1 |
| | | schap = str(chapter).zfill(2) |
| | | movetochapters(single_file_path, ddir, schap, title, cstart,cend) |
| | | os.remove(single_file_path) |
| | | getcoverart(rfile, ddir) |
| | | |
| | | if __name__ == "__main__": |
| | | processargs() |
| | | for rfile in glob.glob(args.filename): |
| | | if rfile.find("aax") != -1 and os.path.isfile(rfile): |
| | | act_byte = getaaxkey(rfile) |
| | | metadata = getmetadata(rfile) |
| | | album = getmetadatatags('album') |
| | | artist = getmetadatatags('artist') |
| | | title = getmetadatatags('title') |
| | | ddir = "%s/%s/%s" % (path, artist, title) |
| | | single_file_path = "%s/%s.mp3" % (ddir, title) |
| | | if not os.path.exists(ddir): |
| | | os.makedirs(ddir) |
| | | print ddir |
| | | reencode(rfile, single_file_path) |
| | | if mode == 'chapter': |
| | | chapter = 0 |
| | | numchapters = getchaptercount() |
| | | while (numchapters > 0 ): |
| | | cstart = getchaptermetadata(chapter, 'start_time') |
| | | cend = getchaptermetadata(chapter, 'end_time') |
| | | chapter += 1 |
| | | numchapters -= 1 |
| | | schap = str(chapter).zfill(2) |
| | | movetochapters(single_file_path, ddir, schap, title, cstart,cend) |
| | | os.remove(single_file_path) |
| | | getcoverart(rfile, ddir) |