File size: 2,670 Bytes
ab28a19
 
 
 
 
 
 
118a5f9
ab28a19
118a5f9
 
ab28a19
 
 
 
 
 
ff5d792
ab28a19
 
 
 
 
118a5f9
ab28a19
 
 
 
 
 
 
 
 
118a5f9
 
ab28a19
118a5f9
 
ab28a19
118a5f9
 
ab28a19
 
118a5f9
 
ab28a19
118a5f9
 
ab28a19
 
 
 
 
 
ff5d792
ab28a19
 
 
ff5d792
ab28a19
 
16e732a
3c7f2ec
ff5d792
16e732a
ab28a19
 
ff5d792
ab28a19
 
 
 
118a5f9
 
ab28a19
118a5f9
ff5d792
ab28a19
 
 
 
 
 
 
 
 
fcdb38d
16e732a
ff5d792
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
import gradio as gr
import yt_dlp
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 mp3_filename, ringtone_filename_m4r, state

    except Exception as e:
        log.append(f"Error: {str(e)}")
        return None, None, state

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")
        state = gr.State()
    
    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, state], outputs=[mp3_download, iphone_ringtone])

interface.launch()