Videotranskript för RAG och LLM-pipelines
Gör YouTube- och TikTok-videor till delar som en LLM kan söka i och citera: hämta tidsatta segment, dela upp efter tid och behåll tidsstämpellänkar.
Uppdaterad
Kort svar: hämta transkriptet som JSON, inte som ren text. Arrayen segments innehåller en starttid och sluttid för varje undertextrad, så att du kan dela upp efter tid och spara starttiden som metadata. Då kan varje svar din modell ger länka till exakt det ögonblick i videon.
Varför tidsatta segment slår ren text#
- Källhänvisningar: en del som vet att den startar vid 754 sekunder blir en länk till just det ögonblicket.
- Naturliga gränser: undertextraderna slutar vid pauser, så delarna delar sällan en mening mitt itu.
- Ursprung:
source_originvisar om texten kommer från skaparen, plattformens automatiska undertexter eller AI-transkription, ochlanguageanger språket.
Hämta och dela upp#
Det här hämtar ett transkript och grupperar segment i fönster på ungefär en minut. Strukturen för transkript-JSON beskrivs i API-referensen.
import requestsAPI = "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 = [], Nonefor 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 = [], Noneif 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
Många videor#
- Hitta videorna med videosökning: YouTube-sökning, en kanal, en spellista eller en TikTok-profil.
- Skicka dem som en batch och låt en webhook berätta för ditt inläsningsflöde när varje jobb är klart, i stället för att fråga efter status.
- Att läsa och exportera ett transkript igen är gratis, och om du skickar in en länk som du redan har transkriberat får du det sparade resultatet tillbaka. Att köra ett inläsningsflöde igen kostar alltså inte två gånger.
Agenter som hämtar vid behov#
Inte varje pipeline behöver ett index. En agent som är ansluten till Transcript Dock MCP-servern kan anropa get_video_transcript när en användare nämner en video och läsa texten direkt in i sitt sammanhang. För ramverk, se LangChain och n8n.