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()