Skip to content

Распознавание речи

Телетекст и кэпшны станция не сочиняет: она провозит текст, который принесла с собой картинка. Но канал, у которого текста нет вовсе, от этого субтитров не получает — а именно его чаще всего и нужно снабдить ими: региональная врезка, корпоративная трансляция, чужой источник без служебных данных.

Распознавание речи закрывает этот случай: станция сама читает звук записанного канала и дописывает к нему субтитровую дорожку.

Живой сигнал при этом не трогается вовсе. Распознавание работает поверх архива: читает записанный звук и туда же кладёт субтитры. Отсюда два следствия, о которых стоит знать заранее.

  • Каналу обязательна запись архива. Без неё распознаванию неоткуда брать звук и некуда писать результат.
  • Отставание безопасно. Если распознавание не поспевает за эфиром, субтитры отстают и потом догоняют; на выдаче канала это не сказывается никак.

Как включить

Распознавание живёт на вкладке Обработка карточки канала, в секции Распознавание речи. Включает его переключатель Распознавать речь в субтитры.

Секция распознавания речи на вкладке обработки

Полей четыре, и все они не обязательны — умолчаний хватает, чтобы включить распознавание одним переключателем.

Поле Что задаёт
Модель Размер распознавателя. Крупная модель точнее, но медленнее и требует больше памяти.
Язык Код ISO-639-1, например ru. Пусто — определить по звуку.
Источник звука Дорожка эфира, которую слушать. По умолчанию первая.
Окно распознавания, с До 120 секунд. Длинное окно точнее по смыслу, но реплика появляется позже.

Язык лучше задать, если он известен. Автоопределение решает по первым секундам звука и на канале, который начинается с музыкальной заставки, ошибается — а ошибка в языке портит всю дорожку, а не одну реплику.

Источник звука — обычное дело на головной станции: канал везёт несколько языковых дорожек, а распознавание слушает ровно одну. Если выбранной дорожки в эфире нет, состояние так и скажет — «Выбранная аудиодорожка в эфире не найдена».

Без записи архива не запускается

Если включить распознавание на канале без записи, панель отвечает сразу, не дожидаясь сохранения:

Предупреждение о том, что распознаванию нужна запись архива

Это не запрет сохранить настройку, а предупреждение о том, что она не заработает. Включите каналу запись, и распознавание поднимется само.

Состояние распознавания

Под формой панель показывает, что происходит на самом деле. Это единственное место, где видна живая работа распознавания: карточка канала берёт состояние с той ноды, где канал записывается.

Состояние распознавания: работает, отставание, распознано звука, реплик

  • Работает / Не работает — поднято ли распознавание. «Не работает» всегда сопровождается причиной текстом.
  • Отставание — на сколько распознанное отстаёт от текущего момента. На живом краю это секунды; на архиве, который распознавание догоняет с начала, — часы, и это нормальный рабочий режим, а не сбой.
  • Распознано звука — сколько звука уже прошло через распознаватель.
  • Реплик — сколько строк субтитров написано.
  • Ошибок — сбои чтения архива и распознавания. Ноль здесь — обычное состояние.
  • Последняя реплика — когда распознавание в последний раз что-то написало.

Причины, по которым распознавание не поднимается, панель называет прямо:

Что написано Что делать
У стрима нет записи архива Включить запись.
Файл модели не найден или не загрузился Положить файл модели на сервер (ниже).
Выбранная аудиодорожка в эфире не найдена Выбрать другой источник звука или оставить умолчание.
Такой язык распознавателю неизвестен Проверить код языка или очистить поле.
Сборка сервера без распознавания речи Обратиться в поддержку: коробка собрана без движка.

Работающее распознавание со свежей ошибкой — это предупреждение, а не авария: один непрочитанный кусок не останавливает работу, распознавание продолжается со следующего.

Файл модели

Сама модель на сервер не поставляется: пригодная весит больше гигабайта, и какая нужна — решает владелец станции. Сервер ищет её в каталоге состояния продукта — /var/lib/mcaster/whisper-models — и ждёт там файла ggml-<модель>.bin, то есть ggml-medium.bin для модели medium.

Пока файла нет, состояние распознавания честно говорит «Файл модели не найден или не загрузился», а канал продолжает работать и записываться как ни в чём не бывало.

Один файл обслуживает все каналы станции: модель читается в память один раз на процесс, сколько бы каналов её ни просило.

Что уходит на выход

Распознанное становится обычной субтитровой дорожкой канала: она видна в медиаинформации и уезжает в OTT-копию как WebVTT — ровно там, где текстовая дорожка и нужна, потому что телетекст ни один OTT-плеер не декодирует.

В транспортном потоке распознанного текста не будет: субтитровой дорожке внутри MPEG-TS ехать не в чем — то же ограничение, что и у извлечения телетекста.

Смотреть дорожку имеет смысл по архиву. На живом краю субтитров ещё нет — они появляются с тем самым отставанием, которое показывает состояние.

Что дальше