diff options
author | Aaditya Dhruv <[email protected]> | 2025-05-01 21:13:49 -0500 |
---|---|---|
committer | Aaditya Dhruv <[email protected]> | 2025-05-01 21:23:31 -0500 |
commit | db772695aacbd09935ddc8b3f0ff9a8766e7f2cb (patch) | |
tree | 0923dd1e998a3d399371b06f449e385954136679 | |
parent | fa9a7919f48ca694bd8f86d49460b5a53da08c00 (diff) |
Download album async and label correctly, embed data
-rw-r--r-- | yt_music_scraper/main.py | 23 | ||||
-rw-r--r-- | yt_music_scraper/requirements.txt | 3 |
2 files changed, 23 insertions, 3 deletions
diff --git a/yt_music_scraper/main.py b/yt_music_scraper/main.py index 3e8a917..f7a7d09 100644 --- a/yt_music_scraper/main.py +++ b/yt_music_scraper/main.py @@ -2,6 +2,7 @@ from yt_dlp import YoutubeDL import urllib.parse from ytmusicapi import YTMusic import re +import concurrent.futures import json import argparse import sys @@ -23,7 +24,6 @@ def vid_info(data): logger.info(json.dumps(data['title'] if 'title' in data else "N/A", indent=4)) logger.info(json.dumps(data['album'] if 'album' in data else "N/A", indent=4)) - logger.info(json.dumps(data['artists'] if 'artists' in data else "N/A", indent=4)) return data['album'] if 'album' in data else "N/A" ydl_opts = { @@ -32,12 +32,21 @@ ydl_opts = { 'key': 'FFmpegExtractAudio', 'preferredcodec': 'flac', 'preferredquality': 'best', - }], + }, + {'key': 'FFmpegMetadata'}, + {'key': 'EmbedThumbnail'}], + 'writethumbnail': True, + 'embedthumbnail': True, + 'add_metadata': True, 'logger': logger, - 'output': '%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s', + 'outtmpl': '%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s', } +def download_album(album_id): + data = yt.download(album_id) + return data + if __name__ == "__main__": parser = argparse.ArgumentParser(prog="YT DLP Music downloader", description="Download all albums corresponding to songs in a playlist") @@ -68,4 +77,12 @@ if __name__ == "__main__": album_ids.append(item['playlistId']) break logger.info(f"Album IDs: {album_ids}") + tasks = [] + with concurrent.futures.ProcessPoolExecutor() as executor: + for result in executor.map(download_album, album_ids): + tasks.append(result) + logger.info(f"DONE") + logger.info(f"DONE") + + diff --git a/yt_music_scraper/requirements.txt b/yt_music_scraper/requirements.txt new file mode 100644 index 0000000..8d83448 --- /dev/null +++ b/yt_music_scraper/requirements.txt @@ -0,0 +1,3 @@ +yt-dlp +ytmusicapi +mutagen |