| | |
| | | #!/usr/bin/python |
| | | #!/usr/bin/env python |
| | | import argparse |
| | | import os |
| | | import glob |
| | |
| | | import shlex |
| | | import json |
| | | import requests |
| | | import unicodedata |
| | | from querysubsonic import findalbumbyname |
| | | from time import sleep |
| | | |
| | | |
| | | # arguments |
| | |
| | | bit_rate = metadata['format']['bit_rate'] |
| | | return bit_rate[:2] |
| | | |
| | | def getmetacopyright(): |
| | | copyright = unicodedata.normalize('NFKD', metadata['format']['tags']['copyright']).encode('ascii','ignore') |
| | | return copyright |
| | | |
| | | |
| | | def getmetadatatags(key): |
| | | # get specific data |
| | | # get specific data |
| | | tag = metadata['format']['tags'][key] |
| | | return tag |
| | | |
| | | |
| | | def reencode(aaxfile, outpath): |
| | | # decrypt and reencode to mp3 |
| | | # decrypt and reencode to mp3 |
| | | command = ("ffmpeg -loglevel error {} -activation_bytes {} -i {} -vn -codec:a libmp3lame -ab {}k -map_metadata -1 " |
| | | "-metadata \"title={}\" -metadata 'artist={}' -metadata 'album_artist={}' -metadata \"album={}\" -metadata 'date={}' " |
| | | "-metadata track=1/1 -metadata 'genre={}' -metadata 'copyright={}' \"{}\" " ).format(stats, act_byte,aaxfile,getmetabitrate(), |
| | | getmetadatatags('title'), getmetadatatags('artist'), |
| | | getmetadatatags('album_artist'), getmetadatatags('album'), |
| | | getmetadatatags('date'), getmetadatatags('genre'), |
| | | getmetadatatags('copyright'),outpath) |
| | | getmetacopyright(),outpath) |
| | | if args.verbose: |
| | | print(command) |
| | | process = subprocess.Popen(shlex.split(command), stdout=subprocess.PIPE) |
| | |
| | | |
| | | |
| | | def getchaptercount(): |
| | | # Get the number of chapters |
| | | # Get the number of chapters |
| | | ccount = metadata['chapters'] |
| | | return len(ccount) |
| | | |
| | | |
| | | def getchaptermetadata(cid, key): |
| | | # get the Chapter metadata |
| | | # get the Chapter metadata |
| | | for i in metadata['chapters']: |
| | | if i['id'] == cid: |
| | | return i[key] |
| | | |
| | | def movetochapters(path, outpath, chapter, title, start,end): |
| | | # Creating individual chapters |
| | | # Creating individual chapters |
| | | |
| | | outfile = "{}/Ch - {} {}.mp3".format(outpath, chapter, title) |
| | | command = "ffmpeg -loglevel error {} -i \"{}\" -ss {} -to {} -codec:a copy -metadata 'track={}' \"{}\"".format(stats, path, |
| | |
| | | |
| | | |
| | | def getcoverart(path,outpath): |
| | | # Pull the coverart from the file |
| | | # Pull the coverart from the file |
| | | command = "ffmpeg -loglevel error -activation_bytes {} -i \"{}\" -an -codec:v copy \"{}/cover.jpg\"".format(act_byte, |
| | | path, outpath) |
| | | if args.verbose: |
| | |
| | | def getcorrectkey(aaxfile): |
| | | hex = filechecksum(aaxfile) |
| | | payload = hex |
| | | r = requests.post('http://x86-docker01:8080/function/checkkey', payload, verify=False) |
| | | if r.status_code == 200: |
| | | key = r.text |
| | | else: |
| | | print('Checkkey function is down please wait') |
| | | return key |
| | | recovery = 3 |
| | | while recovery != 0: |
| | | r = requests.post('http://x86-docker01:8080/function/getaaxkey', payload, verify=False, timeout=None) |
| | | if r.status_code == 200: |
| | | key = r.text |
| | | recovery = 0 |
| | | return key |
| | | else: |
| | | print('Checkkey function is down please wait') |
| | | recovery = recovery - 1 |
| | | sleep(5) |
| | | |
| | | for rfile in glob.glob(args.filename): |
| | | if rfile.find("aax") != -1 and os.path.isfile(rfile): |