Всем привет.

Хочу рассказать о такой удивительной технологии как Tts и, возможно, неожиданном её применении для озвучки субтитров на YouTube с использованием JavaScript. Реализовано в виде расширения для браузера Chrome (для Yandex и Atom тоже подойдет).

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

В целом, технология Text-to-Speech достаточно известна, много чего на ней написано, распознавание речи и все такое. Большое внимание заострять не буду, вы и сами почитаете, если будет нужно. Для JavaScript почитать можно тут Web Speech API, послушать здесь Speech synthesiser.

Скажу только, что у Google есть множество разных голосов, но почти все они часть платного API, а базовый функционал, браузерного синтезатора речи, предоставляет по 1 голосу на язык (для английского доступно 3 голоса: en-US, en-GB Male, en-GB Female).

Microsoft предоставляет 2 голоса на язык, в рамках языковых пакетов для Windows (10). Новые голоса добавляются в "Параметры->Время и язык->Распознавание голоса". Может у них есть и больше голосов, но установив все доступные мне языковые пакеты, получилось так:

Список доступных голосов win 10

Доступные голоса для Windows 10 Chrome

Code

Microsoft

Google

ar-EG

Microsoft Hoda - Arabic (Egypt)

ar-SA

Microsoft Naayf - Arabic (Saudi)

bg-BG

Microsoft Ivan - Bulgarian (Bulgaria)

ca-ES

Microsoft Herena - Catalan (Catalan)

cs-CZ

Microsoft Jakub - Czech (Czech Republic)

da-DK

Microsoft Helle - Danish (Denmark)

de-AT

Microsoft Michael - German (Austria)

de-CH

Microsoft Karsten - German (Switzerland)

de-DE

Microsoft Hedda - German (Germany)

Microsoft Katja - German (Germany)

Microsoft Stefan - German (Germany)

Google Deutsch

el-GR

Microsoft Stefanos - Greek (Greece)

en-AU

Microsoft Catherine - English (Australia)

Microsoft James - English (Australia)

en-CA

Microsoft Linda - English (Canada)

Microsoft Richard - English (Canada)

en-GB

Microsoft George - English (United Kingdom)

Microsoft Hazel - English (United Kingdom)

Microsoft Susan - English (United Kingdom)

Google UK English Female

Google UK English Male

en-IE

Microsoft Sean - English (Ireland)

en-IN

Microsoft Heera - English (India)

Microsoft Ravi - English (India)

en-US

Microsoft David - English (United States)

Microsoft Mark - English (United States)

Microsoft Zira - English (United States)

Google US English

es-ES

Microsoft Helena - Spanish (Spain)

Microsoft Laura - Spanish (Spain)

Microsoft Pablo - Spanish (Spain)

Google español

es-MX

Microsoft Raul - Spanish (Mexico)

Microsoft Sabina - Spanish (Mexico)

es-US

Google español de Estados Unidos

fi-FI

Microsoft Heidi - Finnish (Finland)

fr-CA

Microsoft Caroline - French (Canada)

Microsoft Claude - French (Canada)

Microsoft Nathalie - French (Canada)

fr-CH

Microsoft Guillaume - French (Switzerland)

fr-FR

Microsoft Hortense - French (France)

Microsoft Julie - French (France)

Microsoft Paul - French (France)

Google français

hi-IN

Microsoft Hemant - Hindi (India)

Microsoft Kalpana - Hindi (India)

Google हिन्दी

hr-HR

Microsoft Matej - Croatian (Croatia)

hu-HU

Microsoft Szabolcs - Hungarian (Hungary)

id-ID

Microsoft Andika - Indonesian (Indonesia)

Google Bahasa Indonesia

it-IT

Microsoft Cosimo - Italian (Italy)

Microsoft Elsa - Italian (Italy)

Google italiano

ja-JP

Microsoft Ayumi - Japanese (Japan)

Microsoft Haruka - Japanese (Japan)

Microsoft Ichiro - Japanese (Japan)

Microsoft Sayaka - Japanese (Japan)

Google 日本語

ko-KR

Microsoft Heami - Korean (Korean)

Google 한국의

ms-MY

Microsoft Rizwan - Malay (Malaysia)

