File size: 2,019 Bytes
ab28a19
 
 
 
 
44dfcd0
ab28a19
118a5f9
 
ab28a19
 
 
 
ff5d792
ab28a19
 
 
 
118a5f9
ab28a19
 
 
 
 
 
44dfcd0
ab28a19
118a5f9
44dfcd0
118a5f9
ab28a19
118a5f9
 
 
ab28a19
118a5f9
 
ab28a19
 
 
 
44dfcd0
ab28a19
44dfcd0
 
ab28a19
 
16e732a
3c7f2ec
ff5d792
16e732a
ab28a19
 
ff5d792
ab28a19
 
 
118a5f9
 
ab28a19
118a5f9
44dfcd0
ab28a19
 
 
 
 
 
 
 
 
fcdb38d
16e732a
ff5d792
271a312
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
import gradio as gr
import yt_dlp
import os
from pydub import AudioSegment

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'  # YT
            }

            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

        else:
            return None, None

        if not os.path.exists(filename):
            return None, None

        mp3_filename = 'Ringtone.mp3'
        audio = AudioSegment.from_file(filename)
        audio.export(mp3_filename, format="mp3")

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

        ringtone_filename_m4r = 'Apple.m4r'
        os.rename(ringtone_filename_m4a, ringtone_filename_m4r)

        return mp3_filename, ringtone_filename_m4r

    except Exception:
        return None, None

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")
    
    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], outputs=[mp3_download, iphone_ringtone])

interface.launch()