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)