Spaces:
Running
Running
File size: 2,825 Bytes
ab28a19 118a5f9 ab28a19 118a5f9 ab28a19 16e732a ab28a19 118a5f9 ab28a19 118a5f9 ab28a19 118a5f9 ab28a19 118a5f9 ab28a19 118a5f9 ab28a19 118a5f9 ab28a19 118a5f9 ab28a19 16e732a 118a5f9 16e732a ab28a19 16e732a ab28a19 118a5f9 ab28a19 118a5f9 16e732a ab28a19 fcdb38d 16e732a |
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 |
import gradio as gr
import yt_dlp
import subprocess
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 '\n'.join(log), mp3_filename, ringtone_filename_m4r, state
except Exception as e:
log.append(f"Error: {str(e)}")
return '\n'.join(log), None, None, state
with gr.Blocks() as interface:
gr.HTML("""
<h1>P.Y.T.R.</h1>
<p>Python YouTube Ringtones<br/>insert a URL to make ringtones. Upload an MP3 to convert it too.</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():
status_log = gr.Textbox(label="Status")
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=[status_log, mp3_download, iphone_ringtone])
interface.launch()
|