import os import sys import json import yt_dlp def download_playlist_for_cd(playlist_url: str, output_folder: str = "cd_audio"): """Downloads YouTube audio directly into 44.1kHz 16-bit WAV files ideal for burning directly to Audio CDs without secondary re-encoding loss. """ if not os.path.exists(output_folder): os.makedirs(output_folder) ydl_opts = { # Grab best audio stream available "format": "bestaudio/best", # Prefix with track index (01, 02...) so CD track order matches playlist order "outtmpl": os.path.join(output_folder, "%(playlist_index)s - %(title)s.%(ext)s"), "postprocessors": [ { "key": "FFmpegExtractAudio", "preferredcodec": "wav", # Lossless format native to CD Burning } ], # Enforce Red Book CD Standard audio resampling (44.1 kHz) "postprocessor_args": [ "-ar", "44100", # Set sample rate to 44.1 kHz (CD Standard) "-ac", "2", # Force 2 channels (Stereo) ], "ignoreerrors": True, } print(f"Downloading audio optimized for CD burning: {playlist_url}") with yt_dlp.YoutubeDL(ydl_opts) as ydl: ydl.download([playlist_url]) print("\nDownload complete! Import these .wav files directly into your CD burner.") def parse_file(filename): with open(filename, "r") as file: data = json.load(file) links = data.get("yt-links", {}) return links if __name__ == "__main__": if len(sys.argv) == 1: url = input("Enter YouTube playlist URL: ").strip() if url: download_playlist_for_cd(url) else: data = parse_file(" ".join(sys.argv[1:])) for album, link in data.items(): if link: print(f"Album: {album}") print(f"Link: {link}\n") else: print(f"Album: {album}\n")