Spaces:
Sleeping
Sleeping
File size: 2,545 Bytes
ab28a19 1ac0332 7d50d22 cfea90d fc41fb4 1ac0332 136c2ab a3b0d99 ab28a19 118a5f9 1ac0332 136c2ab cfea90d ab28a19 cfea90d ab28a19 fc41fb4 4bb038f ab28a19 cfea90d ab28a19 1ac0332 4bb038f ab28a19 cfea90d fc41fb4 4bb038f 118a5f9 1ac0332 3df1079 cfea90d 1ac0332 3df1079 1ac0332 cfea90d 4bb038f ab28a19 136c2ab 4bb038f ab28a19 cfea90d ab28a19 16e732a 3c7f2ec 1ac0332 16e732a 3df1079 ab28a19 136c2ab ab28a19 fc41fb4 ab28a19 118a5f9 4bb038f ab28a19 1ac0332 ab28a19 fcdb38d 16e732a ff5d792 271a312 e3aff9f 136c2ab fc41fb4 5ba25ef 4bb038f |
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 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
import gradio as gr
import yt_dlp
import os
from pydub import AudioSegment
import re
os.makedirs("downloads", exist_ok=True)
def sanitize_filename(filename):
"""Sanitize the filename by removing or replacing special characters."""
return re.sub(r'[^a-zA-Z0-9_-]', '_', filename)
def process_youtube_url(url, uploaded_file):
"""Process the YouTube URL or uploaded file to create ringtones."""
try:
filename = None
song_name = None
if url:
ydl_opts = {
'format': 'bestaudio/best',
'outtmpl': 'downloads/%(id)s.%(ext)s',
'cookiefile': 'cookies.txt' #cookies
}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
info = ydl.extract_info(url, download=True)
filename = os.path.join('downloads', f"{info['id']}.webm")
song_name = sanitize_filename(info['title'])
elif uploaded_file:
filename = uploaded_file.name
song_name = sanitize_filename(os.path.splitext(uploaded_file.name)[0])
if not filename or not os.path.exists(filename):
return None, None, None
mp3_filename = f"downloads/{song_name}.mp3"
if not os.path.exists(mp3_filename):
audio = AudioSegment.from_file(filename)
audio.export(mp3_filename, format="mp3")
ringtone_filename_m4r = f"downloads/{song_name}.m4r"
if not os.path.exists(ringtone_filename_m4r):
ringtone_audio = AudioSegment.from_file(mp3_filename)[:20000] # 20 seconds
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
#UI
with gr.Blocks() as interface:
gr.HTML("""
<h1>Python YouTube Ringtones</h1>
<p>Insert a URL to create 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(share=True)
|