Andro0s commited on
Commit
af8e4d4
·
verified ·
1 Parent(s): 35f7ff2

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +57 -0
app.py ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import yt_dlp
3
+ import os
4
+
5
+ def download_media(url, mode):
6
+ # Nombre base para el archivo
7
+ output_folder = "downloads"
8
+ if not os.path.exists(output_folder):
9
+ os.makedirs(output_folder)
10
+
11
+ # Limpiar archivos anteriores para no llenar el Space
12
+ for f in os.listdir(output_folder):
13
+ os.remove(os.path.join(output_folder, f))
14
+
15
+ if mode == "Video (MP4)":
16
+ ydl_opts = {
17
+ 'format': 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best',
18
+ 'outtmpl': f'{output_folder}/video_descargado.mp4',
19
+ }
20
+ else: # Modo Audio MP3
21
+ ydl_opts = {
22
+ 'format': 'bestaudio/best',
23
+ 'outtmpl': f'{output_folder}/audio_descargado',
24
+ 'postprocessors': [{
25
+ 'key': 'FFmpegExtractAudio',
26
+ 'preferredcodec': 'mp3',
27
+ 'preferredquality': '320', # Calidad máxima
28
+ }],
29
+ }
30
+
31
+ try:
32
+ with yt_dlp.YoutubeDL(ydl_opts) as ydl:
33
+ info = ydl.extract_info(url, download=True)
34
+ # yt-dlp añade la extensión automáticamente al convertir
35
+ if mode == "Audio (MP3)":
36
+ filename = f"{output_folder}/audio_descargado.mp3"
37
+ else:
38
+ filename = f"{output_folder}/video_descargado.mp4"
39
+
40
+ return filename
41
+ except Exception as e:
42
+ return f"Error: {str(e)}"
43
+
44
+ # Interfaz de Gradio
45
+ with gr.Blocks(theme=gr.themes.Soft()) as demo:
46
+ gr.Markdown("# 📥 Descargador Universal & Convertidor MP3 HD")
47
+
48
+ with gr.Row():
49
+ link_input = gr.Textbox(label="Enlace del video", placeholder="Pega el link de YouTube, Instagram, X, etc.")
50
+ mode_input = gr.Radio(["Video (MP4)", "Audio (MP3)"], label="¿Qué quieres descargar?", value="Video (MP4)")
51
+
52
+ download_btn = gr.Button("🚀 Iniciar Descarga", variant="primary")
53
+ file_output = gr.File(label="Archivo listo para descargar")
54
+
55
+ download_btn.click(fn=download_media, inputs=[link_input, mode_input], outputs=file_output)
56
+
57
+ demo.launch()