import os import json import yt_dlp from suno_utils.utils.text import write_jsonl tiktok_queries = [ "tiktok covers singing voice", "tiktok singing", "tiktok vocal", "singing compilation", "acapella tiktok", "tiktok harmonies", ] audiophile_queries = [ "Audiophile music test", "High fidelity music", "HQ audiophile music", "Audiophile grade soundtracks", "Hi-Res audio music", "Lossless audio music", "Best audiophile music tracks", "24-bit music collection", "Audiophile music 2024", "FLAC music playlist", "Best sound quality songs", "High-definition music playlist", "DSD music tracks", "Audiophile jazz collection", "Audiophile classical music", "Best audiophile albums", "Audiophile music system test", "4K music videos audiophile", "Audiophile acoustic music", "Audiophile music streaming", "Vinyl rips audiophile", "Audiophile instrumental music", "Audiophile rock music", "Audiophile electronic music", "Audiophile pop music", "Audiophile blues collection", "Audiophile world music", "Audiophile soundstage test", "Audiophile vocals music", "Audiophile demo tracks", "Audiophile music experience", "Audiophile headphone test music", "Best audiophile tracks for testing", "Audiophile quality recordings", "Hi-Fi music videos", "High-resolution music playlist", "Audiophile surround sound music", "Mastered for audiophiles", "High-end audio test tracks", "Audiophile reference music", "Audiophile studio recordings", "Audiophile remastered music", "Best audiophile speakers test music", "Audiophile live recordings", "Audiophile sound quality comparison", "32-bit music collection", "Audiophile bass test music", "Audiophile music videos 2024", "Audiophile chillout music", "Audiophile ambient music", "Audiophile orchestral music", "Audiophile new age music", "Audiophile folk music", "Best audiophile soundtracks", "Audiophile piano music", "Audiophile guitar music", "Audiophile vocal test music", "Audiophile sound system test", "Audiophile binaural music", "Audiophile space music", "Audiophile soundstage tracks", "Audiophile soundcheck music", "Audiophile instrumental test", "Audiophile brass music", "Audiophile woodwind music", "Audiophile percussions test music", "Audiophile string music", "Audiophile concert music", "Audiophile background music", "Audiophile meditation music", "Audiophile relaxing music", "Audiophile movie soundtracks", "Audiophile high dynamic range music", "Audiophile SACD music", "Audiophile vinyl music", "Audiophile digital music", "Audiophile analog music", "Best audiophile headphones music", "Audiophile playlist 2024", "Audiophile quality music collection", "Best audiophile test albums", "Audiophile audio test", "Audiophile best sound test music", "Audiophile premium music", "Audiophile music showcase", "Audiophile music essentials", "Audiophile immersive sound music", "Audiophile demo playlist", "Audiophile recommended music", "Audiophile sound quality test", "Audiophile music highlights", "Audiophile sound experience", "Audiophile sound perfection", "Audiophile music journey", "Audiophile listening session music", "Audiophile audio experience", "Audiophile high end music", "Audiophile best quality music", "Audiophile ultimate test music", ] def search_and_download_audio(query, max_results=1, output_dir="downloads"): ydl_opts = { "format": "bestaudio/best", "outtmpl": f"{output_dir}/%(title)s.%(ext)s", "postprocessors": [ { "key": "FFmpegExtractAudio", "preferredcodec": "mp3", "preferredquality": "320", } ], } with yt_dlp.YoutubeDL(ydl_opts) as ydl: # Perform the search query search_results = ydl.extract_info( f"ytsearch{max_results}:{query}", download=False )["entries"] if not search_results: print("No results found.") return for result in search_results: print(f"Downloading: {result['title']}") # Download the audio from the search result ydl.download([result["webpage_url"]]) def download_audio(query: str, download_dir: str, downloaded_videos: set): ydl_opts = { "format": "bestaudio/best", "outtmpl": f"{download_dir}/%(id)s.%(ext)s", "postprocessors": [ { "key": "FFmpegExtractAudio", "preferredcodec": "mp3", "preferredquality": "320", } ], "noplaylist": True, "quiet": False, "force_ipv4": True, # Force IPv4 usage } try: with yt_dlp.YoutubeDL(ydl_opts) as ydl: result = ydl.extract_info(f"ytsearch1:{query}", download=False) if "entries" in result: video = result["entries"][0] video_id = video["id"] if video_id not in downloaded_videos: ydl.download([video["webpage_url"]]) downloaded_videos.add(video_id) audio_file_path = os.path.join(download_dir, f"{video_id}.mp3") metadata = { "title": video["title"], "tags": video.get("tags", []), "webpage_url": video["webpage_url"], "video_id": video_id, "audio_file": audio_file_path, } print(f"Downloaded: {video['title']}") else: print(f"Already downloaded: {video['title']}") except Exception as e: print(f"Error downloading {query}: {e}") metadata = None return metadata if __name__ == "__main__": downloaded_videos = set() max_results = 1000 output_dir = "/app/suno/christian/data/audiophile" os.makedirs(output_dir, exist_ok=True) metas = [] for query in audiophile_queries[:10]: metadata = download_audio(query, output_dir, downloaded_videos) if metadata is not None: metas.append(metadata) # save metadata to json metas_filepath = os.path.join(output_dir, "metadata.json") write_jsonl(metas, metas_filepath)