diff options
-rwxr-xr-x | jamos | 169 |
1 files changed, 82 insertions, 87 deletions
@@ -19,6 +19,26 @@ def cleanup_metadata_files(music_directory): os.remove(file) +def create_downloader(music_directory, cookies): + audio_options = { + 'format': 'mp3/bestaudio/best', + 'cookiefile': cookies, + 'outtmpl': music_directory + '%(title)s.%(ext)s', + 'postprocessors': [ + { + 'key': 'FFmpegExtractAudio', + 'preferredcodec': 'mp3', + 'preferredquality': '192', + }, + {'key': 'FFmpegMetadata'}, + ], + 'writeinfojson': True, + 'quiet': not DEBUG + } + + return youtube_dl.YoutubeDL(audio_options) + + def format_youtube_date(date): default = "Unknown Year" try: @@ -88,76 +108,6 @@ def get_command_line_options(): return args -# TODO: switch command line args to argparse -def get_playlist_url(): - return sys.argv[1] - - -def get_video_urls_in_playlist(playlist_url, ytdl): - videos = ytdl.extract_info(playlist_url, download=False) - - urls = [] - for vid in videos['entries']: - if 'webpage_url' in vid.keys() and vid['webpage_url'] is not None: - urls.append(vid['webpage_url']) - - return urls - - -def remove_special_characters_for_filename(filename): - special_chars = [ - ['-', ' '], - ['(', ''], - [')', ''], - ['/', ' '], - ['/', ' '], - [' ', '_'], - ["'", ''], - ["&", 'and'], - [chr(8217), ''], - ['$', 's'], - ['.', ''] - ] - new_name = filename - - for char_set in special_chars: - new_name = new_name.replace(char_set[0], char_set[1]) - - return new_name.lower() - - -def move_file(file, metadata, output_directory): - artist = remove_special_characters_for_filename(metadata['artist']) - album = remove_special_characters_for_filename(metadata['album']) - title = remove_special_characters_for_filename(metadata['title']) - - final_directory = os.path.join( - output_directory, - artist, - album) - - Path(final_directory).mkdir(parents=True, exist_ok=True) - - # TODO: Research converting to mp3 instead of just naming it such. - # TODO: Research better file formats over mp3? - os.rename( - file, - os.path.join(final_directory, '{}_{}_{}.mp3'.format(artist, - album, - title))) - - -def write_metadata_to_song_file(filename, metadata): - file = music_tag.load_file(filename) - - file['name'] = metadata['title'] - file['artist'] = metadata['artist'] - file['album'] = metadata['album'] - file['year'] = metadata['year'] - - file.save() - - def get_song_metadata_from_json(json, counter): metadata = { 'title': 'unknownsong', @@ -196,24 +146,36 @@ def get_song_metadata_from_json(json, counter): return metadata -def create_downloader(music_directory, cookies): - audio_options = { - 'format': 'mp3/bestaudio/best', - 'cookiefile': cookies, - 'outtmpl': music_directory + '%(title)s.%(ext)s', - 'postprocessors': [ - { - 'key': 'FFmpegExtractAudio', - 'preferredcodec': 'mp3', - 'preferredquality': '192', - }, - {'key': 'FFmpegMetadata'}, - ], - 'writeinfojson': True, - 'quiet': not DEBUG - } +def get_video_urls_in_playlist(playlist_url, ytdl): + videos = ytdl.extract_info(playlist_url, download=False) - return youtube_dl.YoutubeDL(audio_options) + urls = [] + for vid in videos['entries']: + if 'webpage_url' in vid.keys() and vid['webpage_url'] is not None: + urls.append(vid['webpage_url']) + + return urls + + +def move_file(file, metadata, output_directory): + artist = remove_special_characters_for_filename(metadata['artist']) + album = remove_special_characters_for_filename(metadata['album']) + title = remove_special_characters_for_filename(metadata['title']) + + final_directory = os.path.join( + output_directory, + artist, + album) + + Path(final_directory).mkdir(parents=True, exist_ok=True) + + # TODO: Research converting to mp3 instead of just naming it such. + # TODO: Research better file formats over mp3? + os.rename( + file, + os.path.join(final_directory, '{}_{}_{}.mp3'.format(artist, + album, + title))) def save_urls_from_playlist_to_file(filename, urls): @@ -227,6 +189,39 @@ def save_urls_from_playlist_to_file(filename, urls): raise e +def remove_special_characters_for_filename(filename): + special_chars = [ + ['-', ' '], + ['(', ''], + [')', ''], + ['/', ' '], + ['/', ' '], + [' ', '_'], + ["'", ''], + ["&", 'and'], + [chr(8217), ''], + ['$', 's'], + ['.', ''] + ] + new_name = filename + + for char_set in special_chars: + new_name = new_name.replace(char_set[0], char_set[1]) + + return new_name.lower() + + +def write_metadata_to_song_file(filename, metadata): + file = music_tag.load_file(filename) + + file['name'] = metadata['title'] + file['artist'] = metadata['artist'] + file['album'] = metadata['album'] + file['year'] = metadata['year'] + + file.save() + + if __name__ == "__main__": try: args = get_command_line_options() |