nb-NO

Microsoft Jon - Norwegian (Bokmål)

nl-BE

Microsoft Bart - Dutch (Belgium)

nl-NL

Microsoft Frank - Dutch (Netherlands)

Google Nederlands

pl-PL

Microsoft Adam - Polish (Poland)

Microsoft Paulina - Polish (Poland)

Google polski

pt-BR

Microsoft Daniel - Portuguese (Brazil)

Microsoft Maria - Portuguese (Brazil)

Google português do Brasil

pt-PT

Microsoft Helia - Portuguese (Portugal)

ro-RO

Microsoft Andrei - Romanian (Romania)

ru-RU

Microsoft Irina - Russian (Russia)

Microsoft Pavel - Russian (Russia)

Google русский

sk-SK

Microsoft Filip - Slovak (Slovakia)

sl-SI

Microsoft Lado - Slovenian (Slovenia)

sv-SE

Microsoft Bengt - Swedish

ta-IN

Microsoft Valluvar - Tamil (India)

th-TH

Microsoft Pattara - Thai (Thailand)

vi-VN

Microsoft An - Vietnamese (Vietnam)

zh-CN

Microsoft Huihui - Chinese (Simplified, PRC)

Microsoft Kangkang - Chinese (Simplified, PRC)

Microsoft Yaoyao - Chinese (Simplified, PRC)

Google 普通话(中国大陆)

zh-HK

Microsoft Danny - Chinese (Traditional, Hong Kong S.A.R.)

Microsoft Tracy - Chinese (Traditional, Hong Kong S.A.R.)

Google 粤語(香港)

zh-TW

Microsoft Hanhan - Chinese (Traditional, Taiwan)

Microsoft Yating - Chinese (Traditional, Taiwan)

Microsoft Zhiwei - Chinese (Traditional, Taiwan)

Google 國語(臺灣)

Работает оно в Chromium браузерах (Chrome, Яндекс, Atom)

YouTube

Попробовав несколько таких же расширений, а их в магазине Chrome, штук 5 точно есть, решил написать еще одно, мне показалось, что функционала в них недостаточно и хотелось немного исправить положение дел.

Забегая вперед, хочу сказать, что, одна из ключевых проблем, связанных с озвучиванием субтитров на YouTube, заключается в том, что, технология на данный момент реализована не полностью, и нет возможности задать время произношения текста.

Т.е. можно регулировать скорость произношения (быстро, медленно, нормально), но указать время для указанного текста (12 слов за 2 секунды) через API, пока что нет возможности. Там есть определенный формат SSML, но он еще не поддерживался, когда я его тестировал (лето 2021).

В конце концов, решить проблему кое как удалось, но не очень оптимально.

SpeechSynthesis API

Как все мы знаем, за синтез речи в браузере Chrome отвечает SpeechSynthesis.

В целом, все, достаточно просто, и на этом можно создавать функционал, позволяющий общаться с посетителями презентаций, выставок, сайтов, программ и т.д.

для более точного контроля за синтезатором речи, предусмотрены различные методы, слушатели и параметры. Например, событие "boundary" - Активируется, когда произносимый текст достигает границы слова или предложения.

Один из нюансов, связанных с голосами, таков, что у голосов от Google есть ограничение на время произношения, примерно 1-2 минуты, после чего синтезатор замолкает. Продолжить речь можно через паузу, программно нажать и тут же снять с паузыwindow.speechSynthesis.pause(); window.speechSynthesis.resume(); и речь продолжится. Но если есть очередь воспроизведения... Может быть так только в бесплатном API, платный проверить не доводилось.

У Microsoft таких ограничений нет. Чтобы проверить ограничения на максимальную длину текста и время работы для синтезатора речи, с голосом от Microsoft, как-то почти 2 часа сидел и слушал какой-то рыба-текст, продублированный для увеличения длины... надоело, выключил. Около 100.000 символов и больше 100 минут времени. Теоретически можно сказки или книги на ночь читать.

YouTube API

На Google API присутствует весь функционал, связанный с субтитрами, но он платный. Так что вариантов для бесплатного, остается всего 2: парсить страницу с видеороликом либо "брутфорсить" API плеера на youtube.

варианты

