Vložte stream, ne stránku. Skutečný zvuk stanice je na adrese končící na .mp3, .aac nebo .m3u8 a jakmile ho živý přepis jednou načte, nikdo nemusí poslouchat.
Redakce, která sleduje tři rozhlasové stanice, dvě televizní streamy a několik živých přenosů na YouTube, má nejdřív problém s obsazením a teprve potom s přepisem. Někdo musí poslouchat a někdo musí stisknout nahrávání. Živý přepis se streamem jako zdrojem převezme obojí: stačí mu zadat adresu streamu a server ho otevře, dekóduje a přepíše, jak se vysílá, takže nikdo nemusí sedět u stolu, když tisková konference začne dřív. Těžké je podle všeho najít tu adresu.
Živý přepis může brát zvuk ze streamu, který si server stáhne sám: z internetové rozhlasové stanice, z playlistu HLS (.m3u8), z manifestu DASH (.mpd) nebo z živého přenosu na YouTube. V ovládacím panelu je to nový živý přepis v Transcriptions → New → Live, jehož zdrojem je stream místo mikrofonu. Adresa se nastaví při vytvoření přepisu a už se nemění, takže monitor stačí nastavit jednou a spustit ho vždy, když stanice stojí za nahrávání.
Adresa musí být samotný stream, ne webová stránka, která ho přehrává. Stránka stanice je HTML; zvuk, který přehrává, pochází odjinud, obvykle ze serveru Icecast nebo Shoutcast, a přehrávač na stránce tuto adresu najde pomocí JavaScriptu až po načtení. Hledejte na webu odkaz „Listen“, „Direct stream“ nebo „Other players“: končí na .mp3, .aac, .m3u, .m3u8 nebo .pls. Soubor .pls nebo .m3u také není zvuk. Je to krátký textový soubor o několika řádcích, z nichž každý obsahuje adresu streamu; existuje proto, aby bylo možné desktopovým přehrávačům předat jediný odkaz, a VocalStack přepisuje stream, který v něm je uveden. Pokud místo toho vložíte stránku, VocalStack ji vyžádá, dostane zpět HTML a řekne vám to. Každá stanice skrývá svůj stream trochu jinak; většina ho schovává za tlačítko s nápisem „Listen“, což je jediná věc na stránce, na kterou se nevyplatí klikat.
Dva druhy odkazů se odmítnou hned. Odkazy na stránky, které přehrávají média, například Spotify, SoundCloud nebo Twitch, se zamítnou dřív, než se cokoli připojí. Streamy chráněné proti kopírování také nejsou podporovány: playlist nebo manifest, který vyžaduje licenci DRM, selže se zprávou, která to řekne. Některé streamy navíc odmítají požadavky zvenku země stanice, takže adresa, která v kanceláři hraje, nemusí hrát na serveru v zahraničí. Pokud stream hraje v prohlížeči, ale ne ve VocalStack, stanice odmítá jiné přehrávače; požádejte ji o adresu, kterou smějí používat i jiné aplikace. Většina nabízí stream MP3, AAC nebo HLS. Až máte správnou adresu, zbývá otázka, zda vůbec někdy skončí.
Živý stream nikdy neskončí, takže to není soubor. Rozdíl je důležitý zejména u YouTube. Živý přenos na YouTube, který je právě ve vysílání, patří do živého přepisu, a ovládací panel ho sleduje, dokud běží. Naplánovaný živý přenos, který ještě nezačal, se zobrazí jako Not live yet a dá se nahrát, jakmile se začne vysílat. Hotové video je jiná věc: má délku, proto se přepisuje jako soubor – vložte odkaz do Transcriptions → New.
O tom, o jaký druh jde, říká sám playlist, a podle toho to pozná každý přehrávač. Hotový playlist HLS obsahuje značku #EXT-X-ENDLIST nebo #EXT-X-PLAYLIST-TYPE:VOD; živý nemá ani jednu a stále se prodlužuje, takže ho přehrávač každých několik sekund znovu stahuje kvůli novým segmentům. Manifest DASH deklaruje type="dynamic", dokud vysílání běží, a type="static", jakmile je nahrávkou. Stream MP3 nebo AAC ze serveru Icecast nemá žádnou délku; prostě nikdy nekončí.
Z kódu rozhodne GET /v1/transcriptions/probe?url= ještě předtím, než se cokoli uloží. Odpověď kind je live u živého přenosu na YouTube, který je ve vysílání nebo naplánovaný, u nekonečného HTTP streamu, u playlistu HLS bez konce a u dynamického manifestu DASH. Je file u všeho, co má konec, a unknown, když probe nedokáže rozhodnout. Pokud se odkaz neotevřel jako médium, je ok rovno false a problem obsahuje větu, kterou můžete zobrazit. Probe si nic neukládá a je omezen na 60 volání za minutu.
Přepisy souborů běží mnohonásobně rychleji, než se zvuk přehrává, takže dokončená hodina televize netrvá hodinu. Živý stream se přepisuje v reálném čase, ale „reálný čas“ už běží za vysíláním a stojí za to vědět, o kolik. Stream Icecast dorazí k přehrávači několik sekund po mikrofonu. HLS a DASH jsou rozděleny na segmenty a přehrávač nespustí, dokud nemá dva nebo tři segmenty o délce zhruba šest sekund, takže stream HLS bývá za vysíláním obvykle o 10 až 30 sekund, než k tomu přičte přepis své vlastní zpoždění. Řádek, který přichází pozdě, bývá obvykle zpožděním stanice, ne přepisovače. Jeden stream tvoří jednu nahrávku; redakce jich běží několik a všechny skončí na jednom místě.
Každý živý přepis skončí v knihovně přepisů vedle každého souboru. Každá nahrávka se uchovává spolu se svým přepisem a jakmile jsou slova konečná, pro ni vznikne název a shrnutí, a to v každém jazyce. Mluvený jazyk se rozpozná automaticky a mluvčí mohou kdykoli přejít do jiného jazyka. Tam, kde jazyk znáte, zlepší jeho uvedení kvalitu přepisu.
Knihovnu lze prohledávat napříč jazyky: prohledejte všechny přepisy bez ohledu na jejich jazyk a výsledky dostanete ve svém. Reportér, který čte jen anglicky, může v ranní relaci rumunské stanice vyhledat jméno ministra a výsledky si přečíst anglicky, každý s přepisem, z něhož pochází, a s časem, kdy zazněl. Jméno ministra bude napsané u tří stanic třemi způsoby; hledání v angličtině ušetří čtení všech tří variant.
Přepis lze přeložit až do 10 jazyků najednou, takže stejná nahrávka se čte ve všech jazycích, kterými redakce pracuje. Výsledek hledání je užitečný jen tehdy, když ho lze citovat.
Přepis není zeď textu. API GET /v1/recordings/{id}/transcript vrací sentences, segments s časováním slov a speakers, takže citát lze umístit na sekundu přesně vůči nahrávce. Ovládací panel přehraje živou nahrávku přesně tak, jak přišla, i se zvukem, takže větu lze před citováním uslyšet.
Než přepisu radiového zvuku uvěříte, ať pochází z jakéhokoli systému, stojí za to vědět dvě věci. Rozpoznávání řeči klopýtá nejvíc u vlastních jmen, míst a čísel, a právě ta reportér hledá nejčastěji. Jméno, které rozpoznávač nikdy neviděl, se přepíše na nejbližší běžné slovo a hledání správné podoby ho nenajde. Hledejte proto výrazné slovo vyslovené ve stejném nádechu a pak si přečtěte okolí nálezu. A rádio není jen řeč: hudební podkladové stopy, znělky a reklamní bloky vytvářejí řádky, které vypadají jako věty, ale nejsou jimi. Před citováním zkontrolujte zvuk.
Označování mluvčích má tři nastavení: vypnuto, zapnuto, nebo When Needed, které popisky ukáže, jakmile je slyšet druhý mluvčí. Mluvčího v nahrávce můžete pojmenovat (PUT /v1/recordings/{id}/speakers/{idx}) a jakmile je hlas mluvčího zaregistrován, budoucí nahrávky ho poznají podle jména. U stanice, jejíž moderátoři se vracejí každé ráno, přestanou být popisky „Speaker 2“ už po prvním týdnu. Až je citát ověřený, musí ven z redakce.
Každý formát na záložce Export přepisu má v redakci svůj úkol. SRT jde ke střihači videa, aby klip ze streamu měl titulky; přeložený SRT je nese v jiném jazyce. Excel jde výzkumníkovi, jeden řádek na větu s jejím časem, aby se dal filtrovat a poznamenávat. PDF jde redaktorovi, který chce přečíst celou hodinu ve vlaku. JSON jde tomu, kdo píše vlastní nástroje redakce. Přes API je export GET /v1/recordings/{id}/export?format=srt|json|xlsx|pdf, s lang= pro přeloženou verzi. Download audio dá nahrávku jako MP3 pro samotný balíček.
Sledování vysílání pro reportáž je běžná redakční praxe. Znovu zveřejnit jeho úryvek je jiná věc. Řídí se pravidly poctivého užití nebo fair use podle toho, kde žijete, a podmínkami samotné stanice, takže se na zvuk konkurence vztahují i běžná redakční pravidla pro citování konkurence. Všechno výše je v ovládacím panelu otázka několika kliknutí; pro redakci s dvaceti stanicemi je lepší to naskriptovat.
Celá cesta je v API, zahrnuta v každém tarifu a účtovaná stejnou sazbou jako v ovládacím panelu. Živý přepis se streamem jako zdrojem vznikne v nečinném stavu, spustí ho první nahrávka a ovládá se přes HTTP. Protože zvuk stahuje server, nevrací spuštění nahrávky žádný stream, do kterého byste vysílali: na vaší straně není nic, co by zvuk posílalo.
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"
Hlavička Idempotency-Key zajistí, že opakované vytvoření vrátí první přepis místo druhého. Sady SDK pro TypeScript a Python tato volání obalují a stahují se z oblasti Developers; referenční příručka API obsahuje každou trasu a její rámce.
AI agent umí knihovnu obsluhovat i bez jakéhokoli kódu. Server MCP na /v1/mcp dává agentovi sadu nástrojů; z nich jsou pro tento případ důležité čtyři. search_transcriptions prohledá, co zaznělo, napříč přepisy účtu v libovolném jazyce a vrátí odpovídající řádky, každý s přepisem, v němž se nachází, a s časem, kdy zazněl. get_summary vrátí shrnutí nahrávky. transcribe_url a wait_for_transcription přepíšou hotové video nebo odkaz na nahrávku a počkají na výsledek. Spuštění monitoru živého streamu zůstává v ovládacím panelu nebo v API výše. Nastavení pro Claude Code, Cursor nebo jakéhokoli klienta se Streamable HTTP je v oblasti Developers → Connect an AI agent; článek o MCP provede nastavením krok za krokem. Kolik skript stojí, je poslední otázka.
Živý přepis stojí $0.60 za hodinu zvuku, účtovanou po sekundách ($0.01 za minutu), s minimem 5 minut na přepis. Živý přepis stojí víc než soubor, protože se přepisuje během vysílání a běží, dokud běží. Soubory stojí $0.20 za hodinu ($0.0033 za minutu; třicetiminutový soubor stojí $0.10). Sazby jsou stejné ve všech tarifech i přes API a překlady, shrnutí, pojmenování mluvčích, vysílání a sdílení nikdy nezvyšují účet.
Stanice sledovaná osm hodin denně, pět dní v týdnu, je 40 živých hodin: $24 týdně, v jakýchkoli jazycích, v nichž to redakce čte.
Limity, na kterých pro monitorování záleží, se liší podle tarifu. Každý je uveden v pořadí Pay as you go, Premium, Enterprise:
Nový účet začíná s kreditem $5 za registraci bez karty, což stačí na více než osm hodin živého monitoringu na vyzkoušení. Úplná tabulka je na ceníku.