def main(): args = parser.parse_args() new_foldername = copy_dir(args.foldername) file_lists = get_music(new_foldername=new_foldername) mp3_lists = file_lists['mp3'] prev_separator = None for _path in mp3_lists.keys(): for _mp3_file in mp3_lists[_path]: # update the metadata for the mp3 _audiofile = eyed3.load(_mp3_file) # check that the title exists guess = guess_title(_mp3_file, mp3_lists[_path], prev_separator) if _audiofile.tag is None: _audiofile.initTag() prev_separator = guess['separator'] if _audiofile.tag.title is None or args.ignore: print("file: "+_mp3_file+" is missing the title, guess is: "+ guess['title']) _audiofile.tag.title = check_mappings(guess['title']) else: guess['title'] = _audiofile.tag.title if _audiofile.tag.album is None or args.ignore: album = guess_album(_path, guess['artist']) print("file: "+_mp3_file+" is missing the album, guess is: "+ album) _audiofile.tag.album = check_mappings(album) if _audiofile.tag.artist is None or args.ignore: print("file: "+_mp3_file+" is missing the artist, guess is: " +guess['artist']) _audiofile.tag.artist = check_mappings(guess['artist']) else: _audiofile.tag.artist = check_mappings(_audiofile.tag.artist) _audiofile.tag.save()
def main(): args = parser.parse_args() new_foldername = copy_dir(args.foldername) for root, dirs, files in os.walk(new_foldername): # keep a list of all cues and flacs flac_filenames = [] cue_filenames = [] thumbnail_filename = None for name in files: if fnmatch(name, "*.flac") or fnmatch(name, ".m4a") or fnmatch( name, '.wma'): flac_filenames.append(os.path.join(root, name)) if fnmatch(name, "*.cue"): cue_filenames.append(os.path.join(root, name)) if fnmatch(name, "*.jpg"): thumbnail_filename = os.path.join(root, name) # we should now have exactly one flac and one cue file if len(flac_filenames) == 1 and len(cue_filenames) == 1: ps = subprocess.Popen(('cuebreakpoints', cue_filenames[0]), stdout=subprocess.PIPE) subprocess.check_output(('shnsplit', '-o', 'flac', flac_filenames[0], '-a', flac_filenames[0].replace(root,'').replace('.flac', ''), '-d', root), stdin=ps.stdout) ps.wait() # move the old flac file to the trash send2trash(flac_filenames[0]) if len(cue_filenames)>0: cuesheet = CueSheet() cuesheet.setOutputFormat('%performer% - %title%\n%file%\n%tracks%', '%title%') with open(cue_filenames[0], "r") as f: cuesheet.setData(f.read()) cuesheet.parse() else: cuesheet = None print root # convert the other flacs to mp3 convert_files(root, cuesheet=cuesheet, thumbnail_filename=thumbnail_filename)
def main(): args = parser.parse_args() if not hasattr(args, 'online'): args.online = False if args.copy: new_foldername = copy_dir(args.foldername) else: new_foldername = args.foldername file_lists = get_music(new_foldername=new_foldername) mp3_lists = file_lists['mp3'] path_images = file_lists['images'] seen_covers = {} web_search = args.online print(web_search) for _path in mp3_lists.keys(): current_track = 1 for _mp3_file in mp3_lists[_path]: # update the metadata for the mp3 _audiofile = eyed3.load(_mp3_file) if _audiofile.tag.artist is None or _audiofile.tag.album is None: print("Could not find tags on track ", _mp3_file, " aborting.") continue if len(_audiofile.tag.images) > 0 and not args.ignore: continue cover_key = _audiofile.tag.artist+"_"+_audiofile.tag.album if _audiofile.tag is None: print "initializing tag" # the track likely has no tags _audiofile.tag = eyed3.id3.tag.Tag() if _path in path_images.keys(): _image_path = os.path.join(_path, path_images[_path]) jpgfile = open(_image_path, "rb") _audiofile.tag.images.set(0x03, jpgfile.read(), 'image/jpeg') jpgfile.close() _audiofile.tag.save(filename=_mp3_file, version=eyed3.id3.ID3_V2_4) else: if cover_key not in seen_covers.keys() and web_search: print "cover key not in seen covers, going to search the web" web_image = get_image(_audiofile.tag.album, _audiofile.tag.artist, web_search) if web_image is None: print "search failed for: ("+cover_key+")" continue try: if isinstance(web_image, list): for _item in web_image: if check_image(_item, cover_key): seen_covers[cover_key] = _item break if isinstance(web_image, basestring): if check_image(web_image, cover_key): seen_covers[cover_key] = web_image except Exception as e: print "Critical failure on: "+cover_key print(e) seen_covers[cover_key] = 'invalid' continue if not cover_key in seen_covers.keys(): seen_covers[cover_key] = 'invalid' if seen_covers[cover_key] != "invalid": jpgfile = open(seen_covers[cover_key], "rb") img = Image.open(jpgfile) img = img.resize((400, 400)) img.save(seen_covers[cover_key]) jpgfile.close() jpgfile = open(seen_covers[cover_key], "rb") mime = guess_type(seen_covers[cover_key])[0] _audiofile.tag.images.set(0x03, jpgfile.read(), mime) jpgfile.close() _audiofile.tag.save(filename=_mp3_file,version=eyed3.id3.ID3_V2_4) current_track += 1