Skip to content

Конвертация DVB-субтитров в HLS/DASH WebVTT

Flussonic Media Server может распознавать DVB-cубтитры и конвертировать их в текстовый формат WebVTT. Это необходимо для того, чтобы вы могли показать субтитры на мобильных устройствах и плеерах без поддержки DVB.

Note

Функция OCR-распознавания субтитров доступна в рамках отдельной лицензии, которая приобретается дополнительно.

Распознавание осуществляется с помощью программы Tesseract OCR. Tesseract распознает текст и передает его Flussonic, который затем создает WebVTT субтитры, доступные по HLS.

Содержание:

См. также:

О DVB-субтитрах

Стандарт DVB (Digital Video Broadcast) определяет формат субтитров на основе растрового изображения. В MPEG-TS потоке со спутника DVB субтитры могут идти как текстом, так и изображением. Чаще всего используется передача изображений, так как этот вариант надежнее для просмотра на различных устройствах, которые могут не иметь нужных шрифтов для отрисовки текста.

Например:

ffprobe stream_sample.ts
Stream #0:0[0x1a4]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
    Stream #0:1[0x1ae](fra): Audio: eac3 ([6][0][0][0] / 0x0006), 48000 Hz, stereo, fltp, 128 kb/s
    Stream #0:2[0x1af](qad): Audio: eac3 ([6][0][0][0] / 0x0006), 48000 Hz, stereo, fltp, 128 kb/s
    Stream #0:3[0x1b8](fra): Subtitle: dvb_subtitle ([6][0][0][0] / 0x0006) (hearing impaired)
    Stream #0:4[0x1b0](qaa): Audio: eac3 ([6][0][0][0] / 0x0006), 48000 Hz, stereo, fltp, 128 kb/s
    Stream #0:5[0x1b9](fra): Subtitle: dvb_subtitle ([6][0][0][0] / 0x0006)

Здесь dvb_subtitle — это субтитры, которые приходят изображениями.

DVB субтитры показываются приставками, некоторыми телевизорами, плеером VLC, но не смартфонами iPhone/Android. Flussonic Media Server распознает эти изображения и переведет в текст для показа на таких устройствах.

О WebVTT-субтитрах

WebVTT (Web Video Text Tracks) — это распространённый формат субтитров, который хорошо поддерживается браузерами и предоставляет ряд других возможностей. Конвертируя DVB субтитры в WebVTT, можно уменьшить нагрузку на канал передачи потока.

Файл формата WebVTT является обычным текстовым файлом с расширением .vtt, в котором в виде построчного списка прописаны метки с временем старта и временем окончания и текстовые сообщения для вывода к этим меткам.

К видео-контейнеру можно подключить несколько файлов WebVTT с текстом на разных языках. Для каждого языка нужно создавать отдельный файл.

Эти файлы могут использоваться для передачи дополнительных данных в JS плееры. Например, URL-превью картинок для кадров потока. Стандарт WebVTT также поддерживает CSS-стилизацию и опции по размещению в области просмотра видео.

Установка и настройка

Tesseract — качественный консольный OCR движок с открытым исходным кодом. Программа работает с UTF-8, а поддержка языков (включая русский) осуществляется с помощью дополнительных модулей.

Чтобы настроить распознавание и преобразование DVB субтитров:

  1. Установите Tesseract.

    Для операционной системы Ubuntu есть возможность установить готовый пакет flussonic-tesseract:

    apt install flussonic-tesseract 2. Для получения дорожки с текстовыми субтитрами добавьте в файле /etc/flussonic/flussonic.conf в настройки потока следующую строку:

    subtitles=ocr_replace;

    Опция subtitles=ocr_replace включает механизм преобразования DVB субтитров в WebVTT. При этом дорожка с новыми субтитрами в текстовом формате заменяет в выходном потоке дорожку с DVB-субтитрами.

    Пример: stream tvchannel { input tshttp://SOURCE:80/STREAM subtitles=ocr_replace; }

    Если в выходном потоке необходимо получить как прежнюю дорожку с DVB-субтитрами, так и новую дорожку с текстовыми субтитрами, то используется опция subtitles=ocr_add:

    stream tvchannel { input tshttp://SOURCE:80/STREAM subtitles=ocr_add; }

    Замечание. До выхода версии Flussonic 19.10 вместо subtitles=ocr_replace использовалась другая опция — dvbsubs_ocr=true.

  2. Для применения настроек выполните команду в консоли:

service flussonic reload

Если Tesseract запустился для потока, то в логах появятся примерно такие записи:

09:44:17.986 <0.966.0> [sow] tesseract_worker:58 start ocr for slv
09:44:18.275 <0.966.0> [sow] tesseract_worker:58 start ocr for srp
09:44:18.759 <0.966.0> [sow] tesseract_worker:58 start ocr for swe
09:44:19.045 <0.966.0> [sow] tesseract_worker:58 start ocr for dan
09:44:19.328 <0.966.0> [sow] tesseract_worker:58 start ocr for nor

Пример HLS плейлиста index.m3u8 с субтитрами:

#EXTM3U
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="English",DEFAULT=YES,AUTOSELECT=YES,FORCED=NO,LANGUAGE="eng",URI="http://flussonic-ip/index.m3u8"
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="French",DEFAULT=NO,AUTOSELECT=YES,FORCED=NO,LANGUAGE="fra",URI="http://flussonic-ip/index.m3u8"
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="German",DEFAULT=NO,AUTOSELECT=YES,FORCED=NO,LANGUAGE="deu",URI="http://flussonic-ip/index.m3u8"
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=450560,RESOLUTION=480x352,SUBTITLES="subs"
http://flussonic-ip/index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=855040,RESOLUTION=480x352,SUBTITLES="subs"
http://flussonic-ip/index.m3u8

После преобразования в выходном HLS потоке присутствуют субтитры в формате WebVTT:

Flussonic subtitles

Передача телетекста и Closed Captions

Flussonic умеет передавать телетекст и скрытые субтитры (closed captions), полученные по MPEG-TS. Для выходного HLS они будут преобразованы в WebVTT, а для DASH — в TTML. Cм. Телетекст и Сlosed Сaptions