Transkrip video untuk pipeline RAG dan LLM
Ubah video YouTube dan TikTok menjadi potongan yang bisa dicari dan dikutip LLM: ambil segmen bertanda waktu, potong berdasarkan waktu, dan simpan tautan tanda waktu.
Diperbarui
Singkatnya: ambil transkrip sebagai JSON, bukan teks biasa. Array segments membawa waktu mulai dan selesai untuk setiap baris subtitle, sehingga Anda dapat memotong berdasarkan waktu dan menyimpan waktu mulai sebagai metadata. Dengan begitu, setiap jawaban model Anda dapat menautkan ke momen yang tepat di dalam video.
Mengapa segmen bertanda waktu lebih baik daripada teks biasa#
- Kutipan: potongan yang tahu dirinya dimulai pada detik 754 menjadi tautan ke momen tersebut.
- Batas yang alami: baris subtitle berakhir saat jeda, sehingga potongan jarang memotong kalimat di tengah.
- Asal-usul:
source_originmemberi tahu apakah teks berasal dari kreator, subtitle otomatis dari platform, atau transkripsi AI, danlanguagemenunjukkan bahasanya.
Ambil dan potong#
Kode ini mengambil satu transkrip dan mengelompokkan segmen ke dalam jendela sekitar satu menit. Bentuk JSON transkrip didokumentasikan di referensi API.
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
Banyak video#
- Temukan video dengan penemuan video: pencarian YouTube, channel, playlist, atau profil TikTok.
- Kirim sebagai batch dan biarkan webhook memberi tahu ingester Anda saat setiap tugas selesai, alih-alih polling.
- Membaca ulang dan mengekspor ulang transkrip itu gratis, dan mengirim tautan yang sudah pernah ditranskrip akan mengembalikan hasil yang tersimpan, sehingga menjalankan ulang proses ingest tidak menimbulkan biaya dua kali.
Agen yang mengambil sesuai permintaan#
Tidak semua pipeline memerlukan indeks. Agen yang terhubung ke server MCP Transcript Dock dapat memanggil get_video_transcript saat pengguna menyebut sebuah video dan langsung membaca teksnya ke dalam konteksnya. Untuk framework, lihat LangChain dan n8n.