Озвучить субтитры речью
При первом запуске скачиваются голосовая модель и фонемизатор — вместе около 98 МБ с этого сайта; дальше их кэширует браузер. Субтитры или текст, которые вы перетащили, не покидают эту вкладку. Выбор MP3 или M4A скачивает ещё 31 МБ кодировщика — поэтому WAV и стоит по умолчанию.
Параметры
Голос решает акцент и тембр, а — менее очевидно — и то, какой звуковой системой читается текст. Испанский голос с английским предложением не падает: он читает английские слова испанскими звуками, что хуже сообщения об ошибке. Предлагается семь языков, а не двенадцать, потому что фонемизатор, встроенный в эту страницу, не имеет голоса для японского и китайского. Послушайте короткий файл, прежде чем браться за длинный; все голоса несут одну модель, поэтому переключение стоит одного синтеза, а не загрузки.
Как быстро читает голос, поверх темпа, который модель считает естественным. «Медленная» — 0,8×, «Быстрая» — 1,2×: намеренно мягко, потому что примерно после 1,5× модель начинает проглатывать слоги, и результат звучит как спешка, а не как быстрая речь. Когда реплика слишком коротка для своей строки, страница сама поднимает скорость до 1,4× до того, как обрезать, и это ускорение умножается на выбранную здесь настройку.
WAV — несжатый, 24 кГц, моно, записанный здесь вообще без кодировщика: поэтому это значение по умолчанию и поэтому для него ничего не скачивается. MP3 и M4A нуждаются в 31 МБ видео движка для сжатия, но выходят примерно в десять раз меньше: десять минут речи — около 28 МБ в WAV и около 2,8 МБ в MP3. Выберите WAV, чтобы послушать голос, MP3 — чтобы отправить файл кому-то.
Страница превращает файл субтитров в голосовую дорожку, которая за ним следует: каждая реплика произносится вслух и ставится в момент её начала, поэтому получается один звуковой файл film.wav, где слова ложатся под субтитрами, а не друг на друга, а тишина заполняет промежутки так, что общая длина совпадает с концом последней реплики. Трудна здесь именно синхронизация: фраза, на которую нужно четыре секунды, но которой отведена реплика в две, не встанет просто так, поэтому каждая строка синтезируется с выбранной скоростью, измеряется и при нехватке синтезируется ещё раз быстрее, до 1,4×, а то, что не влезло и тогда, обрезается по началу следующей реплики и попадает в отчёт как потеря.
В списке десять голосов на семи языках — английский США и Великобритании, испанский, французский, итальянский, хинди и бразильский португальский, — и голос задаёт не только тембр, но и то, звуками какого языка читается текст, поэтому японский и китайский отсутствуют намеренно: фонемизатор на этой странице не знает их письменностей и выдал бы уверенную бессмыслицу вместо ошибки. Работа идёт на устройстве: около 98 МБ модели и фонемизатора скачиваются один раз с этого сайта и кэшируются, а файл субтитров не покидает вкладку. WAV выбран по умолчанию, потому что не требует кодера вовсе, тогда как MP3 или M4A подгружают 31 МБ ядра ffmpeg — это стоит того для всего, что вы собираетесь кому-то отправить.
Частые вопросы
Почему WAV из этой озвучки иногда обрезает фразу, хотя файл субтитров в порядке?
Потому что обрезает реплика, а не файл. Реплика, которая висит на экране 1,8 секунды, не вмещает строку, на произнесение которой нужно три секунды, если не разогнать голос выше 1,4×, а дальше слова перестают быть разборчивыми. Страница сначала пробует выбранную вами скорость, затем один раз синтезирует заново с той скоростью, которая позволила бы уложиться, но не выше 1,4×. Если и это не помогло, звук обрезается по началу следующей реплики, чтобы две строки никогда не звучали одновременно, а число затронутых реплик появляется в отчёте о потерях под очередью.
Что происходит с оформлением ASS, цветами и положением на экране при озвучке?
Они отбрасываются, и для звука это правильно: у аудиофайла нет ни цвета, ни места на экране. Уцелевает текст каждой реплики и её начало с концом — ровно то, что нужно для расстановки. Жирный шрифт, курсив, караоке-тайминги и переопределения позиции вроде {\anN} разбираются слоем форматов ещё до синтеза, поэтому строка, помеченная в файле ASS как курсив, читается тем же голосом, что и остальные. Если оформление нужно сохранить, сначала конвертируйте субтитры: продукт этой страницы — звук.
Можно ли произнести двустрочную реплику как одно непрерывное предложение?
Да, и она всегда так и произносится. Жёсткий перенос строки внутри реплики — типографское решение, место, где субтитр решил, что строка на экране становится слишком длинной, а не место, где говорящий сделал паузу. Поэтому две строки соединяются пробелом и синтезируются как одно высказывание, и реплика, разбитая на строки, звучит как один вдох, а не как двое, говорящие по очереди. Пауза в результате появляется только на границе реплик.
Какие языки голосовая дорожка действительно может произнести и что будет с японскими субтитрами?
Семь: en-US, en-GB, es, fr, hi, it и pt-BR. Японского и китайского среди них нет, потому что фонемизатор, вложенный в эту страницу (espeak-ng), не поставляет голоса ни для одного из них, хотя сама речевая модель на них обучалась. Японский .srt, отданный английскому голосу, не падает с явной ошибкой: латинские буквы читаются как английские, а кандзи пропускаются или искажаются. Честный путь для таких языков — дождаться сборки с японским или китайским фонемизатором, а не принимать дорожку, которая звучит правдоподобно и неверна.
Стоят ли MP3 или M4A лишних 31 МБ по сравнению с WAV по умолчанию?
Для всего длиннее нескольких минут — да. WAV — это несжатый PCM 24 кГц моно, поэтому десять минут озвучки занимают около 28 МБ, а те же десять минут в MP3 со 128 кбит/с — около 2,8 МБ. Плата за это — ядро ffmpeg, которое скачивается один раз, и именно поэтому по умолчанию WAV: если вы только хотите услышать, как звучит голос, лишнего не скачивается ничего. После того как кодер попал в кэш, повторная озвучка того же файла с теми же настройками идёт быстро.