aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaditya Dhruv <[email protected]>2025-05-01 21:13:49 -0500
committerAaditya Dhruv <[email protected]>2025-05-01 21:23:31 -0500
commitdb772695aacbd09935ddc8b3f0ff9a8766e7f2cb (patch)
tree0923dd1e998a3d399371b06f449e385954136679
parentfa9a7919f48ca694bd8f86d49460b5a53da08c00 (diff)
Download album async and label correctly, embed data
-rw-r--r--yt_music_scraper/main.py23
-rw-r--r--yt_music_scraper/requirements.txt3
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