Spaces:
Sleeping
Sleeping
File size: 2,670 Bytes
ab28a19 118a5f9 ab28a19 118a5f9 ab28a19 ff5d792 ab28a19 118a5f9 ab28a19 118a5f9 ab28a19 118a5f9 ab28a19 118a5f9 ab28a19 118a5f9 ab28a19 118a5f9 ab28a19 ff5d792 ab28a19 ff5d792 ab28a19 16e732a 3c7f2ec ff5d792 16e732a ab28a19 ff5d792 ab28a19 118a5f9 ab28a19 118a5f9 ff5d792 ab28a19 fcdb38d 16e732a ff5d792 |
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 |
import gradio as gr
import yt_dlp
import os
from pydub import AudioSegment
def process_youtube_url(url, uploaded_file, state):
log = []
try:
filename = None
if url:
log.append("Starting download...")
ydl_opts = {
'format': 'bestaudio/best',
'outtmpl': 'downloads/%(id)s.%(ext)s',
'cookiefile': 'cookies.txt' # YT
}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
info = ydl.extract_info(url, download=True)
log.append(f"Downloaded: {info['title']}")
filename = os.path.join('downloads', f"{info['id']}.webm")
elif uploaded_file:
filename = uploaded_file.name
log.append(f"Uploaded MP3 file: {filename}")
else:
raise ValueError("No YouTube URL or MP3 file provided.")
if not os.path.exists(filename):
raise FileNotFoundError(f"File not found: {filename}")
log.append("Converting audio to MP3 manually...")
mp3_filename = 'Ringtone.mp3'
audio = AudioSegment.from_file(filename)
audio.export(mp3_filename, format="mp3")
log.append(f"MP3 saved: {mp3_filename}")
log.append("Creating ringtone...")
ringtone_filename_m4a = 'temp_ringtone.m4a'
ringtone_audio = AudioSegment.from_file(mp3_filename)[:20000] # 20 sec clip
ringtone_audio.export(ringtone_filename_m4a, format="mp4")
log.append(f"Ringtone saved as M4A: {ringtone_filename_m4a}")
ringtone_filename_m4r = 'Apple.m4r'
os.rename(ringtone_filename_m4a, ringtone_filename_m4r)
log.append(f"Ringtone renamed to .m4r: {ringtone_filename_m4r}")
return mp3_filename, ringtone_filename_m4r, state
except Exception as e:
log.append(f"Error: {str(e)}")
return None, None, state
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)", type="filepath")
state = gr.State()
with gr.Row():
mp3_download = gr.File(label="Android Ringtone")
iphone_ringtone = gr.File(label="iPhone Ringtone")
process_button = gr.Button("Create Ringtones")
process_button.click(process_youtube_url, inputs=[youtube_url, mp3_upload, state], outputs=[mp3_download, iphone_ringtone])
interface.launch()
|