Pular para o conteúdo
Transcript Dock
EntrarComeçar grátis

Menu do site

Transcript Dock

Transcrições de vídeo para pipelines de RAG e LLM

Transforme vídeos do YouTube e do TikTok em blocos que um LLM pode buscar e citar: busque os segmentos com tempo, divida por tempo e mantenha links com marcação de tempo.

Resposta curta: busque a transcrição em JSON, não em texto simples. O array segments traz um horário de início e de fim para cada linha de legenda, então você pode dividir por tempo e guardar o início como metadado. Assim, cada resposta do seu modelo pode linkar para o momento exato do vídeo.

Por que segmentos com tempo superam o texto simples#

  • Citações: um bloco que sabe que começa aos 754 segundos vira um link para esse momento.
  • Limites naturais: as linhas de legenda terminam nas pausas, então os blocos raramente cortam uma frase ao meio.
  • Procedência: source_origin informa se o texto veio do criador, das legendas automáticas da plataforma ou da transcrição por IA, e language informa o idioma.

Buscar e dividir em blocos#

Este código busca uma transcrição e agrupa os segmentos em janelas de cerca de um minuto. O formato do JSON da transcrição está documentado na referência da API.

rag_ingest.py
import requests
 
API = "https://www.transcriptdock.com"
H = {"Authorization": "Bearer td_live_YOUR_KEY"}
 
def transcript(url: str) -> dict:
job = requests.post(f"{API}/v1/jobs", headers={**H, "Idempotency-Key": f"rag-{url}"[:128]},
json={"source": {"url": url}, "mode": "captions_only"}).json()
while job["status"] not in ("succeeded", "failed", "cancelled"):
job = requests.get(f"{API}/v1/jobs/{job['id']}", params={"wait": 25}, headers=H).json()
if job["status"] != "succeeded":
raise RuntimeError(job["error"]["code"])
return requests.get(f"{API}/v1/transcripts/{job['result_id']}", headers=H).json()
 
def chunks(t: dict, seconds: float = 60.0):
"""Group caption segments into windows of about `seconds`, never splitting a segment."""
url = t["source"]["canonical_url"]
buf, start = [], None
for seg in t["segments"]:
if start is None:
start = seg["start"]
buf.append(seg["text"])
if seg["end"] - start >= seconds:
yield {"text": " ".join(buf), "start": start, "url": f"{url}&t={int(start)}s" if "youtube" in url else url}
buf, start = [], None
if buf:
yield {"text": " ".join(buf), "start": start, "url": url}
 
t = transcript("https://www.youtube.com/watch?v=dQw4w9WgXcQ")
for c in chunks(t):
print(c["start"], c["url"], c["text"][:80]) # embed c["text"], store start and url as metadata

Muitos vídeos#

  • Encontre os vídeos com a descoberta de vídeos: busca no YouTube, um canal, uma playlist ou um perfil do TikTok.
  • Envie-os como um lote e deixe um webhook avisar o seu ingestor quando cada tarefa terminar, em vez de ficar consultando o status.
  • Ler de novo e reexportar uma transcrição é grátis, e enviar um link que você já transcreveu devolve o resultado armazenado; assim, rodar uma ingestão novamente não custa duas vezes.

Agentes que buscam sob demanda#

Nem todo pipeline precisa de um índice. Um agente conectado ao servidor MCP do Transcript Dock pode chamar get_video_transcript quando um usuário mencionar um vídeo e ler o texto diretamente no contexto dele. Para frameworks, veja LangChain e n8n.