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