- Agregar funciones check_ffmpeg() y install_ffmpeg() para detectar e instalar FFmpeg - Implementar verificación previa a descargas MP3 para asegurar disponibilidad de FFmpeg - Crear endpoints /api/ffmpeg/status y /api/ffmpeg/install para gestión de FFmpeg - Mejorar frontend con detección de estado de FFmpeg y opción de instalación automática - Deshabilitar opción MP3 si FFmpeg no está disponible - Añadir mensajes de error específicos para problemas de FFmpeg 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
YouTube Downloader Dashboard 🎵
Una aplicación web moderna para descargar videos de YouTube en formato MP3 y MP4 con una interfaz amigable y soporte para Docker. Basada en yt-dlp con configuración optimizada para evitar restricciones de YouTube.
✨ Características
- 🌐 Interfaz Web Moderna: Dashboard responsive con Bootstrap 5
- 🎧 Descarga MP3: Extrae audio de alta calidad (192 kbps)
- 🎬 Descarga MP4: Descarga videos en alta calidad
- 📊 Progreso en Tiempo Real: Barra de progreso con velocidad y tiempo estimado
- 🔄 Reintentos Automáticos: Configuración robusta con 10 reintentos
- 🧹 Limpieza Automática: Elimina archivos temporales y descargas antiguas
- 🐳 Soporte Docker: Listo para producción 24/7
- 📱 Responsive: Funciona perfectamente en móviles y desktop
🚀 Capturas de Pantalla
Interfaz Principal
┌─────────────────────────────────────────────────────────────┐
│ 🎵 YouTube Downloader Dashboard │
│ Descarga videos de YouTube en formato MP3 o MP4 │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ URL del Video de YouTube │
│ [🔗] [https://www.youtube.com/watch?v=...] │
│ │
│ Formato de Descarga │
│ ○ MP3 (Audio) ○ MP4 (Video) │
│ │
│ [📥 Descargar] │
└─────────────────────────────────────────────────────────────┘
Progreso de Descarga
┌─────────────────────────────────────────────────────────────┐
│ 📥 Descargando... │
│ [████████████████████████████████████] 75% │
│ Velocidad: 2.5 MB/s | Tiempo: 00:45 │
│ Archivo: el_principe_nicolas_maquiavelo.mp3 │
└─────────────────────────────────────────────────────────────┘
📋 Requisitos
Opción 1: Sin Docker (Desarrollo)
- Python 3.8+
- FFmpeg (requerido para conversión de audio/video)
- pip
Opción 2: Con Docker (Producción)
- Docker
- Docker Compose
⚙️ Instalación y Uso
Opción 1: Docker (Recomendado para Producción)
- Clona el repositorio:
git clone https://gitea.cbcren.online/renato97/youtube-downloader.git
cd youtube-downloader
- Ejecuta el script de despliegue:
chmod +x deploy.sh
./deploy.sh
- Accede a la aplicación:
http://localhost:5000
Opción 2: Sin Docker (Para Desarrollo)
- Clona el repositorio:
git clone https://gitea.cbcren.online/renato97/youtube-downloader.git
cd youtube-downloader
- Crea un entorno virtual:
python3 -m venv venv
source venv/bin/activate # En Windows: venv\Scripts\activate
- Instala las dependencias:
pip install -r requirements.txt
- Instala FFmpeg (requerido):
Ubuntu/Debian:
sudo apt update
sudo apt install ffmpeg
CentOS/RHEL:
sudo yum install epel-release
sudo yum install ffmpeg
macOS:
brew install ffmpeg
- Ejecuta la aplicación:
python app.py
- Abre tu navegador en:
http://localhost:5000
🎯 Cómo Usar la Aplicación
- Abre la aplicación en tu navegador
- Pega la URL del video de YouTube que quieres descargar
- Selecciona el formato:
- MP3: Para extraer solo el audio (ideal para música, podcasts)
- MP4: Para descargar el video completo
- Haz clic en "Descargar"
- Monitorea el progreso en tiempo real
- Descarga el archivo cuando esté completo
📂 Estructura del Proyecto
youtube-downloader/
├── app.py # Aplicación Flask principal
├── requirements.txt # Dependencias Python
├── Dockerfile # Configuración Docker
├── docker-compose.yml # Orquestación Docker
├── deploy.sh # Script de despliegue fácil
├── .dockerignore # Archivos ignorados por Docker
├── README.md # Esta documentación
├── templates/
│ └── index.html # Interfaz web principal
├── static/
│ ├── css/
│ │ └── style.css # Estilos personalizados
│ ├── js/
│ │ └── app.js # Lógica del frontend
│ └── downloads/ # Archivos descargados
│ └── *.mp3, *.mp4 # Archivos de usuario
└── venv/ # Entorno virtual (gitignore)
🔧 Configuración Avanzada
Variables de Entorno
Puedes configurar las siguientes variables de entorno:
export FLASK_ENV=production # Modo producción
export DOWNLOAD_FOLDER=/path/to/downloads # Carpeta personalizada
export PORT=5000 # Puerto personalizado
Personalización de Calidad
Edita app.py para ajustar la calidad de descarga:
# Para MP3 (calidad de audio)
'preferredquality': '192' # 128, 192, 256, 320 kbps
# Para MP4 (calidad de video)
'format': 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best'
🐳 Docker Detalles
Dockerfile
FROM python:3.11-slim
# Instala FFmpeg y dependencias
# Configura la aplicación
# Expone puerto 5000
Docker Compose
version: '3.8'
services:
youtube-downloader:
build: .
ports:
- "5000:5000"
volumes:
- ./static/downloads:/app/static/downloads
restart: unless-stopped
📊 API Endpoints
La aplicación incluye una API REST:
POST /api/downloads- Iniciar nueva descargaGET /api/status/<download_id>- Verificar estadoGET /api/downloads- Listar todas las descargasPOST /api/cleanup- Limpiar archivos temporalesGET /download/<filename>- Descargar archivo específico
Ejemplo de uso con curl:
# Iniciar descarga
curl -X POST http://localhost:5000/api/downloads \
-H "Content-Type: application/json" \
-d '{"url": "https://www.youtube.com/watch?v=VIDEO_ID", "format": "mp3"}'
# Verificar estado
curl http://localhost:5000/api/status/<download_id>
# Listar descargas
curl http://localhost:5000/api/downloads
🔒 Solución de Problemas
Error 403 de YouTube
La aplicación incluye configuración optimizada para evitar errores 403:
- User-Agent actualizado de Chrome 130
- Headers HTTP completos
- Múltiples reintentos (10)
- Timeout extendido (60s)
Videos No Disponibles
Si un video no se puede descargar:
- Verifica que el video sea público
- Intenta con otro video para descartar problemas de conexión
- Revisa la consola del navegador para errores
- Prueba la descarga directa con yt-dlp
Problemas con FFmpeg
Error: FFmpeg not found
# Verifica instalación
ffmpeg -version
# Instala si es necesario
sudo apt install ffmpeg # Ubuntu/Debian
brew install ffmpeg # macOS
Problemas de Puerto
Error: Port 5000 is in use
# Cambia el puerto en app.py
app.run(host='0.0.0.0', port=5001, debug=True)
🔄 Actualización
Actualizar la aplicación
- Detén la aplicación:
docker compose down # Si usas Docker
# o Ctrl+C si corres localmente
- Actualiza el código:
git pull origin main
- Reconstruye y reinicia:
docker compose build
docker compose up -d
Actualizar yt-dlp
# Con Docker (reconstruye la imagen)
docker compose build --no-cache
# Sin Docker
pip install --upgrade yt-dlp
🤝 Contribuir
¡Las contribuciones son bienvenidas!
- Fork el repositorio
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
📝 Licencia
Este proyecto está bajo la Licencia MIT. Consulta el archivo LICENSE para más detalles.
⚠️ Advertencia Legal
Esta herramienta está diseñada para uso personal y educativo. Por favor:
- ✅ Descarga solo contenido que tengas derecho a descargar
- ✅ Respeta los términos de servicio de YouTube
- ✅ Usa esta herramienta de manera responsable
- ❌ No uses para contenido protegido por derechos de autor
- ❌ No redistribuyas contenido descargado
🆘 Soporte
Si encuentras algún problema:
- Revisa la sección de solución de problemas
- Busca issues existentes en el repositorio
- Crea un nuevo issue con detalles del problema
- Incluye logs y capturas de pantalla si es posible
📈 Métricas y Monitoreo
La aplicación incluye métricas básicas:
- Cantidad de descargas completadas
- Tamaño total de archivos descargados
- Tiempo promedio de descarga
- Errores y reintentos
Ver logs en tiempo real:
# Docker
docker compose logs -f
# Local (la aplicación muestra logs en consola)
python app.py
🎉 ¡Disfruta descargando tus videos favoritos de YouTube!
Hecho con ❤️ usando Flask, yt-dlp y Bootstrap 5