Spaces:
Running
Running
File size: 2,040 Bytes
ab28a19 fc41fb4 136c2ab ab28a19 118a5f9 136c2ab ab28a19 fc41fb4 ab28a19 fc41fb4 ab28a19 fc41fb4 ab28a19 fc41fb4 118a5f9 fc41fb4 118a5f9 fc41fb4 136c2ab ab28a19 fc41fb4 136c2ab ab28a19 fc41fb4 ab28a19 16e732a 3c7f2ec e3aff9f 16e732a ab28a19 136c2ab ab28a19 fc41fb4 ab28a19 118a5f9 136c2ab ab28a19 fcdb38d 16e732a ff5d792 271a312 e3aff9f 136c2ab fc41fb4 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
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()
|