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

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

इस गाइड में बताया गया है कि रीयलटाइम स्पीच टू टेक्स्ट API के साथ कमिट किए गए ट्रांसक्रिप्ट पर नैचुरल-लैंग्वेज संपादन निर्देश कैसे लागू करें।

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

ओवरव्यू

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

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

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

ट्रांसक्रिप्ट संपादन को entity_detection या entity_redaction के साथ नहीं जोड़ा जा सकता। दोनों सेट करने वाले कनेक्शन को 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 में शब्द-स्तरीय टाइमस्टैम्प मूल कमिटेड टेक्स्ट का वर्णन करते हैं, संपादित टेक्स्ट का नहीं।

अगले चरण