Ielīmējiet straumi, nevis lapu. Stacijas īstais audio atrodas adresē, kas beidzas ar .mp3, .aac vai .m3u8, un, kad tiešraides transkripcija to ir saņēmusi, neviens nav jāklausās.
Ziņu redakcijai, kas seko trim radio stacijām, divām televīzijas straumēm un vairākām YouTube tiešraidēm, vispirms ir personāla problēma, nevis transkripcijas problēma. Kādam ir jāklausās, un kādam ir jānospiež ierakstīšana. Tiešraides transkripcija ar straumi kā avotu uzņemas abus šos uzdevumus: ievadiet straumes adresi, un serveris to atver, atkodē un transkribē, kamēr tā raida, tāpēc neviens nav jāsēž pie galda, kad preses konference sākas agrāk. Grūtākais, kā izrādās, ir atrast šo adresi.
Tiešraides transkripcija var ņemt audio no straumes, ko serveris pats nolasa: interneta radio stacijas, HLS atskaņošanas saraksta (.m3u8), DASH manifesta (.mpd) vai YouTube tiešraides. Vadības panelī tā ir jauna tiešraides transkripcija adresē Transcriptions → New → Live, kuras avots ir straume, nevis mikrofons. Adrese tiek iestatīta, veidojot transkripciju, un nekad nemainās, tāpēc monitors tiek iestatīts vienreiz un palaists, kad stacija ir vērta ieraksta.
Adresei jābūt pašai straumei, nevis tīmekļa lapai, kas to atskaņo. Stacijas lapa ir HTML; audio, ko tā atskaņo, nāk no citurienes, parasti no Icecast vai Shoutcast servera, un lapas atskaņotājs šo adresi atrod ar JavaScript pēc ielādes. Meklējiet vietnē saiti „Listen“, „Direct stream“ vai „Other players“: tā beidzas ar .mp3, .aac, .m3u, .m3u8 vai .pls. .pls vai .m3u arī nav audio. Tas ir īss teksta fails ar dažām rindiņām, katra no tām norāda uz straumes adresi; tas pastāv tam, lai darbvirsmas atskaņotājiem varētu nodot vienu saiti, un VocalStack transkribē straumi, ko tas nosauc. Ja ielīmēsiet lapu, VocalStack to pieprasa, redz, ka atgriežas HTML, un par to paziņo. Katra stacija savu straumi slēpj nedaudz citādi; lielākā daļa to paslēpj aiz pogas ar uzrakstu „Listen“, un tas ir vienīgais elements lapā, uz kura nav vērts klikšķināt.
Divi saišu veidi tiek noraidīti uzreiz. Saites uz lapām, kas atskaņo mediju, piemēram, Spotify, SoundCloud vai Twitch, tiek atraidītas, pirms kāds savienojums ir izveidots. Straumes ar autortiesību aizsardzību arī netiek atbalstītas: atskaņošanas saraksts vai manifests, kam vajadzīga DRM licence, neizdodas ar paziņojumu, kas to saka. Dažas straumes arī noraida pieprasījumus no ārpus stacijas valsts, tāpēc adrese, kas birojā atskaņojas, var neatskaņoties serverim ārzemēs. Ja straume atskaņojas pārlūkprogrammā, bet ne VocalStack, stacija noraida citus atskaņotājus; lūdziet stacijai adresi, ko drīkst izmantot citas lietotnes. Visbiežāk piedāvā MP3, AAC vai HLS straumi. Kad esat ieguvis pareizo adresi, nākamais jautājums ir, vai tā kādreiz beidzas.
Tiešraide nekad nebeidzas, tāpēc tas nav fails. Atšķirība īpaši svarīga YouTube gadījumā. YouTube tiešraide, kas ir ēterā, pieder tiešraides transkripcijai, un vadības panelis to seko, kamēr tā raida. YouTube tiešraide, kas ir ieplānota, bet vēl nav sākusies, tiek rādīta kā Not live yet un to var ierakstīt, kad tā būs ēterā. Pabeigts video ir kas cits: tam ir garums, tāpēc to transkribē kā failu — ielīmējiet saiti sadaļā Transcriptions → New.
Pats atskaņošanas saraksts norāda, kas tas ir, un pēc tā jebkurš atskaņotājs atšķir šos gadījumus. Pabeigtā HLS sarakstā ir tags #EXT-X-ENDLIST vai #EXT-X-PLAYLIST-TYPE:VOD; tiešraidē tādu nav, un saraksts aug, tāpēc atskaņotājs to atkārtoti ielādē ik pēc dažām sekundēm, lai saņemtu jaunus segmentus. DASH manifests deklarē type="dynamic", kamēr raidījums ir ēterā, un type="static", kad tas ir ieraksts. MP3 vai AAC straumei no Icecast servera garuma nav nemaz; tā vienkārši nekad nebeidzas.
No koda GET /v1/transcriptions/probe?url= izlemj šo jautājumu, pirms kaut kas tiek saglabāts. Atbildes kind ir live YouTube tiešraidei, kas ir ēterā vai ieplānota, bezgalīgai HTTP straumei, HLS sarakstam bez beigām vai dinamiskam DASH manifestam. Tas ir file jebkam, kam ir beigas, un unknown, ja pārbaude nevarēja noteikt. Ja saite neatvērās kā mediji, ok ir false, un problem ir teikums, ko var parādīt. Pārbaude neko neglabā un ir ierobežota līdz 60 izsaukumiem minūtē.
Failu transkripcijas darbojas daudzkārt ātrāk nekā audio tiek atskaņots, tāpēc pabeigta televīzijas stunda nenozīmē stundu gaidīšanas. Tiešraides straume tiek transkribēta reāllaikā, taču "reāllaiks" jau atpaliek no raidījuma, un ir vērts zināt, par cik. Icecast straume sasniedz atskaņotāju dažas sekundes pēc mikrofona. HLS un DASH ir segmentēti, un atskaņotājs nesāks, kamēr nebūs saņēmis divus vai trīs segmentus pa aptuveni sešām sekundēm katrs, tāpēc HLS straume parasti atpaliek no raidījuma par 10 līdz 30 sekundēm, pirms transkripcija pievieno savu kavēšanos. Rindiņa, kas šķiet ierodas novēloti, parasti ir stacijas aizkave, nevis transkribētāja. Viena straume veido vienu ierakstu; redakcija palaiž vairākas, un visas nonāk vienā vietā.
Katra tiešraides transkripcija nonāk Transcriptions bibliotēkā blakus visiem failiem. Katrs ieraksts tiek saglabāts kopā ar savu transkriptu, un, kad vārdi ir galīgi, tam tiek uzrakstīts nosaukums un kopsavilkums visās valodās. Runas valoda tiek noteikta automātiski, un runātāji var jebkurā brīdī pārslēgties uz citu valodu. Ja zināt valodu, tās norādīšana uzlabo transkripcijas kvalitāti.
Bibliotēkā var meklēt visās valodās: meklējiet visos transkriptos neatkarīgi no to valodas un saņemiet rezultātus savā valodā. Reportieris, kas lasa tikai angliski, var meklēt rumāņu stacijas rīta raidījumā ministra vārdu un lasīt atradumus angliski, katrs ar transkripciju, no kuras tas nāk, un laiku, kad tas tika pateikts. Ministra vārds trīs stacijās būs rakstīts trijos veidos; meklēšana angliski ļauj nelasīt visus trīs variantus.
Transkripciju var tulkot līdz 10 valodām vienlaikus, tāpēc viens un tas pats ieraksts ir lasāms katrā valodā, kurā strādā redakcija. Meklēšanas rezultāts ir noderīgs tikai tad, ja to var citēt.
Transkripts nav teksta siena. API GET /v1/recordings/{id}/transcript atgriež sentences, segments ar vārdu laikiem un speakers, tāpēc citātu var precīzi novietot pie ieraksta līdz sekundei. Vadības panelis atskaņo tiešraides ierakstu tieši tā, kā tas ieradās, ar tā audio, tāpēc teikumu var noklausīties, pirms to citē.
Pirms uzticaties radio audio transkriptam, no jebkuras sistēmas, ir vērts zināt divas lietas. Runas atpazīšana visvairāk klupst uz īpašvārdiem, vietvārdiem un skaitļiem, kas tieši ir tas, ko reportieris meklē. Vārds, ko atpazinējs nekad nav redzējis, tiek pārveidots par tuvāko parasto vārdu, un meklēšana pēc pareizās pareizrakstības to nepamanīs. Tāpēc meklējiet kādu izcilu vārdu, kas pateikts tajā pašā elpas vilcienā, un pēc tam izlasiet apkārt atradumam. Turklāt radio nav tikai runa: mūzikas fons, džingli un reklāmu bloki rada rindiņas, kas izskatās pēc teikumiem, bet nav tādas. Pārbaudiet audio, pirms citējat.
Runātāju etiķetēm ir trīs iestatījumi: izslēgts, ieslēgts vai When Needed, kas rāda etiķetes, kad tiek sadzirdēts otrs runātājs. Ierakstā varat dot runātājam vārdu (PUT /v1/recordings/{id}/speakers/{idx}), un, kad runātāja balss ir reģistrēta, nākamajos ierakstos viņš tiks atpazīts pēc vārda. Stacijai, kuras prezentētāji atgriežas katru rītu, etiķetes pēc pirmās nedēļas vairs nav „Speaker 2“. Kad citāts ir pārbaudīts, tam jāiziet no redakcijas.
Katram formātam transkripcijas cilnē Export ir sava loma redakcijā. SRT iet video redaktoram, lai klips no straumes saņemtu subtitrus; tulkots SRT tos saņem citā valodā. Excel iet pētniekam, viena rindiņa vienam teikumam ar tā laiku, ko var filtrēt un anotēt. PDF iet redaktoram, kurš vilcienā vēlas izlasīt visu stundu. JSON iet tam, kas raksta redakcijas paša rīkus. Caur API eksports ir GET /v1/recordings/{id}/export?format=srt|json|xlsx|pdf, ar lang= tulkotai versijai. Download audio dod ierakstu kā MP3 pašam materiālam.
Raidījuma monitorēšana ziņošanai ir parasta žurnālistikas prakse. Tā fragmenta publicēšana atkārtoti ir cits darbs. To reglamentē godīgas izmantošanas noteikumi vietā, kur atrodaties, un stacijas paši noteikumi, tāpēc redakcijas parastie noteikumi par konkurenta citēšanu attiecas arī uz konkurenta audio. Viss iepriekš minētais ir dažu klikšķu darbs vadības panelī; redakcijai ar divdesmit stacijām labāk to automatizēt ar skriptu.
Viss ceļš ir pieejams API, iekļauts katrā plānā un tiek norēķināts pēc tās pašas likmes kā vadības panelī. Tiešraides transkripcija ar straumes avotu tiek izveidota dīkstāvē, to sāk pirmais ieraksts un to kontrolē caur HTTP. Tā kā serveris pats nolasa audio, ieraksta sākšana neatgriež straumi, uz kuru jūs varētu publicēt: jūsu pusē nav nekā, kas sūtītu audio.
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 ļauj atkārtotai izveidei atgriezt pirmo transkripciju, nevis otru. TypeScript un Python SDK ietver tos pašus izsaukumus, un tos var lejupielādēt no izstrādātāju sadaļas; API atsauce satur katru maršrutu un tā kadrus.
AI aģents var strādāt ar bibliotēku bez jebkāda koda. MCP serveris /v1/mcp dod aģentam rīku kopu, un starp tiem četri ir šeit svarīgi. search_transcriptions meklē, kas ir pateikts visās konta transkripcijās jebkurā valodā, un atgriež atbilstošās rindiņas, katru ar transkripciju, kurā tā atrodas, un laiku, kad tā tika pateikta. get_summary atgriež ieraksta kopsavilkumu. transcribe_url un wait_for_transcription transkribē pabeigtu video vai ieraksta saiti un gaida rezultātu. Tiešraides straumes monitora sākšana paliek vadības panelī vai iepriekš minētajā API. Iestatījumi Claude Code, Cursor vai jebkuram Streamable HTTP klientam ir sadaļā Developers → Connect an AI agent; MCP raksts to izskaidro soli pa solim. Cik maksā skripta darbināšana, ir pēdējais jautājums.
Tiešraides transkripcija maksā $0.60 par stundu audio, norēķinoties pa sekundēm ($0.01 minūtē), ar minimumu 5 minūtes katrai transkripcijai. Tiešraide maksā vairāk nekā fails, jo tā tiek transkribēta, kamēr notiek, tik ilgi, cik tā darbojas. Faili maksā $0.20 par stundu ($0.0033 minūtē; 30 minūšu fails maksā $0.10). Likmes ir vienādas visos plānos un API, un tulkojumi, kopsavilkumi, runātāju nosaukšana, apraide un koplietošana nekad nepalielina rēķinu.
Stacija, ko monitorē astoņas stundas dienā, piecas dienas nedēļā, ir 40 tiešraides stundas: $24 nedēļā, neatkarīgi no tā, cik valodās redakcija to lasa.
Ierobežojumi, kas svarīgi monitoringam, atšķiras atkarībā no plāna. Katrs ir uzskaitīts šādā secībā: Pay as you go, Premium, Enterprise:
Jaunam kontam sākumā ir $5 reģistrācijas kredīts bez kartes, kas ir vairāk nekā astoņas stundas tiešraides monitorēšanas, lai to izmēģinātu. Pilna tabula ir cenu lapā.