Vložte stream, nie stránku. Skutočný zvuk stanice je na adrese končiacej na .mp3, .aac alebo .m3u8 a keď ho živý prepis raz získa, nikto už nemusí počúvať.
Redakcia, ktorá monitoruje tri rozhlasové stanice, dve televízne streamy a niekoľko YouTube živých vysielaní, má najprv problém s personálom a až potom s prepisom. Niekto musí počúvať a niekto musí stlačiť nahrávanie. Živý prepis so streamom ako zdrojom preberie obe úlohy: dajte mu adresu streamu a server ho otvorí, dekóduje a prepisuje, ako sa vysiela, takže nikto nemusí sedieť za stolom, keď tlačová konferencia začne skôr. Ťažká časť, ako sa ukázalo, je nájsť túto adresu.
Živý prepis môže brať zvuk zo streamu, ktorý si server stiahne sám: z internetovej rozhlasovej stanice, zo zoznamu HLS (.m3u8), z manifestu DASH (.mpd) alebo z YouTube živého vysielania. V nástenke ide o nový živý prepis na Transcriptions → New → Live, ktorého zdrojom je stream a nie mikrofón. Adresa sa nastaví pri vytvorení prepisu a nikdy sa nemení, takže monitor sa nastaví raz a spustí vždy, keď stanica stojí za nahrávanie.
Adresa musí byť samotný stream, nie webová stránka, ktorá ho prehráva. Stránka stanice je HTML; zvuk, ktorý prehráva, prichádza odinde, zvyčajne zo servera Icecast alebo Shoutcast, a prehrávač na stránke túto adresu nájde pomocou JavaScriptu až po načítaní. Hľadajte na stránke odkaz „Listen“, „Direct stream“ alebo „Other players“: končí na .mp3, .aac, .m3u, .m3u8 alebo .pls. Súbor .pls alebo .m3u tiež nie je zvuk. Je to krátky textový súbor na niekoľkých riadkoch, z ktorých každý udáva adresu streamu; existuje preto, aby sa desktopovým prehrávačom dal jediný odkaz, a VocalStack prepisuje stream, ktorý v ňom je pomenovaný. Ak vložíte namiesto toho stránku, VocalStack si ju vyžiada, uvidí, že sa vracia HTML, a povie vám to. Každá stanica skrýva svoj stream trochu inak; väčšina ho skrýva za tlačidlom označeným „Listen“, čo je jediná vec na stránke, za ktorú sa nestojí klikať.
Dva druhy odkazov sú odmietnuté hneď. Odkazy na stránky, ktoré prehrávajú médiá, ako sú Spotify, SoundCloud alebo Twitch, sa odmietnu skôr, než sa čokoľvek pripojí. Streamy chránené autorskými právami nie sú podporované: zoznam alebo manifest, ktorý potrebuje licenciu DRM, zlyhá so správou, ktorá to povie. Niektoré streamy tiež odmietajú požiadavky zvonku krajiny stanice, takže adresa, ktorá hrá v kancelárii, nemusí hrať zo servera v zahraničí. Ak stream hrá v prehliadači, ale nie vo VocalStack, stanica odmieta iné prehrávače; požiadajte ju o adresu, ktorú smú používať aj iné aplikácie. Väčšina ponúka stream MP3, AAC alebo HLS. Keď máte správnu adresu, ďalšou otázkou je, či sa vôbec niekedy skončí.
Živý stream sa nikdy neskončí, takže nie je súbor. Rozdiel je dôležitý najmä pri YouTube. YouTube živé vysielanie, ktoré beží, patrí do živého prepisu a nástenka ho sleduje, kým sa vysiela. YouTube živé vysielanie, ktoré je naplánované, ale ešte nezačalo, sa zobrazí ako Not live yet a dá sa nahrávať, keď sa začne vysielať. Ukončené video je niečo iné: má dĺžku, a preto sa prepisuje ako súbor: vložte odkaz do Transcriptions → New.
Samotný zoznam to prezradí a podľa toho ho rozpozná každý prehrávač. Ukončený zoznam HLS obsahuje značku #EXT-X-ENDLIST alebo #EXT-X-PLAYLIST-TYPE:VOD; živý ich nemá a stále rastie, takže ho prehrávač každých pár sekúnd znovu načíta kvôli novým segmentom. Manifest DASH deklaruje type="dynamic", kým sa vysielanie beží, a type="static", keď je to nahrávka. MP3 alebo AAC stream zo servera Icecast nemá žiadnu dĺžku; jednoducho nikdy nekončí.
Z kódu to zistíte cez GET /v1/transcriptions/probe?url= skôr, než sa čokoľvek uloží. Odpoveď kind je live pri YouTube živom vysielaní, ktoré beží alebo je naplánované, pri nekonečnom HTTP streame, pri zozname HLS bez konca alebo pri dynamickom manifeste DASH. Je to file pri všetkom, čo má koniec, a unknown, keď sonda nevie rozhodnúť. Ak sa odkaz neotvoril ako médium, ok je false a problem je veta, ktorú môžete zobraziť. Sonda si nič neukladá a je obmedzená na 60 volaní za minútu.
Súborové prepisy bežia mnohonásobne rýchlejšie, než sa audio prehráva, takže hodina ukončeného televízneho vysielania netrvá hodinu. Živý stream sa prepisuje v reálnom čase, ale „reálny čas“ už beží za vysielaním a stojí za to vedieť o koľko. Stream Icecast sa k prehrávaču dostane o pár sekúnd po mikrofóne. HLS a DASH sú segmentované a prehrávač sa nespustí, kým nemá dva alebo tri segmenty po približne šesť sekúnd, takže HLS stream je zvyčajne 10 až 30 sekúnd za vysielaním, ešte pred tým, než prepis pridá svoje vlastné oneskorenie. Riadok, ktorý sa zdá prísť neskoro, je zvyčajne oneskorenie stanice, nie prepisovača. Jeden stream vytvorí jednu nahrávku; redakcia spúšťa niekoľko a všetky skončia na jednom mieste.
Každý živý prepis sa uloží do knižnice Transcriptions vedľa každého súboru. Každá nahrávka sa uchová spolu so svojím prepisom a keď sú slová konečné, napíše sa pre ňu názov a zhrnutie vo všetkých jazykoch. Jazyk reči sa zistí automaticky a rečníci môžu kedykoľvek prepnúť jazyk. Ak jazyk poznáte, jeho uvedenie zlepší kvalitu prepisu.
Knižnica sa dá prehľadávať naprieč jazykmi: hľadajte vo všetkých prepisoch, nech sú v akomkoľvek jazyku, a výsledky dostanete vo svojom. Reportér, ktorý číta iba po anglicky, môže prehľadať ranné vysielanie rumunskej stanice kvôli menu ministra a výsledky prečítať po anglicky, každý s prepisom, z ktorého pochádza, a s časom, kedy zaznel. Meno ministra bude napísané tromi spôsobmi na troch staniciach; hľadanie v angličtine ušetrí čítanie všetkých troch.
Prepis sa dá preložiť naraz až do 10 jazykov, takže rovnaká nahrávka sa číta v každom jazyku, ktorým redakcia pracuje. Výsledok hľadania je užitočný iba vtedy, ak ho môžete citovať.
Prepis nie je stena textu. GET /v1/recordings/{id}/transcript z API vracia sentences, segments s časovaním slov a speakers, takže citát sa dá umiestniť na sekundu voči nahrávke. Nástenka prehrá živú nahrávku presne tak, ako prišla, aj so svojím zvukom, takže vetu si môžete vypočuť skôr, než ju citujete.
Predtým, než dôverujete akémukoľvek prepisu rozhlasového zvuku z akéhokoľvek systému, stojí za to vedieť dve veci. Rozpoznávanie reči najviac zlyháva na vlastných menách, miestach a číslach, a práve to reportér hľadá. Meno, ktoré rozpoznávač nikdy nevidel, sa objaví ako najbližšie bežné slovo a hľadanie správneho pravopisu ho minie. Namiesto toho hľadajte výrazné slovo, ktoré zaznelo v tom istom nádychu, a potom prečítajte okolie výsledku. A rozhlas nie je len reč: hudobné podklady, znelky a reklamné bloky vytvárajú riadky, ktoré vyzerajú ako vety, ale nimi nie sú. Pred citovaním skontrolujte zvuk.
Označenia rečníkov majú tri nastavenia: vypnuté, zapnuté alebo When Needed, ktoré ukáže označenia až vtedy, keď sa ozve druhý rečník. Rečníka v nahrávke môžete pomenovať (PUT /v1/recordings/{id}/speakers/{idx}) a keď je hlas rečníka zaregistrovaný, budúce nahrávky ho rozpoznajú podľa mena. Pri stanici, ktorej moderátori sa vracajú každé ráno, označenia prestanú byť „Speaker 2“ po prvom týždni. Keď je citát overený, musí opustiť budovu.
Každý formát na karte Export prepisu má v redakcii svoju úlohu. SRT ide k video editorovi, takže klip zo streamu nesie titulky; preložený SRT nesie titulky v inom jazyku. Excel ide k výskumníkovi, jeden riadok na vetu s časom, na filtrovanie a poznámky. PDF ide k editorovi, ktorý chce celú hodinu prečítať vo vlaku. JSON ide tomu, kto píše vlastné nástroje redakcie. Cez API je export GET /v1/recordings/{id}/export?format=srt|json|xlsx|pdf, s lang= pre preloženú verziu. Download audio dá nahrávku ako MP3 pre samotný balík.
Sledovať vysielanie kvôli spravodajstvu je bežná redakčná prax. Zverejniť z neho klip je iný úkon. Riadi ho právo na citáciu alebo fair dealing či fair use tam, kde ste, a podmienky samotnej stanice, takže bežné pravidlá redakcie pre citovanie konkurencie platia aj pre konkurenčný zvuk. Všetko vyššie uvedené je pár kliknutí v nástenke; pre redakciu s dvadsiatimi stanicami je lepšie to naskriptovať.
Celá cesta je v API, zahrnutá v každom pláne a účtovaná rovnakou sadzbou ako v nástenke. Živý prepis so streamovým zdrojom sa vytvorí nečinný, spustí ho prvá nahrávka a ovláda sa cez HTTP. Keďže server si zvuk stiahne sám, spustenie nahrávky nevráti stream, do ktorého by ste publikovali: na vašej strane nie je nič, čo by zvuk posielalo.
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 zabezpečí, že opakované vytvorenie vráti prvý prepis namiesto druhého. SDK pre TypeScript a Python obaľujú rovnaké volania a sťahujú sa z oblasti Developers; referencia API obsahuje každú trasu a jej rámce.
AI agent môže pracovať s knižnicou bez akéhokoľvek kódu. MCP server na /v1/mcp dáva agentovi sadu nástrojov; z nich štyri sú tu dôležité. search_transcriptions hľadá, čo zaznelo naprieč prepismi účtu v ľubovoľnom jazyku, a vracia zodpovedajúce riadky, každý s prepisom, v ktorom sa nachádza, a s časom, kedy zaznel. get_summary vráti zhrnutie nahrávky. transcribe_url a wait_for_transcription prepíšu ukončené video alebo odkaz na nahrávku a počkajú na výsledok. Spustenie monitora živého streamu zostáva v nástenke alebo v API vyššie. Nastavenie pre Claude Code, Cursor alebo ľubovoľného klienta Streamable HTTP je v časti Developers → Connect an AI agent; článok o MCP ho prejde krok za krokom. Posledná otázka je, koľko stojí spustiť skript.
Živý prepis stojí $0.60 za hodinu audia, účtovaný po sekundách ($0.01 za minútu), s minimom 5 minút na prepis. Živý prepis stojí viac než súbor, pretože sa prepisuje počas vysielania a trvá, kým beží. Súbory stoja $0.20 za hodinu ($0.0033 za minútu; 30-minútový súbor stojí $0.10). Sadzby sú rovnaké vo všetkých plánoch a cez API a preklady, zhrnutia, pomenovanie rečníkov, vysielanie a zdieľanie nikdy nezvýšia účet.
Stanica monitorovaná osem hodín denne, päť dní v týždni, je 40 živých hodín: $24 týždenne, v akýchkoľvek jazykoch, ktorými ju redakcia číta.
Limity, ktoré pri monitorovaní záležia, sa líšia podľa plánu. Každý je uvedený v poradí Pay as you go, Premium, Enterprise:
Nový účet začína s $5 kreditom za registráciu bez karty, čo stačí na viac než osem hodín živého monitoringu na vyskúšanie. Úplná tabuľka je na cenníku.