Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| from yt_dlp import YoutubeDL | |
| import os | |
| from pydub import AudioSegment | |
| DOWNLOADS_FOLDER = "downloads" | |
| os.makedirs(DOWNLOADS_FOLDER, exist_ok=True) | |
| def download_soundcloud(url, file_format): | |
| # Download best audio first (usually m4a) | |
| ydl_opts = { | |
| 'format': 'bestaudio/best', | |
| 'outtmpl': os.path.join(DOWNLOADS_FOLDER, '%(title)s.%(ext)s') | |
| } | |
| with YoutubeDL(ydl_opts) as ydl: | |
| info = ydl.extract_info(url, download=True) | |
| original_file = os.path.join(DOWNLOADS_FOLDER, f"{info['title']}.{info['ext']}") | |
| # If user wants MP3 and it isn't already mp3, convert | |
| if file_format.lower() == "mp3" and not original_file.endswith(".mp3"): | |
| mp3_file = os.path.splitext(original_file)[0] + ".mp3" | |
| AudioSegment.from_file(original_file).export(mp3_file, format="mp3") | |
| return mp3_file | |
| # If user chose the original format, just return it | |
| return original_file | |
| # Gradio interface | |
| with gr.Blocks() as iface: | |
| url_input = gr.Textbox(label="SoundCloud URL") | |
| format_choice = gr.Dropdown(choices=["mp3", "m4a", "opus"], value="mp3", label="Select format") | |
| download_button = gr.Button("Download") | |
| download_file = gr.File(label="Download your track") | |
| download_button.click( | |
| fn=download_soundcloud, | |
| inputs=[url_input, format_choice], | |
| outputs=download_file | |
| ) | |
| iface.launch() | |