MySafeCode's picture
Upload 2 files
5eb2405 verified
raw
history blame
1.46 kB
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()