Ollama: Resume Videos de YouTube Sin Pagar por Tokens

Puedes hacer que Ollama resuma videos de YouTube con una tubería de shell: obtén la transcripción a través de HTTP, extrae el texto con jq, aliméntalo a un modelo local. Sin factura de OpenAI, sin datos dejando tu máquina excepto la obtención de transcripción misma. Aquí está la tubería, las matemáticas de ventana de contexto que la hacen funcionar, y dónde se queda corta.
El one-liner
Agarra la clave demo compartida primero (u trae la tuya — más sobre eso abajo):
API_KEY=$(curl -s https://youtube2text.org/api/demo-key | jq -r .apiKey)
Entonces:
curl -s "https://youtube2text.org/api/transcribe?url=https://www.youtube.com/watch?v=VIDEO_ID&maxChars=12000" \
-H "x-api-key: $API_KEY" \
| jq -r .result.content \
| ollama run llama3.1 "Summarize this video transcript in five bullet points:"
La API devuelve {"result": {"videoId", "title", "pubDate", "content", ...}}; jq -r .result.content lo reduce a texto sin procesar, y Ollama añade el stdin canalizado al argumento del prompt. Treinta segundos después tienes puntos de viñeta y YouTube nunca vio una solicitud de tu IP — la obtención de transcripción va a través de youtube2text.org, que maneja la parte que se bloquea cuando raspa desde tu propia máquina.
Por qué maxChars=12000
Este es el número que la gente se equivoca. Ollama ejecuta modelos con un contexto de 4096 tokens por defecto, y todo compite por él: tu prompt, la transcripción, y la salida del modelo. A aproximadamente 4 caracteres por token, 12,000 caracteres de transcripción son ~3,000 tokens, dejando margen para el resumen. Canaliza un podcast completo de 90 minutos en el límite predeterminado de 150,000 caracteres de la API y Ollama silenciosamente trunca desde el frente — el modelo resume los últimos diez minutos e ignora confiadamente el resto. Sin error, solo una respuesta incorrecta.
Si tu hardware tiene RAM de sobra, sube ambos extremos juntos:
OLLAMA_CONTEXT_LENGTH=16384 ollama serve
entonces aumenta maxChars a alrededor de 50000. Escala los dos números juntos o estás de vuelta a truncamiento silencioso.
Conviértelo en una función de shell
yt-summary() {
curl -s "https://youtube2text.org/api/transcribe?url=$1&maxChars=12000" \
-H "x-api-key: $API_KEY" \
| jq -r .result.content \
| ollama run llama3.1 "Summarize this video transcript in five bullet points:"
}
yt-summary "https://www.youtube.com/watch?v=VIDEO_ID"
Intercambia el prompt por lo que realmente necesites — "extrae cada herramienta mencionada", "lista los elementos de acción", "traducir al alemán". Misma tubería, instrucción diferente. Para convertir conferencias en notas estructuradas hay un flujo de trabajo más largo en notas de estudio de videos de conferencias.
El caso de privacidad y costo
Solo una cosa sale de tu máquina: la solicitud de transcripción a youtube2text.org. El contenido del video, tus prompts, y la salida del modelo se quedan todos locales. Para cualquiera que resuma videos de entrenamiento internos, investigación de competencia, o contenido que prefería no enviar a un LLM en la nube, ese es el argumento completo. Del lado del costo: la inferencia de LLM es gratuita para siempre; la única pieza medida es la obtención de transcripción.
Dónde se queda corta
Limitación honesta: un modelo 8B resumiendo un segmento limitado de un video de una hora perderá cosas. maxChars trunca desde un presupuesto fijo, y llama3.1 en contexto 4k no está haciendo síntesis profunda — está haciendo compresión competente de lo que cabe. Para "¿vale la pena este video mi tiempo" triaje rápido es excelente. Para extracción de grado investigativo en contenido largo, ya sea ejecuta un modelo más grande con una ventana de contexto real o indexa todo adecuadamente — ver RAG sobre un canal de YouTube para esa ruta.
También: la clave demo se comparte y se limita a 5 videos por mes por IP. Existe para que el one-liner anterior funcione antes de que te hayas registrado en nada. Una vez que hayas pasado el tiralíneas, obtén tu propia clave — el nivel gratuito también es 5 videos/mes pero es tuyo, y $5.99 compra 50.