С августа мы выпускаем короткие вертикальные ролики с новостями об ИИ: ведущий в кадре, разбор новости за тридцать секунд, прикладной вывод в конце. Ведущий — синтезированный аватар, голос — синтезированный тоже.
Ниже — то, что мы выяснили на практике за первые семь роликов. Не обзор инструментов, а конкретные грабли, каждая из которых стоила нам одного испорченного ролика.
Русский синтезированный голос не читает латиницу
Это первое, обо что спотыкается любой, кто делает русскоязычный контент про технологии. OpenAI синтезатор произносит как «опены». Названия моделей, продуктов и компаний в озвучке превращаются в кашу — а именно они и составляют половину новости про ИИ.
Решение, к которому мы пришли: разделить то, что произносится, и то, что показывается.
В текст для синтеза всё идёт кириллицей: Оупен Эй Ай, Лу́на, Тэ́рра. А на экран субтитры выводят нормальные OpenAI, Luna, Terra — по таблице подстановок, которая умеет в том числе склеивать три произнесённых слова в одно написанное.
Переключение движка не помогает. Мы проверяли альтернативный синтезатор: латинские слова он читает лучше, но OpenAI у него превращается в «Расапиной» — то есть хуже. Аббревиатуры смешанного регистра не читает верно ни один доступный движок.
Знак ударения решает одну проблему и создаёт другую
Символ ударения (U+0301) ставится в слово, чтобы движок не ошибся с ударным слогом. Работает — но не всегда и не бесплатно.
Во-первых, он срабатывает не на всех словах: на одном срабатывает, на соседнем игнорируется. Где не берёт — дешевле переписать фразу, чем воевать с движком.
Во-вторых, и это неочевидно: знак ударения может съесть соседний согласный. Слово Лу́на у одного голоса читается как «уна» — начальная «Л» пропадает. У другого голоса то же написание звучит верно.
Приём, который работает надёжнее: писать ударную гласную заглавной буквой — ЛУна. Ударение встаёт туда же, а согласный не трогается.
Слово надо слушать в контексте, а не в изоляции
Отдельная проверка слова ничего не гарантирует. «Пересчитайте» само по себе звучит верно, а сразу после вопросительной интонации редуцируется в «присчитайте» — движок дотягивает предыдущую интонацию.
Лечится написанием через дефис (Пере-считайте) и паузой перед проблемным словом. Пауза в 0,4 секунды не помогает, 0,6 — помогает: короткой не хватает, чтобы интонация предыдущей фразы осела.
Из того же ряда: заказанная пауза в 0,8 секунды даёт около 0,66 секунды реальной тишины. Закладывать надо с запасом.
Речь важнее нарезки
Соблазн разложить ролик на много коротких сцен велик — так проще менять картинку. Но в большинстве конструкторов каждая сцена озвучивается отдельно и склеивается встык, и на каждой границе речь обрывается без затухания. На слух это грубо, и никакой монтаж этого не чинит.
Мы держим весь текст в одной сцене с ведущим, паузы расставляем тегами внутри неё, а визуальное разнообразие делаем наложениями поверх готового кадра. В конце сцены оставляем короткую хвостовую паузу, чтобы склейка не срезала последний звук.
Полноэкранные плашки — только на хук и конец
Первая версия ролика была собрана из чередования «плашка с текстом — ведущий — плашка». Выглядит мёртво: ведущий пропадает из кадра, и ролик превращается в озвученную презентацию.
Работающая схема: полный кадр только на первую и последнюю секунды, а данные показываются полупрозрачными карточками поверх ведущего. Он остаётся в кадре всё время.
Карточки держим ниже лица и выше субтитров — в вертикальном кадре это узкая полоса, и высокие карточки с заголовком сверху закрывают ведущего. И одну и ту же карточку не повторяем трижды: на смысловых поворотах лучше поставить вставку на полный кадр с коротким текстом, а ведущий вернётся между ними.
Субтитры — из текста, а не из распознавания
Соблазн номер два: прогнать готовый ролик через распознавание речи и получить субтитры с таймингами. Не надо.
Распознавание ошибается ровно на тех словах, ради которых всё и затевалось: слышит «присчитайте» вместо «пересчитайте», теряет латиницу и числа. А дословный текст у нас уже есть — это сценарий. Правильный путь: брать тайминги из субтитрового файла, который отдаёт сам синтезатор, потому что в нём лежит именно то, что было произнесено.
Отдельное правило, которое мы вшили в генератор субтитров: точка, вопрос и восклицательный знак закрывают группу. Показывать «законченная фраза. Начало следующей» одной строкой нельзя, даже если она укладывается в лимит по словам.
Что мы измерили и на что не смогли повлиять
Синтезированная речь звучит монотоннее живой, и хотелось это починить настройками. Мы замерили разброс основного тона в полутонах на одинаковом тексте: штатный движок — 3,47, альтернативный с любыми настройками — 3,35–3,37, ещё один голос — 1,89.
Вывод неприятный: параметры вроде «стабильности» и «выразительности» принимаются, но результат не меняют — медиана тона совпадает до герца. Рычаг остался ровно один — текст: чередование длин фраз, вопросы, тире. Движок реагирует на пунктуацию заметно сильнее, чем на настройки.
Мелочи, которые видно сразу
- Хук в первую секунду. Самая сильная цифра — на нулевой секунде, без представления и разгона. Голос и картинка дают один факт двумя способами: ухом «в пять раз», глазом «−80 %».
- Луп. Первый и последний кадр — один и тот же, финальная фраза дословно повторяет первую. Стык не читается, и ролик уходит на второй круг.
- Темп. Около 1,8 слова в секунду с учётом пауз. На тридцать секунд — 50–60 слов, не больше.
- Нижние 22 % кадра свободны — там субтитры.
- Призыв к действию мы из ролика убрали. Семь секунд «подпишитесь» — это почти пятая часть хронометража, и они ломают луп. Ссылка живёт в описании.
- Громкость. Сырой результат синтеза всегда тихий — в нашем случае −22…−27 LUFS. Без нормализации ролик в ленте звучит заметно глуше соседних.
Что из этого переносится на другие задачи
Общее правило, которое мы вынесли: разделяйте то, что модель произносит, и то, что видит зритель. Как только эти два потока разведены, большинство проблем синтеза перестаёт быть проблемами оформления и становится вопросом одной таблицы подстановок.
И второе: любая настройка синтеза проверяется на слух и в контексте. Метрики качества и тесты на изолированных словах здесь врут — они нечувствительны ровно к тому, что слышит человек.
Нужен такой конвейер у себя? Мы собираем автоматизацию производства контента — от генерации до публикации по расписанию — и внедряем ИИ в продукты и процессы. Напишите нам, разберём вашу задачу.