Subtítulos de yt-dlp versus una API de Transcripción: Cuál Usar

yt-dlp puede descargar subtítulos para básicamente cualquier video de YouTube, y si lo has usado para descargas de medios probablemente ya hayas descubierto los flags. Es una herramienta genuinamente excelente — la mantengo instalada en todas partes. Pero "puede descargar subtítulos" y "es la forma correcta de obtener transcripciones en un servicio" son reclamos diferentes, y he sido quemado por confundirlos. Aquí está lo que cada enfoque realmente parece, incluyendo el paso de limpieza que nadie te advierte.
El camino de yt-dlp, de principio a fin
Agarrando subtítulos en inglés generados automáticamente sin descargar el video:
yt-dlp --write-auto-sub --sub-lang en --skip-download \
-o "%(id)s" "https://www.youtube.com/watch?v=VIDEO_ID"
(Usa --write-sub en lugar de eso para pistas cargadas por humanos, o ambos flags juntos.) Esto suelta un archivo VIDEO_ID.en.vtt. Abrelo y verás por qué no has terminado:
WEBVTT
Kind: captions
Language: en
00:00:00.320 --> 00:00:02.879
so today we're going to look at
00:00:01.760 --> 00:00:04.560
so today we're going to look at
how youtube handles
Los subtítulos automáticos son leyendas "rodantes" — cada cue repite la línea anterior, así que el despojo ingenuo te da cada oración dos veces. Todos los que bajan por este camino terminan escribiendo alguna versión de esta limpieza:
import re, pathlib
lines = []
for line in pathlib.Path("VIDEO_ID.en.vtt").read_text().splitlines():
if "-->" in line or line.startswith(("WEBVTT", "Kind:", "Language:")) or not line.strip():
continue
line = re.sub(r"<[^>]+>", "", line).strip() # strip inline timing tags
if not lines or line != lines[-1]: # collapse rolling duplicates
lines.append(line)
text = " ".join(lines)
Comando, manejo de subproceso, I/O de archivo, dedup — llámalo 40 líneas de pegamento antes de que tengas texto plano.
Dónde yt-dlp es la respuesta correcta
- Archivo sin conexión masivo. Apúntalo a una URL de canal y caminará cada video, subtítulos incluidos, reanudable y gratuito. Para construir un archivo personal en tu conexión casera, nada lo supera.
- Quieres los archivos de subtítulos mismos. Si srt/vtt con tiempo es el entregable — alimentar un editor de video, preservar tiempo de cue exacto — yt-dlp te da el artefacto crudo.
- Ya estás descargando los medios. ¿Ya sacando audio para transcripción de Whisper? Agregar
--write-auto-subes un flag. - Presupuesto cero, escala personal. En una IP residencial a velocidades humanas, simplemente funciona.
Dónde duele en un servidor
Tres cargas de mantenimiento separadas aparecen en el momento en que yt-dlp se mueve a un backend:
- La cinta rodante binaria. YouTube cambia sus internos constantemente, y yt-dlp envía correcciones constantemente — eso es una característica, pero significa que tu dependencia de producción necesita actualizaciones frecuentes o la extracción comienza a fallar.
- Bloqueo de IP. Desde direcciones de AWS/GCP/Heroku, espera errores "Inicia sesión para confirmar que no eres un bot". Esta es la misma pared que bloquea youtube-transcript-api en la nube — cambiar herramientas no cambia tu reputación de IP.
- El código pegamento. Gestión de subproceso, archivos temporales, la limpieza de vtt anterior, pistas no inglesas, detección de leyenda faltante a través de códigos de salida y análisis de stderr.
El camino de la API
La versión de punto final alojado de todo el pipeline anterior:
curl -s "https://youtube2text.org/api/transcribe?url=VIDEO_ID" \
-H "x-api-key: yt_YOUR_KEY"
Devuelve JSON — {"result": {"videoId", "title", "pubDate", "content", ...}} — ya texto plano desduplicado, con errores estructurados (TRANSCRIPT_UNAVAILABLE cuando no existen subtítulos, en lugar de arqueología de stderr). Una clave demo compartida es una llamada de distancia (curl -s https://youtube2text.org/api/demo-key, 5 videos/mes por IP); el quickstart completo está en extrayendo transcripciones con curl.
La nota a pie de página honesta
Ambos enfoques obtienen los mismos subtítulos del mismo lugar, y ambos tienen que lidiar con YouTube no queriendo tráfico automatizado. yt-dlp hace eso tu problema — bien en un portátil, un proyecto proxy en un servidor. Una API alojada lo hace el problema del proveedor: youtube2text.org enruta capturas a través de proxies residenciales rotativos del lado del servidor, que es precisamente la pieza que no puedes replicar fácilmente desde una IP del centro de datos. No estás pagando por la transcripción; estás pagando por no operar eso.
Mi división: yt-dlp para archivos y de una sola vez en mi propia máquina, la API para cualquier cosa que se ejecute desatendida. Si eso coincide con tu situación, las claves están en youtube2text.org/app/keys — inicio de sesión de Google, nivel gratuito de 5/mes, pagado desde $5.99.