6.9 KiB
6.9 KiB
✅ SOLUCIÓN FINAL SIMPLIFICADA - Error de Formato de Subtítulos
📝 Resumen del Problema
ERROR: [youtube] 6hini9Xz_fc: Requested format is not available
Este error ocurre porque yt-dlp no puede obtener los subtítulos en el formato solicitado.
✅ Cambios Implementados en main.py
1. Comando Simplificado (Sin Restricciones de Formato)
ANTES:
command = [
"yt-dlp",
"--skip-download",
"--write-auto-subs",
"--sub-format", "json3", # ❌ Esto causaba el error
"--sub-langs", f"{lang}.*",
...
]
DESPUÉS:
command = [
"yt-dlp",
"--skip-download",
"--dump-json", # ✅ Solo obtener metadatos
"--no-warnings",
"--extractor-args", "youtube:player_client=android",
url
]
2. Búsqueda Flexible de Subtítulos
El código ahora:
- Obtiene SOLO los metadatos del video
- Busca subtítulos en el JSON de metadatos
- Acepta CUALQUIER formato disponible
- Descarga directamente desde la URL encontrada
# Buscar en automatic_captions
for lang_key in automatic_captions.keys():
if lang in lang_key or lang_key.startswith(lang):
# Tomar el PRIMER formato disponible (sin filtrar)
if automatic_captions[lang_key]:
requested_subs = {lang_key: automatic_captions[lang_key][0]}
break
🚀 CÓMO APLICAR LA SOLUCIÓN
Método 1: Reconstruir Docker (Recomendado)
# Limpiar todo
docker stop $(docker ps -aq) 2>/dev/null
docker rm $(docker ps -aq) 2>/dev/null
# Reconstruir desde cero
cd /Users/cesarmendivil/Documents/Nextream/TubeScript-API
docker-compose build --no-cache
# Iniciar
docker-compose up -d
# Ver logs
docker-compose logs -f tubescript-api
Método 2: Si Docker da problemas
# Reiniciar Docker Desktop
# 1. Cierra Docker Desktop completamente
# 2. Ábrelo nuevamente
# 3. Espera que inicie completamente
# 4. Ejecuta:
docker-compose down
docker-compose build --no-cache
docker-compose up -d
Método 3: Build Manual
# Build solo del API
docker build -t tubescript-api -f Dockerfile .
# Ejecutar manualmente
docker run -d \
--name tubescript_api \
-p 8080:8000 \
-v "$(pwd)/cookies.txt:/app/cookies.txt:ro" \
-v "$(pwd):/app" \
tubescript-api \
uvicorn main:app --host 0.0.0.0 --port 8000 --reload
# Ver logs
docker logs -f tubescript_api
🧪 PROBAR LA SOLUCIÓN
Test 1: Verificar que Docker está corriendo
docker ps
Debería mostrar al menos tubescript_api corriendo.
Test 2: Probar el endpoint problemático
# Esperar 10 segundos después de iniciar
sleep 10
# Probar
curl -X GET "http://localhost:8080/transcript/6hini9Xz_fc?lang=es"
Test 3: Ver logs en tiempo real
# Terminal 1: Ver logs
docker logs -f tubescript_api
# Terminal 2: Hacer petición
curl -X GET "http://localhost:8080/transcript/6hini9Xz_fc?lang=es"
🔍 DIAGNÓSTICO DE PROBLEMAS
Problema: Docker no responde
# Reiniciar Docker
killall Docker
open -a Docker
# Esperar 30 segundos
sleep 30
# Verificar
docker ps
Problema: Puerto 8080 ocupado
# Ver qué usa el puerto
lsof -i :8080
# Matar proceso
kill -9 $(lsof -ti:8080)
# Cambiar puerto en docker-compose.yml
# ports:
# - "8081:8000" # Usar 8081 en lugar de 8080
Problema: Contenedor se detiene inmediatamente
# Ver logs completos
docker logs tubescript_api
# Ejecutar en modo interactivo
docker run -it --rm \
-p 8080:8000 \
-v "$(pwd):/app" \
tubescript-api \
bash
# Dentro del contenedor:
python3 main.py
📊 QUÉ HACE EL CÓDIGO AHORA
Flujo Simplificado:
1. Usuario pide transcripción de video
↓
2. yt-dlp obtiene SOLO metadatos (sin bajar subtítulos)
↓
3. Parseamos el JSON de metadatos
↓
4. Buscamos en:
- automatic_captions
- subtitles
↓
5. Tomamos el PRIMER formato disponible
(json3, srv3, vtt, o lo que haya)
↓
6. Descargamos desde la URL encontrada
↓
7. Parseamos según el formato
↓
8. ✅ Retornamos formato estándar
Ventajas:
✅ Más rápido - Solo obtiene metadatos una vez ✅ Más flexible - Acepta cualquier formato ✅ Menos errores - No forzamos formatos específicos ✅ Mejor compatibilidad - Funciona con más videos
💡 ALTERNATIVA: Probar Localmente Sin Docker
Si Docker sigue dando problemas, puedes probar localmente:
# 1. Instalar dependencias
pip install fastapi uvicorn requests yt-dlp
# 2. Ejecutar el API directamente
cd /Users/cesarmendivil/Documents/Nextream/TubeScript-API
uvicorn main:app --reload --port 8080
# 3. En otra terminal, probar:
curl -X GET "http://localhost:8080/transcript/6hini9Xz_fc?lang=es"
🎯 VERIFICACIÓN FINAL
Una vez que hayas reconstruido, verifica:
# 1. Contenedor corriendo
docker ps | grep tubescript_api
# 2. API respondiendo
curl http://localhost:8080/docs
# 3. Endpoint de transcripción
curl -X GET "http://localhost:8080/transcript/6hini9Xz_fc?lang=es" | jq
# 4. Logs sin errores
docker logs tubescript_api 2>&1 | tail -20
✅ CHECKLIST
- Detener servicios Docker actuales
- Verificar que Docker Desktop esté corriendo
- Reconstruir imagen:
docker-compose build --no-cache - Iniciar servicios:
docker-compose up -d - Esperar 10 segundos para que inicie
- Verificar contenedor:
docker ps - Probar endpoint:
curl http://localhost:8080/transcript/6hini9Xz_fc?lang=es - Ver logs:
docker logs tubescript_api - Si funciona: ✅ ¡Listo!
- Si falla: Ver logs y diagnosticar
🆘 SI TODO FALLA
Opción 1: Reinstalar Docker
- Desinstala Docker Desktop
- Descarga la última versión
- Instala
- Reinicia la Mac
- Abre Docker Desktop
- Prueba de nuevo
Opción 2: Usar Python Local
# Instalar en entorno virtual
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
# Ejecutar
uvicorn main:app --reload --port 8080
Opción 3: Contactar Soporte
Si nada funciona, proporciona:
- Logs completos:
docker logs tubescript_api - Versión de Docker:
docker --version - Sistema:
uname -a - Error exacto que ves
📝 RESUMEN DE CAMBIOS EN EL CÓDIGO
| Archivo | Cambio | Línea Aprox. |
|---|---|---|
| main.py | Comando yt-dlp simplificado | ~98-108 |
| main.py | Búsqueda flexible de subtítulos | ~125-145 |
| main.py | Acepta cualquier formato | ~125-145 |
| main.py | Parser multi-formato | ~30-80 |
🎉 RESULTADO ESPERADO
Después de aplicar los cambios:
curl -X GET "http://localhost:8080/transcript/6hini9Xz_fc?lang=es"
Debería retornar:
{
"video_id": "6hini9Xz_fc",
"count": 150,
"segments": [
{
"start": 0.0,
"duration": 2.5,
"text": "Texto del subtítulo..."
},
...
]
}
TubeScript API Pro © 2026
¡Reconstruye Docker y prueba!