नेविगेशन पर जाएँ

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

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

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

परिचय

ट्रांसक्रिप्ट एडिटिंग एक एक्सपेरिमेंटल सुविधा है और बेस ट्रांसक्रिप्शन लागत पर 30% प्रीमियम जोड़ती है। हर कमिट किए गए ट्रांसक्रिप्ट के लिए कम-से-कम 10 सेकंड के ऑडियो का बिल लिया जाता है। विस्तृत कीमत की जानकारी के लिए 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"
}

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

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

अगले चरण