File size: 2,559 Bytes
ab28a19
 
 
 
1ac0332
7d50d22
fc41fb4
 
1ac0332
 
 
 
19487f1
 
ab28a19
118a5f9
1ac0332
136c2ab
80f04f5
ab28a19
 
 
 
80f04f5
ab28a19
 
 
fc41fb4
4bb038f
ab28a19
80f04f5
19487f1
 
 
 
fc41fb4
19487f1
118a5f9
80f04f5
1ac0332
 
 
 
3df1079
80f04f5
1ac0332
 
3df1079
1ac0332
 
4bb038f
ab28a19
136c2ab
 
4bb038f
ab28a19
19487f1
ab28a19
16e732a
3c7f2ec
19487f1
16e732a
3df1079
ab28a19
136c2ab
19487f1
136c2ab
ab28a19
fc41fb4
 
ab28a19
118a5f9
19487f1
ab28a19
1ac0332
 
ab28a19
 
 
 
 
 
 
fcdb38d
16e732a
ff5d792
271a312
e3aff9f
136c2ab
fc41fb4
5ba25ef
4bb038f
19487f1
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 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_or_audio(url, recorded_audio):
    """Process YouTube URL or recorded audio 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.txt
            }
            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 recorded_audio:
            filename = recorded_audio
            song_name = "recorded_audio"
        
        if not filename or not os.path.exists(filename):
            return 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

# Gradio UI
with gr.Blocks() as interface:
    gr.HTML("""
        <h1>Python YouTube Ringtones</h1>
        <p>Insert a URL to create ringtones or record your own audio.</p>
    """)

    with gr.Row():
        youtube_url = gr.Textbox(label="Enter YouTube URL", placeholder="Paste the URL here...")
        audio_record = gr.Audio(sources=["microphone"], type="filepath", label="Record Audio")

    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_or_audio, inputs=[youtube_url, audio_record], outputs=[mp3_download, iphone_ringtone])

interface.launch(share=True)