GUÍA DE DESARROLLO · DESARROLLADORES DE APPS

Cómo crear un buscador de lo que se dice dentro de los vídeos de YouTube

La búsqueda de YouTube compara títulos, descripciones y etiquetas. No puede decirte cuál de 400 episodios de un pódcast menciona a un invitado, un libro o una idea concretos, ni en qué minuto ocurre. Un buscador basado en transcripciones sí puede, y es uno de los productos útiles más rápidos de construir con la API.

Para quién es
Redes de pódcasts, plataformas de cursos, comunidades de fans, videotecas internas
Tiempo de desarrollo
Un fin de semana
Endpoints de la API
/channels/resolve/batch/transcripts/{video_id}

El problema que resuelve

En la práctica, es imposible buscar en las grandes videotecas. Los fans recorren horas de grabaciones para encontrar un momento que recuerdan a medias, los alumnos de un curso vuelven a ver lecciones enteras para encontrar una explicación y las empresas pierden conocimiento interno enterrado en charlas grabadas. Indexar transcripciones con marcas de tiempo convierte cualquier videoteca en algo que puedes buscar como un documento, con resultados que saltan directamente al momento adecuado.

Qué incluir en tu primera versión

  • Búsqueda por frase y palabra clave en todos los vídeos de un canal o una lista de reproducción
  • Resultados que muestran la frase coincidente con un enlace a la marca de tiempo exacta
  • Búsqueda semántica para que "cómo pongo precio a mi producto" también encuentre "fijar tus tarifas"
  • Filtros por fecha, vídeo y orador
  • Indexación automática de los nuevos vídeos

Cómo construirlo, paso a paso

  1. 01

    Reúne la lista de vídeos

    Llama a /channels/resolve o /playlists/resolve con el identificador del canal o la URL de la lista para obtener el ID y el título de cada vídeo.

  2. 02

    Obtén las transcripciones en bloque

    Envía los IDs a /batch con format.timestamp y format.paragraphs activados. Los lotes grandes se procesan de forma asíncrona, así que consulta /batch/{batch_id} o usa un webhook.

  3. 03

    Indexa los segmentos

    Guarda cada párrafo con el ID del vídeo y su tiempo de inicio. La búsqueda de texto completo de Postgres basta para buscar por palabras clave; añade embeddings en pgvector o en una base de datos vectorial para buscar por significado.

  4. 04

    Crea la interfaz de búsqueda

    Devuelve las mejores coincidencias con el texto de alrededor y un enlace del tipo youtube.com/watch?v=ID&t=SECONDS para que los usuarios lleguen al momento exacto.

  5. 05

    Mantenlo actualizado

    Programa una tarea que vuelva a resolver el canal, detecte los IDs de vídeo nuevos y transcriba solo esos.

Código de inicio

Esta idea se basa en el patrón "Receta 3: carga en bloque una lista de reproducción en una base de conocimiento". Usa tus propios canales, prompts y almacenamiento.

import requests

API = "https://www.youtubetranscript.dev/api/v2"
HEADERS = {"Authorization": "Bearer yt_sk_live_YOUR_KEY"}

playlist = requests.post(f"{API}/playlists/resolve", headers=HEADERS,
                         json={"playlist_url": "https://www.youtube.com/playlist?list=PLAYLIST_ID",
                               "limit": 100}).json()

ids = [v["video_id"] for v in playlist["items"]]
batch = requests.post(f"{API}/batch", headers=HEADERS, json={
    "video_ids": ids,
    "format": {"timestamp": True, "paragraphs": True},
}).json()

# Large batches run async: poll GET /batch/{batch_id} until status is "completed"
for r in batch.get("results", []):
    if r["status"] == "completed":
        for p in r["data"]["transcript"].get("paragraphs") or []:
            store(video_id=r["video_id"], start=p["start"], text=p["text"])  # your vector DB

Por qué vale la pena construirlo

Véndeselo al propietario de la videoteca, no al espectador: las redes de pódcasts, las plataformas de cursos y las empresas con archivos de vídeo internos pagarán una cuota mensual por una búsqueda que mantenga a su audiencia enganchada. Para comunidades de fans también funciona una búsqueda pública gratuita con un plan de pago para alertas o acceso a la API.

Errores que debes evitar

  • Indexar cada transcripción completa como un único documento: sin marcas de tiempo por párrafo, los resultados no sirven de nada.
  • Volver a transcribir todo el canal en cada actualización en lugar de llevar un registro de los IDs de vídeo ya procesados.
  • Depender solo de coincidencias exactas de palabras clave: el lenguaje hablado es desordenado, así que añade búsqueda semántica pronto.

Preguntas sobre esta idea

¿Necesito una base de datos vectorial para buscar en transcripciones de YouTube?

No. La búsqueda de texto completo de Postgres resuelve bien la búsqueda por palabras clave para la mayoría de las videotecas. Añade embeddings cuando quieras resultados que coincidan en significado y no solo en palabras exactas.

¿Cómo enlazo un resultado de búsqueda al momento exacto del vídeo?

Cada segmento de la transcripción incluye un tiempo de inicio en segundos. Añade &t= seguido de ese número a la URL de YouTube.

¿Puedo indexar vídeos que no tienen subtítulos?

Sí. Activa allow_asr con una URL de webhook y la API transcribirá el audio con reconocimiento de voz por IA cuando falten los subtítulos.

Empieza a construir hoy

10 créditos gratis cada mes. No necesitas tarjeta de crédito.

Cómo crear un buscador dentro de vídeos de YouTube | YouTubeTranscript.dev