पेज होइन, स्ट्रिम टाँस्नुहोस्। स्टेसनको वास्तविक अडियो .mp3, .aac वा .m3u8 मा अन्त्य हुने ठेगानामा हुन्छ, र एकपटक लाइभ ट्रान्सक्रिप्सनसँग त्यो ठेगाना भएपछि कसैले सुनिरहनु पर्दैन।
समाचार कक्षले तीनवटा रेडियो स्टेसन, दुईवटा टेलिभिजन स्ट्रिम र केही YouTube लाइभ निगरानी गर्ने हो भने, ट्रान्सक्रिप्सनको समस्या आउनु अघि नै कर्मचारी व्यवस्थापनको समस्या आउँछ। कसैले सुनिरहनुपर्छ, र कसैले रेकर्ड थिच्नुपर्छ। स्ट्रिमको ठेगाना दिएपछि लाइभ ट्रान्सक्रिप्सनले दुवै काम सम्हाल्छ: सर्भरले त्यो स्ट्रिम खोल्छ, डिकोड गर्छ र प्रसारण हुँदैगर्दा ट्रान्सक्रिप्ट गर्छ, त्यसैले पत्रकार सम्मेलन अचानक सुरु हुँदा कसैले डेस्कमा बस्नुपर्दैन। गाह्रो काम, यसरी देखिन्छ, ठेगाना फेला पार्नु हो।
लाइभ ट्रान्सक्रिप्सनले सर्भरले आफैं तान्ने स्ट्रिमबाट अडियो लिन सक्छ: इन्टरनेट रेडियो स्टेसन, HLS प्लेलिस्ट (.m3u8), DASH म्यानिफेस्ट (.mpd), वा YouTube लाइभ। ड्यासबोर्डमा यो भनेको Transcriptions → New → Live मा नयाँ लाइभ ट्रान्सक्रिप्सन हो, जसको स्रोत माइक्रोफोन होइन, स्ट्रिम हो। ठेगाना ट्रान्सक्रिप्सन बनाउँदा सेट हुन्छ र कहिल्यै बदलिँदैन, त्यसैले निगरानी एकपटक सेटअप गरिन्छ र स्टेसन रेकर्ड गर्न लायक हुँदा सुरु गरिन्छ।
ठेगाना वेब पेज होइन, त्यसले बजाउने स्ट्रिम नै हुनुपर्छ। स्टेसनको पेज HTML हो; त्यसले बजाउने अडियो सामान्यतया Icecast वा Shoutcast सर्भरबाट आउँछ, र पेजको प्लेयरले पेज लोड भएपछि JavaScript मार्फत त्यो ठेगाना खोज्छ। साइटमा “Listen”, “Direct stream” वा “Other players” लिङ्क खोज्नुहोस्: त्यसको अन्त्य .mp3, .aac, .m3u, .m3u8 वा .pls मा हुन्छ। .pls वा .m3u पनि अडियो होइन। यो केही पङ्क्तिको छोटो पाठ फाइल हो, जसमा हरेकमा एउटा स्ट्रिमको ठेगाना हुन्छ; यसले डेस्कटप प्लेयरलाई एउटै लिङ्क दिन सक्छ, र VocalStack ले यसले नाम दिएको स्ट्रिम ट्रान्सक्रिप्ट गर्छ। यदि तपाईंले त्यसको सट्टा पेज टाँस्नुभयो भने, VocalStack ले पेजको अनुरोध गर्छ, HTML फर्केको देख्छ र तपाईंलाई त्यो बताउँछ। प्रत्येक स्टेसनले स्ट्रिम अलिक फरक तरिकाले लुकाउँछ; धेरैले यसलाई “Listen” लेबल भएको बटनभित्र लुकाउँछन्, र पेजमा सबैभन्दा कम क्लिक गर्नुपर्ने चिज त्यही हो।
दुई प्रकारका लिङ्क सिधै अस्वीकार गरिन्छन्। Spotify, SoundCloud वा Twitch जस्ता मिडिया बजाउने पेजका लिङ्क कुनै पनि जडान हुनु अघि नै रोकिन्छन्। कपी-सुरक्षित स्ट्रिम पनि समर्थित छैन: DRM लाइसेन्स चाहिने प्लेलिस्ट वा म्यानिफेस्ट त्यो भन्ने सन्देशसहित असफल हुन्छ। केही स्ट्रिमले स्टेसनको देशबाहिरका अनुरोध पनि अस्वीकार गर्छन्, त्यसैले कार्यालयमा बजिरहेको ठेगाना विदेशको सर्भरबाट नचल्न सक्छ। यदि स्ट्रिम ब्राउजरमा बज्छ तर VocalStack मा बज्दैन भने, स्टेसनले अन्य प्लेयरलाई रोकेको हो; अरू एपले प्रयोग गर्न पाउने ठेगाना स्टेसनसँग माग्नुहोस्। धेरैले MP3, AAC वा HLS स्ट्रिम दिन्छन्। सही ठेगाना पाएपछि अर्को प्रश्न हो, त्यो कहिल्यै अन्त्य हुन्छ कि हुँदैन।
लाइभ स्ट्रिम कहिल्यै अन्त्य हुँदैन, त्यसैले त्यो फाइल होइन। यो भिन्नता YouTube का लागि विशेष महत्त्वको छ। प्रसारणमा रहेको YouTube लाइभ लाइभ ट्रान्सक्रिप्सनमा पर्छ, र ड्यासबोर्डले त्यो प्रसारण हुँदै जाँदा पछ्याउँछ। तय गरिएको तर सुरु नभएको YouTube लाइभ Not live yet देखाइन्छ, र प्रसारणमा आएपछि रेकर्ड गर्न सकिन्छ। सकिएको भिडियो फरक कुरा हो: त्यसको लम्बाइ हुन्छ, त्यसैले त्यो फाइलका रूपमा ट्रान्सक्रिप्ट हुन्छ: लिङ्क Transcriptions → New मा टाँस्नुहोस्।
प्लेलिस्टले आफैं बताउँछ कि त्यो कुन हो, र कुनै पनि प्लेयरले यही भिन्नता छुट्याउँछ। सकिएको HLS प्लेलिस्टमा #EXT-X-ENDLIST ट्याग वा #EXT-X-PLAYLIST-TYPE:VOD हुन्छ; लाइभमा दुवै हुँदैनन् र त्यो बढिरहन्छ, त्यसैले प्लेयरले हरेक केही सेकेन्डमा नयाँ सेगमेन्टका लागि त्यसलाई फेरि लिन्छ। DASH म्यानिफेस्टले प्रसारण हुँदा type="dynamic" र रेकर्डिङ भएपछि type="static" घोषणा गर्छ। Icecast सर्भरबाट आउने MP3 वा AAC स्ट्रिमको लम्बाइ हुँदैन; त्यो कहिल्यै रोकिँदैन।
GET /v1/transcriptions/probe?url= ले केही भण्डारण गर्नु अघि यो निर्णय गर्छ। जवाफको kind यस्तो हुन्छ: प्रसारणमा रहेको वा तय गरिएको YouTube लाइभ, अन्त्य नभएको HTTP स्ट्रिम, अन्त्य नभएको HLS प्लेलिस्ट, वा dynamic DASH म्यानिफेस्टको लागि live। अन्त्य भएका जुनसुकै कुराका लागि file, र probe ले भन्न नसकेमा unknown। लिङ्क मिडियाको रूपमा खुलेन भने ok false हुन्छ र problem ले देखाउन सकिने वाक्य दिन्छ। probe ले केही राख्दैन र प्रति मिनेट 60 अनुरोधमा सीमित छ।
फाइल ट्रान्सक्रिप्सन अडियो बजेको भन्दा धेरै गुणा छिटो चल्छ, त्यसैले सकिएको एक घण्टाको टेलिभिजन त्यति लामो समय लिँदैन। लाइभ स्ट्रिम वास्तविक समयमा ट्रान्सक्रिप्ट हुन्छ, तर “वास्तविक समय” ले पनि प्रसारणभन्दा केही ढिलो हुन्छ, र कति ढिलो भन्ने जान्नु उपयोगी छ। Icecast स्ट्रिम माइक्रोफोनबाट केही सेकेन्ड पछि प्लेयरमा पुग्छ। HLS र DASH सेगमेन्टमा विभाजित हुन्छन्, र प्लेयरले लगभग छ सेकेन्डका दुई वा तीनवटा सेगमेन्ट नआउन्जेल सुरु गर्दैन, त्यसैले HLS स्ट्रिम प्रसारणभन्दा सामान्यतः 10 देखि 30 सेकेन्ड ढिलो हुन्छ, ट्रान्सक्रिप्सनले आफ्नो ढिलाइ थपे पछि। ढिलो आएको जस्तो देखिने पङ्क्ति प्रायः स्टेसनको ढिलाइ हो, ट्रान्सक्रिप्टरको होइन। एउटा स्ट्रिमले एउटा रेकर्डिङ बनाउँछ; एउटा डेस्कले धेरै चलाउँछ, र ती सबै एउटै ठाउँमा पुग्छन्।
हरेक लाइभ ट्रान्सक्रिप्सन सबै फाइलसँगै Transcriptions पुस्तकालयमा पुग्छ। प्रत्येक रेकर्ड यसको ट्रान्सक्रिप्टसँग राखिन्छ, र शब्दहरू अन्तिम भएपछि त्यसका लागि शीर्षक र सारांश सबै भाषामा लेखिन्छ। बोलिएको भाषा स्वचालित रूपमा पत्ता लाग्छ, र वक्ताले जुनसुकै बेला भाषा बदल्न सक्छन्। भाषा थाहा भएमा त्यसको नाम दिँदा ट्रान्सक्रिप्सनको गुणस्तर सुधार हुन्छ।
पुस्तकालय सबै भाषामा खोजिन्छ: जुनसुकै भाषाको ट्रान्सक्रिप्टमा खोज्नुहोस्, र नतिजा तपाईंकै भाषामा पाउनुहोस्। अंग्रेजी मात्र पढ्ने रिपोर्टरले रोमानियाली स्टेसनको बिहानको कार्यक्रममा मन्त्रीको नाम खोजेर अंग्रेजीमा नतिजा पढ्न सक्छ, प्रत्येक नतिजासँग त्यो कुन ट्रान्सक्रिप्सनबाट आएको र कहिले भनिएको भन्ने समयसहित। मन्त्रीको नाम तीनवटा स्टेसनमा तीन तरिकाले लेखिएको हुनसक्छ; अंग्रेजीमा खोज्दा तीनवटै पढ्नु पर्दैन।
एउटा ट्रान्सक्रिप्शनलाई एकैपटक 10 भाषासम्म अनुवाद गर्न सकिन्छ, त्यसैले एउटै रेकर्ड डेस्कले काम गर्ने हरेक भाषामा पढिन सक्छ। खोज नतिजा उद्धृत गर्न सकिएमा मात्र उपयोगी हुन्छ।
ट्रान्सक्रिप्ट शब्दहरूको ठूलो ढिक्का होइन। API को GET /v1/recordings/{id}/transcript ले sentences, शब्द-समयसहितका segments र speakers फर्काउँछ, त्यसैले उद्धरणलाई रेकर्डिङमा सेकेन्ड-सेकेन्डसम्म राख्न सकिन्छ। ड्यासबोर्डले लाइभ रेकर्डिङलाई आए जस्तै, अडियोसहित, फेरि चलाउँछ, त्यसैले उद्धरण गर्नु अघि वाक्य सुन्न सकिन्छ।
रेडियो अडियोको कुनै पनि ट्रान्सक्रिप्टमा भरोसा गर्नु अघि, कुनै पनि प्रणालीको भए पनि, दुई कुरा जान्नु उपयोगी हुन्छ। बोली पहिचान सबैभन्दा बढी व्यक्तिको नाम, ठाउँ र संख्यामा चुक्छ, जुन रिपोर्टरले खोज्ने कुरा नै हो। पहिचानकर्ताले कहिल्यै नदेखेको नाम नजिकको सामान्य शब्द बन्छ, र सही हिज्जे खोज्दा त्यो भेटिँदैन। त्यसको सट्टा एउटै सासमा बोलिएको कुनै अनौठो शब्द खोज्नुहोस्, र त्यसपछि नतिजाको वरिपरि पढ्नुहोस्। रेडियो केवल बोली मात्र होइन: सङ्गीतको पृष्ठभूमि, जिङ्गल र विज्ञापनको समयले वाक्यजस्ता देखिने तर वाक्य नभएका पङ्क्ति उत्पादन गर्छन्। उद्धरण गर्नु अघि अडियो जाँच गर्नुहोस्।
वक्ता लेबलका तीनवटा सेटिङ छन्: off, on, वा When Needed, जसले दोस्रो वक्ता सुनिएपछि मात्र लेबल देखाउँछ। रेकर्डिङमा वक्ताको नाम राख्न सकिन्छ (PUT /v1/recordings/{id}/speakers/{idx}), र एकपटक वक्ताको आवाज दर्ता भएपछि भविष्यका रेकर्डिङले उनीहरूलाई नामबाट चिन्छन्। हरेक बिहान फर्कने प्रस्तोताहरू भएको स्टेसनका लागि, पहिलो हप्ता पछि लेबल “Speaker 2” रहँदैन। उद्धरण जाँचिसकेपछि त्यसलाई कार्यालयबाहिर पठाउनु पर्छ।
प्रत्येक ढाँचा ट्रान्सक्रिप्सनको Export tab मा न्युजरुममा आफ्नै काम गर्छ। SRT भिडियो सम्पादकका लागि जान्छ, ताकि स्ट्रिमबाट काटिएको क्लिपमा सबटाइटल होस्; अनुवाद गरिएको SRT ले ती सबटाइटल अर्को भाषामा बोक्छ। Excel अनुसन्धानकर्तालाई जान्छ, प्रत्येक वाक्य एउटा पङ्क्तिमा समयसहित, फिल्टर र टिप्पणी गर्नका लागि। PDF त्यो सम्पादकका लागि जान्छ जो रेलमा बसेर पूरै घण्टा पढ्न चाहन्छन्। JSON त्यसका लागि जान्छ जसले डेस्कको आफ्नै उपकरण लेखिरहेको छ। API मार्फत निर्यात GET /v1/recordings/{id}/export?format=srt|json|xlsx|pdf हो, र अनुवाद गरिएको संस्करणका लागि lang= थपिन्छ। Download audio ले रेकर्डिङलाई प्याकेजकै लागि MP3 मा दिन्छ।
स्टेसनको प्रसारण रिपोर्टिङका लागि निगरानी गर्नु सामान्य समाचार अभ्यास हो। त्यसको क्लिप पुनःप्रकाशित गर्नु भने फरक कुरा हो। त्यो तपाईं जहाँ हुनुहुन्छ त्यहाँको फेयर डिलिङ वा फेयर युजको नियम र स्टेसनका आफ्नै सर्तहरूअन्तर्गत पर्छ, त्यसैले प्रतिस्पर्धीको उद्धरण सम्बन्धी डेस्कका सामान्य नियमहरू प्रतिस्पर्धीको अडियोमा पनि लागू हुन्छन्। माथि उल्लेखित सबै कुरा ड्यासबोर्डमा केही क्लिकमा हुन्छ; बीसवटा स्टेसन भएको डेस्कका लागि भने स्क्रिप्ट बनाउनु राम्रो हुन्छ।
सम्पूर्ण बाटो API मा छ, हरेक योजनामा समावेश छ र ड्यासबोर्ड जस्तै दरमा बिल हुन्छ। स्ट्रिम स्रोत भएको लाइभ ट्रान्सक्रिप्सन निष्क्रिय रूपमा बनाइन्छ, पहिलो रेकर्डिङले सुरु गर्छ, र HTTP मार्फत नियन्त्रण गरिन्छ। सर्भरले अडियो तान्ने हुनाले, रेकर्डिङ सुरु गर्दा तपाईंका लागि प्रकाशित गर्नका लागि कुनै स्ट्रिम फर्कँदैन: तपाईंको तर्फबाट अडियो पठाउने कुनै कुरा हुँदैन।
API=$VOCALSTACK_API_ORIGIN # the origin shown in the API reference
AUTH="Authorization: Bearer $VOCALSTACK_API_KEY"
# A live transcription whose source the server pulls itself.
TX=$(jq -n '{name: "Morning show", source: {kind: "stream", url: "https://example.org/live.mp3"},
settings: {speakerLabels: "auto"}}' \
| curl -sSf "$API/v1/transcriptions/live" -H "$AUTH" -H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" -d @- | jq -r .id)
# Start recording: the server opens the stream now.
REC=$(curl -sSf -X POST "$API/v1/transcriptions/$TX/recordings" -H "$AUTH" \
-H "Content-Type: application/json" -d '{}' | jq -r .recording.id)
# Later: pause, then stop (a live recording must be paused before it is stopped).
curl -sSf -X POST "$API/v1/recordings/$REC/pause" -H "$AUTH"
curl -sSf -X POST "$API/v1/recordings/$REC/stop" -H "$AUTH" -H "Content-Type: application/json" -d '{}'
# Search everything that was said, in English.
curl -sSfG "$API/v1/search" -H "$AUTH" --data-urlencode "q=budget" --data-urlencode "lang=en"
Idempotency-Key ले पुनः प्रयास गरिएको सिर्जनालाई दोस्रो ट्रान्सक्रिप्सनको सट्टा पहिलो फिर्ता गराउँछ। TypeScript र Python SDK ले यही कलहरू बेर्छन्, र Developers area बाट डाउनलोड गर्न सकिन्छ; API reference मा हरेक मार्ग र तिनका फ्रेमहरू छन्।
AI एजेन्टले कुनै कोड बिना नै पुस्तकालयमा काम गर्न सक्छ। /v1/mcp मा रहेको MCP सर्भरले एजेन्टलाई उपकरणहरूको सेट दिन्छ; तीमध्ये यहाँका लागि चारवटा महत्त्वपूर्ण छन्। search_transcriptions ले खातामा भएका सबै ट्रान्सक्रिप्सनमा जुनसुकै भाषामा भनिएका कुरा खोज्छ र मिल्ने पङ्क्तिहरू फर्काउँछ, प्रत्येकसँग त्यो कुन ट्रान्सक्रिप्सनमा छ र कहिले भनिएको भन्ने समय। get_summary ले रेकर्डिङको सारांश फर्काउँछ। transcribe_url र wait_for_transcription ले सकिएको भिडियो वा रेकर्डिङको लिङ्क ट्रान्सक्रिप्ट गर्छन् र नतिजाको प्रतीक्षा गर्छन्। लाइभ स्ट्रिम निगरानी सुरु गर्ने काम भने माथि उल्लेखित ड्यासबोर्ड वा API मै रहन्छ। Claude Code, Cursor वा कुनै पनि Streamable HTTP क्लाइन्टको सेटअप Developers → Connect an AI agent मा छ; MCP लेख ले त्यसका चरणहरू बताउँछ। स्क्रिप्ट चलाउँदा कति लाग्छ भन्ने अन्तिम प्रश्न हो।
लाइभ ट्रान्सक्रिप्सन $0.60 प्रति घण्टा अडियो हो, प्रति सेकेन्ड बिल गरिन्छ ($0.01 प्रति मिनेट), र प्रति ट्रान्सक्रिप्सन न्यूनतम 5 मिनेट। लाइभ फाइलभन्दा महँगो हुन्छ किनभने यो हुँदै गर्दा, जति लामो चल्छ त्यति नै ट्रान्सक्रिप्ट हुन्छ। फाइल $0.20 प्रति घण्टा ($0.0033 प्रति मिनेट; 30 मिनेटको फाइलको लागत $0.10)। दरहरू हरेक योजनामा र API मा उस्तै हुन्छन्, र अनुवाद, सारांश, वक्ता नामकरण, प्रसारण र साझेदारीले बिललाई कहिल्यै थप्दैनन्।
आठ घण्टा प्रतिदिन, हप्तामा पाँच दिन निगरानी गरिएको स्टेसन 40 लाइभ घण्टा हो: प्रति हप्ता $24, डेस्कले जुन भाषामा पढे पनि।
निगरानीका लागि महत्त्वपूर्ण सीमाहरू योजनाअनुसार फरक हुन्छन्। प्रत्येक सीमा Pay as you go, Premium, Enterprise क्रममा सूचीबद्ध छ:
नयाँ खातामा $5 साइनअप क्रेडिट हुन्छ र कार्ड चाहिँदैन, जुन त्यसलाई प्रयास गर्न आठ घण्टाभन्दा बढी लाइभ निगरानीका लागि पर्याप्त छ। पूरा तालिका मूल्य पृष्ठ मा छ।