Spaces:
Running
Running
| import gradio as gr | |
| import yt_dlp | |
| import os | |
| from pydub import AudioSegment | |
| # Ensure downloads directory exists | |
| os.makedirs("downloads", exist_ok=True) | |
| def process_youtube_url(url, uploaded_file): | |
| try: | |
| filename = None | |
| if url: | |
| ydl_opts = { | |
| 'format': 'bestaudio/best', | |
| 'outtmpl': 'downloads/%(id)s.%(ext)s', | |
| 'cookiefile': 'cookies.txt' # YTcookies | |
| } | |
| with yt_dlp.YoutubeDL(ydl_opts) as ydl: | |
| info = ydl.extract_info(url, download=True) | |
| filename = os.path.join('downloads', f"{info['id']}.webm") | |
| elif uploaded_file: | |
| filename = uploaded_file.name | |
| if not filename or not os.path.exists(filename): | |
| return None, None # No file, no output | |
| mp3_filename = "downloads/Ringtone.mp3" | |
| audio = AudioSegment.from_file(filename) | |
| audio.export(mp3_filename, format="mp3") | |
| ringtone_filename_m4r = "downloads/Apple.m4r" | |
| ringtone_audio = AudioSegment.from_file(mp3_filename)[:20000] | |
| ringtone_audio.export(ringtone_filename_m4r, format="mp4") | |
| return mp3_filename, ringtone_filename_m4r | |
| except Exception as e: | |
| print(f"Error: {e}") | |
| return None, None | |
| # Gradio UI | |
| with gr.Blocks() as interface: | |
| gr.HTML(""" | |
| <h1>Python YouTube Ringtones</h1> | |
| <p>Insert a URL to make ringtones or Upload an MP3 to convert</p> | |
| """) | |
| with gr.Row(): | |
| youtube_url = gr.Textbox(label="Enter YouTube URL", placeholder="Paste the URL here...") | |
| mp3_upload = gr.File(label="Upload MP3 (Optional)") | |
| with gr.Row(): | |
| mp3_download = gr.File(label="Download Android Ringtone") | |
| iphone_ringtone = gr.File(label="Download iPhone Ringtone") | |
| process_button = gr.Button("Create Ringtones") | |
| process_button.click(process_youtube_url, inputs=[youtube_url, mp3_upload], outputs=[mp3_download, iphone_ringtone]) | |
| interface.launch() | |