RAG और LLM पाइपलाइन के लिए वीडियो ट्रांसक्रिप्ट
YouTube और TikTok वीडियो को ऐसे चंक में बदलें जिन्हें LLM खोज सके और जिनका हवाला दे सके: समय वाले सेगमेंट लें, समय के हिसाब से चंक बनाएं, और टाइमस्टैम्प लिंक सहेजें।
अपडेट किया गया
छोटा जवाब: ट्रांसक्रिप्ट को सादे टेक्स्ट की जगह JSON में लें। segments ऐरे में हर कैप्शन लाइन का शुरू और खत्म होने का समय होता है, इसलिए आप समय के हिसाब से चंक बना सकते हैं और शुरुआती समय को मेटाडेटा के रूप में सहेज सकते हैं। फिर आपके मॉडल का हर जवाब वीडियो के ठीक उसी पल का लिंक दे सकता है।
समय वाले सेगमेंट सादे टेक्स्ट से बेहतर क्यों हैं#
- हवाले: जिस चंक को पता है कि वह 754 सेकंड पर शुरू होता है, वह उस पल का लिंक बन जाता है।
- स्वाभाविक सीमाएं: कैप्शन लाइनें ठहराव पर खत्म होती हैं, इसलिए चंक शायद ही कभी किसी वाक्य को बीच में काटते हैं।
- स्रोत की जानकारी:
source_originबताता है कि टेक्स्ट क्रिएटर से आया, प्लेटफ़ॉर्म के अपने आप बने कैप्शन से या AI ट्रांसक्रिप्शन से, औरlanguageउसकी भाषा बताता है।
लाएं और चंक बनाएं#
यह एक ट्रांसक्रिप्ट लाता है और सेगमेंट को लगभग एक मिनट की विंडो में जोड़ता है। ट्रांसक्रिप्ट JSON का ढांचा 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
कई वीडियो#
- वीडियो डिस्कवरी से वीडियो खोजें: YouTube सर्च, कोई चैनल, कोई प्लेलिस्ट या TikTok प्रोफ़ाइल।
- उन्हें बैच के रूप में सबमिट करें और पोलिंग की जगह वेबहुक से अपने इंजेस्टर को बताने दें कि हर जॉब कब खत्म हुआ।
- ट्रांसक्रिप्ट को दोबारा पढ़ना और एक्सपोर्ट करना मुफ़्त है, और जिस लिंक का ट्रांसक्रिप्ट पहले बन चुका है उसे फिर सबमिट करने पर सहेजा हुआ नतीजा मिलता है, इसलिए इंजेस्ट दोबारा चलाने पर दो बार खर्च नहीं होता।
ज़रूरत पड़ने पर ट्रांसक्रिप्ट लाने वाले एजेंट#
हर पाइपलाइन को इंडेक्स की ज़रूरत नहीं होती। Transcript Dock MCP सर्वर से जुड़ा एजेंट, जब कोई यूज़र किसी वीडियो का ज़िक्र करे, get_video_transcript कॉल कर सकता है और टेक्स्ट सीधे अपने कॉन्टेक्स्ट में पढ़ सकता है। फ़्रेमवर्क के लिए LangChain और n8n देखें।