ट्रांसक्रिप्ट संपादन

यह गाइड आपको रीयलटाइम स्पीच टू टेक्स्ट API के साथ कमिट किए गए ट्रांसक्रिप्ट पर प्राकृतिक भाषा में संपादन निर्देश लागू करना दिखाती है।

कैसे करें गाइड · मानता है कि आपने क्लाइंट-साइड या सर्वर-साइड स्ट्रीमिंग गाइड पूरी कर ली है।

खास जानकारी

ट्रांसक्रिप्ट एडिटिंग एक प्रायोगिक सुविधा है और हर कमिट किए गए ट्रांसक्रिप्ट के लिए कम-से-कम 10 सेकंड के ऑडियो पर बिल किए जाने वाले बेस ट्रांसक्रिप्शन खर्च में 30% प्रीमियम जोड़ती है। विस्तृत कीमतों की जानकारी के लिए API प्राइसिंग पेज देखें।

रियलटाइम ट्रांसक्रिप्शन हर कमिट किए गए ट्रांसक्रिप्ट पर प्राकृतिक भाषा में दिया गया एडिट निर्देश लागू कर सकता है। उदाहरण के लिए, बोले गए तारीखों को एक तय फ़ॉर्मैट में लिखने या संक्षिप्त रूपों और एक्रोनिम्स को विस्तृत करने के लिए। कनेक्शन खुलने पर निर्देश एक बार भेजा जाता है और हर कमिट किए गए ट्रांसक्रिप्ट के बाद एडिट किए गए टेक्स्ट के साथ अलग edited_transcript इवेंट आता है।

आंशिक ट्रांसक्रिप्ट कभी एडिट नहीं किए जाते। committed_transcript इवेंट भी नहीं बदलता, इसलिए सुविधा चालू करने पर मौजूदा इंटीग्रेशन काम करते रहेंगे।

ट्रांसक्रिप्ट एडिटिंग को entity_detection के साथ नहीं जोड़ा जा सकता। दोनों सेट करने वाले कनेक्शन invalid_request एरर के साथ अस्वीकार कर दिए जाते हैं।

ट्रांसक्रिप्ट एडिटिंग चालू करना

कनेक्ट करते समय transcriptEdit विकल्प (WebSocket API का transcript_edit क्वेरी पैरामीटर) के साथ निर्देश दें। निर्देश 2000 वर्णों तक लंबा हो सकता है। निर्देश लिखने के बारे में मार्गदर्शन के लिए बैच ट्रांसक्रिप्ट एडिटिंग गाइड देखें।

सभी SDK में एडिट किए गए ट्रांसक्रिप्ट RealtimeEvents.EDITED_TRANSCRIPT इवेंट के ज़रिए आते हैं।

क्लाइंट-साइड

ब्राउज़र में अपने सर्वर से जारी किए गए सिंगल-यूज़ टोकन के साथ @elevenlabs/client का इस्तेमाल करें, जैसा क्लाइंट-साइड स्ट्रीमिंग गाइड में बताया गया है।

import { Scribe, RealtimeEvents } from "@elevenlabs/client";
// Fetch a single-use token from your server first
const response = await fetch("/scribe-token", yourAuthHeaders);
const { token } = await response.json();
const connection = Scribe.connect({
token,
modelId: "scribe_v2_realtime",
transcriptEdit: "Write all dates in ISO 8601 format (YYYY-MM-DD)",
microphone: {
echoCancellation: true,
noiseSuppression: true,
},
});
connection.on(RealtimeEvents.COMMITTED_TRANSCRIPT, (data) => {
console.log("Committed:", data.text);
});
connection.on(RealtimeEvents.EDITED_TRANSCRIPT, (data) => {
console.log("Edited:", data.edited_text);
});

सर्वर-साइड

अपने सर्वर पर आधिकारिक SDK का इस्तेमाल करें, जैसा सर्वर-साइड स्ट्रीमिंग गाइड में बताया गया है। उस गाइड से सिर्फ़ विकल्प और इवेंट हैंडलर अलग हैं; ऑडियो भेजना और कनेक्शन बंद करना उसी तरह काम करता है।

import asyncio
import os
from dotenv import load_dotenv
from elevenlabs import AudioFormat, ElevenLabs, RealtimeAudioOptions, RealtimeEvents
load_dotenv()
async def main():
elevenlabs = ElevenLabs(api_key=os.getenv("ELEVENLABS_API_KEY"))
connection = await elevenlabs.speech_to_text.realtime.connect(RealtimeAudioOptions(
model_id="scribe_v2_realtime",
audio_format=AudioFormat.PCM_16000,
sample_rate=16000,
transcript_edit="Write all dates in ISO 8601 format (YYYY-MM-DD)",
))
def on_committed_transcript(data):
print(f"Committed: {data.get('text', '')}")
def on_edited_transcript(data):
print(f"Edited: {data.get('edited_text', '')}")
connection.on(RealtimeEvents.COMMITTED_TRANSCRIPT, on_committed_transcript)
connection.on(RealtimeEvents.EDITED_TRANSCRIPT, on_edited_transcript)
# Send audio chunks as shown in the server-side streaming guide, then close.
await connection.close()
if __name__ == "__main__":
asyncio.run(main())

एडिट किए गए ट्रांसक्रिप्ट पाना

चालू होने पर, हर कमिट किए गए ट्रांसक्रिप्ट के बाद कमिट किया गया टेक्स्ट और उसका एडिट किया गया वर्शन देने वाला edited_transcript इवेंट आता है:

{
"message_type": "edited_transcript",
"text": "our next meeting is on the twelfth of July twenty twenty-six",
"edited_text": "our next meeting is on 2026-07-12"
}

ध्यान देने योग्य व्यवहार:

  • एडिट हर कमिट किए गए सेगमेंट पर लागू होते हैं। एडिटिंग असिंक्रोनस रूप से चलती है, इसलिए संबंधित committed_transcript इवेंट के तुरंत बाद edited_transcript इवेंट भेजा जाता है। यह अगले आंशिक ट्रांसक्रिप्ट के बाद आ सकता है और लगातार सेगमेंट के एडिट क्रम से बाहर आ सकते हैं। किसी एडिट को उसके कमिट किए गए ट्रांसक्रिप्ट से मिलाने के लिए text फ़ील्ड का इस्तेमाल करें।
  • अगर किसी सेगमेंट में कोई एडिट नहीं किया गया, तो edited_text, text के समान होगा।
  • अगर किसी सेगमेंट के लिए एडिट नहीं बनाया जा सकता, तो उसके लिए कोई edited_transcript इवेंट नहीं भेजा जाता। committed_transcript इवेंट पर इसका असर नहीं पड़ता।
  • committed_transcript_with_timestamps में शब्द-स्तर के टाइमस्टैम्प मूल कमिट किए गए टेक्स्ट का वर्णन करते हैं, एडिट किए गए टेक्स्ट का नहीं।

अगले चरण