первый вариант с парсингом, выглядит так

парсинг страницы с видеороликом
парсинг страницы с видеороликом

и второй, примерно, так

brutforce api :)
brutforce api :)

Но, тем не менее, все более-менее доступно и досягаемо.

Получив таким образом url субтитров, и узнав в процессе много нового, о самом плеере и youtube в частности, можно уже построить какой-либо функционал с применением SpeechSynthesis API и YouTube API

Расширение

Так, примерно, и создавалось расширение для браузера, которое я назвал, после нескольких переименований

Translate and Speak Subtitles for YouTube™

Translate and Speak Subtitles for YouTube
Translate and Speak Subtitles for YouTube

иконка Ева из Валл-и

В качестве завершения

Не буду слишком вдаваться в подробности, как там и что, скучные подробности и все такое. Может быть позже.

Тем не менее, выровнять скорость произношения субтитров мне удалось лишь прокрутив все голоса по таймеру, определив скорость произношения 1 буквы. Заполнив ручками таблицу со скоростями, удалось кое как "отгадывать" нужную скорость произношения субтитров, чтобы голос не отставал от видео.

таблица скоростей

Часть API плеера на YouTube

YouTube Player API
YouTube Player API

А чтобы не сильно быстро и не сильно медленно, примерное ограничение по скорости, для русской озвучки от 1.1 до 1.6.

Не всегда помогает, бывает, что нужно скорость воспроизведения видео сделать 0.75 или 0.5 чтобы успеть за видео. Особенно в английском, если автор ролика быстро говорит, у них слова короткие, на русском нужно еще быстрее говорить, но выше 2х скорости, слова́ почти не разобрать.

В магазине Translate and Speak Subtitles for YouTube

Итого

Всем спасибо, что прочитали статью.

Комментарии (4)


  1. rexen
    27.10.2021 13:22

    А нельзя снизить требования к версии Хромиума? У меня последний Цент-браузер, но он на 86-ом. А расширение требует 88-й.


    1. Aulon8 Автор
      27.10.2021 13:36

      Можно наверное. Я точно не помню почему именно 88 версию указывал, может быть есть какие то особенности. Проверю, но в любом случае, дело 1-2 дней, пока изменения пройдут проверку в магазине.
      UPD Версию понизить, к сожалению нет возможности. Дело в том, что с 88 версии поддерживается 3я версия манифеста, гугл где то писал в рекомендациях, что 2я версия вскоре перестанет поддерживаться, и я перешел на 3 манифест, а он только начиная с 88 хрома.


  1. shadovv76
    27.10.2021 13:43

    пробовал буквально на этой неделе ваше расширение. беспристрастно скажу что из 3 имеющихся оно было в топе 2, но остановился на другом желтый квадрат с синим по-моему полукольцом в квадратике. Общее впечатление оно работало по стабильнее и меньше приходилось перегружать страницу чтобы продолжить после непонятных залипаний. Качество самой речи конечно одинаковое потому что АПИ общий. Но вот что могу посоветовать... Одно из приложений в плеере Youtube делало кнопку включить озвучку прямо в панели управления плеером. Также из неудобств то что сначала надо перевод субтитров включить каждый раз, хотя большинство людей имеют предпочитаемый язык, но это нигде не запоминается.

    Искал альтернативу Yandex браузеру, но хочу отметить что их переводчик более стабилен и эргономично встроен в плеер/браузер. Но даже в нем раздражает ускорение речи. Можно было бы оставить пользователю выбор: замедлить видео или ускорить речь, так же видео теоретически можно было бы и останавливать на срок "допроизношения". В видеомануалах это вполне приемлемо. В художественных видео не уверен.

    Продолжайте развивать расширение оно на мой взгляд вполне востребованное.


    1. Aulon8 Автор
      28.10.2021 09:52

      Спасибо. Я и забыл, что у яндекса есть такая фишка. Очень так неплохо они сделали. Надеюсь, у них вскоре появится больше и лучше. Видел бы ошибки у себя, тут же бы исправил.

      Тоже видел то "третье" расширение, там очень удачный способ встраивания в панель видео. Стыдно тырить, там достаточно хорошо сделано, посмотрим что можно придумать.

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