Kylone Headend · for operators
Captions Module
The "ASR Captions" pre-processing module (package `hwsrnv`) adds a text subtitle page to a channel from two sources: the channel's own DVB bitmap subtitles read with OCR, or the speech on the audio track recognised with a neural model. This note is for the operator who installs it and assigns it to channels.
September 2026, MicroCMS v4.
1. What it does
The module sits in the pre-processing tier of a channel. It holds the stream for a short, fixed delay, recognises text, and injects a teletext subtitle page (default 888) into the stream, announced in the PMT with its language. From there the page reaches every tier: the original multicast, the transcoded and stand-in outputs, the set-top boxes and TVs, and the HLS output as a WebVTT rendition when the HLS profile's HLS Text Subtitles option is set to WebVTT from Teletext.
Two sources, chosen per channel:
| Text Source | Reads | Delay added | Typical use |
|---|---|---|---|
| DVB subtitles (OCR) | the broadcaster's bitmap subtitle track | 1.5 s | channels that carry DVB subtitles but no teletext page: makes them selectable on TVs that only decode teletext subtitles, and available on HLS as text |
| Speech recognition | the audio track | 6 s | channels with no subtitles at all: assistive captions in the spoken language, in English, or both |
| Auto | DVB subtitles when the service announces them, speech otherwise | 1.5 s / 6 s | mixed line-ups where one profile serves many channels |
2. Requirements
- A GPU: an RTX-class NVIDIA card (Ada or newer) for speech recognition; the lab's GTX 1660 Ti works for tests. OCR runs on the CPU and needs no GPU.
- The module package with its language models:
models/ggml-*.binfor speech (Small 466 MB, Large v3 Turbo 547 MB, Base 142 MB) andmodels/tessdata/*.traineddatafor OCR (27 languages shipped; eng is the fallback). - One module instance per channel. A stream instance frees a pre-processing slot the way a CAM does; see the stream-instance notes.
3. Assigning and configuring
Create a pre-processing profile from the module and assign it to the channel. The options:
| Option | Values | Notes |
|---|---|---|
| Text Source | Speech recognition · DVB subtitles (OCR) · Auto | see above |
| Model | Small (default) · Large v3 Turbo · Base | Speech only. Turbo is the most accurate and needs about twice the GPU time of Small. Base is for smoke tests. |
| Spoken Language | Detect · English, Italian, Turkish, German, French, Spanish, Portuguese, Dutch, Russian, Arabic, Greek, Polish | Speech only. Setting it avoids mis-detection on multilingual channels. |
| Captions | In the spoken language · Translated to English · Native page + English on the next page | Speech only. "Both" uses two pages (888 and 889 by default) and doubles the GPU time. Translation is English only. |
| Acceleration Node | GPU index · Off | Off runs speech on the CPU: only for tests. |
| Subtitle Track | First announced · a language | OCR only. Which DVB subtitle track to read when the service carries several. Check the channel's languages line in the scanner: S[eng:10:0xba6] entries are the DVB subtitle tracks. |
| Page | 888 (default) · 889 · 777 · 778 · 150 | The teletext page number. Use a page the broadcaster does not already use. |
| Page Language in PMT | Same as the source · a language | Overrides the language the page is announced with. With "Both", only the native page; the English page is always eng. |
| Stream Delay | Default · 1.5 · 3 · 5 · 6 · 8 · 10 s | Default is 6 s for speech, 1.5 s for OCR. Longer delays give the speech recogniser more room on a slow GPU. |
Make the transcoding profile of the channel copy subtitles (subtitle index copy, tracks all), so the page survives into the transcoded and stand-in tiers.
For HLS text, set in the HLS output profile: HLS Text Subtitles = WebVTT from Teletext, Teletext Page = the page, or All announced pages to publish every page the channel carries.
4. What to expect
- OCR: a subtitle appears on the page at the moment the broadcaster shows it and disappears when the broadcaster removes it. Reading a subtitle takes about 20 ms; accuracy on broadcast fonts is high (typically 90 % and above word confidence). Lines are kept as the broadcaster broke them.
- Speech: phrases appear as the words are spoken, rolling over the last two rows, and the page clears after a pause. Phrases commit at word boundaries; expect the usual recognition errors on names, numbers and cross-talk. These are assistive captions.
- Load: Small takes about 0.8 s of GPU time per 8 s of audio on a GTX 1660 Ti (roughly a tenth of the card per channel), Turbo 1.4 s; "Both" doubles it. RTX cards are several times faster. OCR load is negligible.
- Languages on the page: Latin scripts, including Turkish, Polish, Czech, Romanian and the like, are shown with base letters where the teletext Latin set has no accented form. Cyrillic, Greek and Arabic subtitles are read correctly but cannot yet be shown on the teletext page.
5. Checking it works
- The channel's pre-processing log (
<channel>_pre.log) shows the module's lines: the recogniser opening,pmt: teletext page 888 declared on pid …, then one line per caption (sub …for OCR,cue …for speech, with the language and confidence). - The scanner's languages line for the pre-processed tier lists the page:
T[eng:2:888:0xbad]. - On a set-top box or TV, open the subtitle menu on the channel and pick the page's language; on HLS, the player's subtitle menu lists the rendition.
- The status monitor shows the module's caption count, average recognition time and, for speech, the recognition backlog in seconds. A growing backlog means the GPU is too slow for the model: choose Small, or a longer delay.
6. Known limits
- One page language per source; speech translation targets English only.
- The speech recogniser needs clean dialogue; music beds and heavy accents lower accuracy.
- A DVB subtitle track is read as a whole; region colours and positioning are not carried.
- The page is teletext: TVs that decode only DVB bitmap subtitles will not show it. Every hospitality TV platform in current use decodes teletext subtitles.
