GUIA DE DESENVOLVIMENTO · DESENVOLVEDORES DE APPS

Como criar um buscador do que é dito dentro dos vídeos do YouTube

A busca do YouTube compara títulos, descrições e tags. Ela não consegue dizer qual dos 400 episódios de um podcast menciona um convidado, livro ou ideia específica, nem em que minuto isso acontece. Um buscador baseado em transcrições consegue, e é um dos produtos úteis mais rápidos de criar com a API.

Para quem é
Redes de podcast, plataformas de cursos, comunidades de fãs, bibliotecas internas de vídeo
Tempo de desenvolvimento
Um fim de semana
Endpoints da API
/channels/resolve/batch/transcripts/{video_id}

O problema que resolve

Grandes bibliotecas de vídeo são, na prática, impossíveis de pesquisar. Fãs vasculham horas de gravação atrás de um momento de que mal se lembram, alunos de cursos reassistem aulas inteiras para achar uma explicação, e empresas perdem conhecimento institucional enterrado em palestras gravadas. Indexar transcrições com timestamps transforma qualquer biblioteca em algo pesquisável como um documento, com resultados que levam direto ao momento certo.

O que incluir na primeira versão

  • Busca por frase e palavra-chave em todos os vídeos de um canal ou playlist
  • Resultados que mostram a frase encontrada com link para o timestamp exato
  • Busca semântica para que "como definir o preço do meu produto" também encontre "quanto cobrar"
  • Filtros por data, vídeo e falante
  • Indexação automática de novos uploads

Como criar, passo a passo

  1. 01

    Reúna a lista de vídeos

    Chame /channels/resolve ou /playlists/resolve com o identificador do canal ou a URL da playlist para obter o ID e o título de cada vídeo.

  2. 02

    Busque as transcrições em lote

    Envie os IDs para /batch com format.timestamp e format.paragraphs ativados. Lotes grandes rodam de forma assíncrona, então consulte /batch/{batch_id} periodicamente ou use um webhook.

  3. 03

    Indexe os segmentos

    Armazene cada parágrafo com o ID do vídeo e o tempo de início. A busca full-text do Postgres basta para palavras-chave; adicione embeddings no pgvector ou em um banco vetorial para buscar por significado.

  4. 04

    Crie a interface de busca

    Retorne os melhores resultados com o texto ao redor e um link no formato youtube.com/watch?v=ID&t=SEGUNDOS para que o usuário caia no momento exato.

  5. 05

    Mantenha tudo atualizado

    Rode uma tarefa agendada que resolve o canal de novo, encontra os novos IDs de vídeo e transcreve só esses.

Código inicial

Esta ideia segue o padrão "Receita 3: carregue uma playlist inteira em uma base de conhecimento". Use seus próprios canais, prompts e armazenamento.

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 que vale a pena criar

Venda para o dono da biblioteca, não para o espectador: redes de podcast, plataformas de cursos e empresas com acervos internos de vídeo pagam uma mensalidade por uma busca que mantém o público engajado. Para comunidades de fãs, também funciona uma busca pública gratuita com um plano pago para alertas ou acesso via API.

Erros a evitar

  • Indexar a transcrição inteira como um único documento: sem timestamps por parágrafo, os resultados ficam inúteis.
  • Retranscrever o canal inteiro a cada atualização em vez de registrar quais IDs de vídeo você já processou.
  • Depender só de correspondência exata de palavras: a fala é bagunçada, então adicione busca semântica cedo.

Dúvidas sobre esta ideia

Preciso de um banco vetorial para pesquisar transcrições do YouTube?

Não. A busca full-text do Postgres resolve bem a busca por palavras-chave na maioria das bibliotecas. Adicione embeddings quando quiser resultados que correspondam ao significado, e não às palavras exatas.

Como faço um resultado de busca levar ao momento exato do vídeo?

Cada segmento da transcrição traz um tempo de início em segundos. Acrescente &t= seguido desse número à URL do YouTube.

Posso indexar vídeos que não têm legendas?

Sim. Ative allow_asr com uma URL de webhook e a API transcreve o áudio com reconhecimento de fala por IA quando faltam legendas.

Comece a criar hoje

10 créditos grátis todo mês. Sem cartão de crédito.

Como criar um buscador de vídeos do YouTube por conteúdo | YouTubeTranscript.dev