Efficient tools to build your streaming infrastructure

Convert MPEGTS DVB subtitles to WebVTT for HLS

Today we introduce a long-awaited feature for conversion of MPEGTS DVB subtitles to WebVTT.

This update simplifies the workflow for content providers and broadcasters, enabling richer and more accessible streaming experiences for audiences everywhere. No longer bound by the complexities of subtitle formats, this feature ensures that DVB subtitles are effortlessly converted and displayed as WebVTT in HLS streams across all video players and STB boxes.


We assume you have the following setup before moving any further in our explanation:

  • A server running Linux or Windows.
  • WMSPanel account with active subscription.
  • The latest Nimble Streamer version is installed on the server and registered in WMSPanel.
  • The latest Transcoder version is installed on the server and activated via a license.
  • DVB processing is activated for the Nimble Streamer instance.

Intro: Operating principles and supported languages

When the MPEGTS stream is received, Nimble does the following.

  • looks for the dvb_subtitles elementary stream,
  • parses the language code within the stream,
  • passes subtitle data and language code to the embedded Tesseract OCR library,
  • the library generates plain text,
  • Nimble generates WebVTT subtitle data for the HLS stream.
DVB Subtitle Language code in a typical MPEGTS stream
DVB Subtitle Language code in a typical MPEGTS stream

Nimble Streamer takes the data for processing from the first found subtitle track

Nimble Streamer currently supports English (code ENG) by default. However, The nimble-transcoder-tessdata package is designed to enhance your language recognition capabilities. Currently available for Ubuntu 22 and 24, with plans for broader OS support including Windows, this package includes files for a wide range of languages. Supported languages include Arabic, Belarusian, Bulgarian, Czech, Danish, German, Greek, Finnish, French, Hebrew, Croatian, Hungarian, Indonesian, Italian, Kazakh, Dutch, Norwegian, Polish, Portuguese, Romanian, Russian, Spanish, Swedish, Thai, Turkish, and Ukrainian.

To install nimble-transcoder-tessdata on Ubuntu 22 and 24, simply use the following command:
sudo apt-get install nimble-transcoder-tessdata
If additional languages are needed, users can download the necessary “traineddata” file and place it in the /usr/share/nimble-transcoder/tessdata/ directory on any Linux system. We also welcome user feedback and requests for new languages, which we will include in future updates of the nimble-transcoder-tessdata package. Updates for other operating systems, including Windows, will be available soon.

We would like to express our gratitude to Ray Smith and all the Tesseract authors listed on this page for their contributions in developing this remarkable AI tool.

Step one: Enable DVB processing 

Make sure that the latest Nimble and Transcoder packages are installed and updated.

Add dvb_subtitles_processing_enabled = true option into the nimble.conf as described on this page. This option means you’ve enabled DVB subtitles processing in Nimble. Also, make sure you restart Nimble after adding it.

Step two: Switch on DVB to WebVTT subtitle conversion

Nimble Streamer defines WebVTT output on a per-application basis. This means it’s applied to a group of streams within an Application or globally if conversion is defined in the Global tab.

To make WebVTT appear in HLS, navigate to Application or Global settings and find the “DVB subtitles to WebVTT” drop-down menu.

Application settings and WebVTT options in Nimble Streamer
Application settings and WebVTT options

Three options are available:

  • Disable – pass DVB subtitles only;
  • Add – add WebVTT subtitles to the HLS playlist and add DVB subtitles to chunks;
  • Replace – add WebVTT subtitles to HLS, do not add DVB subtitles

Once the desired mode has been selected, click Save to initiate synchronization with the panel.

Just as in case with all other Global/Application settings, WebVTT settings will only take effect once the source stream is restarted. Once it starts working, Nimble will add a playlist for WebVTT subtitles (subtitle.m3u8) which will contain links to parts of WebVTT subtitles to apply to specific video fragments.

WebVTT subtitles in a HLS playlist
WebVTT subtitles in a HLS playlist

Here’s the result:

WebVTT subtitles in a frame
WebVTT subtitles in a frame

Performance notes

Tesseract uses AI-based optical character recognition, which puts a bit more load on the CPU. More streams, more impact on the system. It’s set up to run on extra cores if needed. We have added monitoring for its CPU usage on the Server Info page in WMSPanel.

DVB Subtitle decoder CPU usage

That’s it. Your MPEGTS inputs now have HLS output with WebVTT text subtitles, which you can use in more video players and on more STB boxes.

Read more about subtitles support in Nimble Streamer and let us know of any questions regarding this feature set.