← Все статьи

SSML для озвучки: как управлять паузами, интонацией и ударениями

Светящаяся стеклянная звуковая волна и прозрачные сферы на светлом фоне

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

Зачем разметка, если есть точки и запятые

Знаки препинания дают грубое управление: большинство движков делают паузу на точке и почти не реагируют на тире. Для короткой фразы этого хватает. Для озвучки ролика, аудиокниги или автоответчика — нет: там важно, чтобы пауза была ровно 300 миллисекунд, а не «сколько получится», и чтобы цена не читалась как «пять запятая девять». SSML добавляет три вещи, которых нет в обычном тексте: точные паузы, параметры голоса (темп, высота, громкость) и подсказки, как произносить числа, даты и сокращения.

И сразу оговорка, которая сэкономит время: разметка не делает текст лучше. Если фраза плохо написана, SSML лишь аккуратно прочитает плохую фразу.

Где SSML работает, а где нет

SSML — стандарт W3C, но поддержка в движках разная. Один синтезатор понимает полный набор тегов, второй игнорирует всё, кроме пауз, третий читает разметку вслух, потому что ждёт обычный текст. Поэтому первое действие — не писать длинную статью в разметке, а проверить движок на одной короткой фразе. Разбор SSML для голосового ИИ на dev.to (25 октября 2026) описывает базовый набор тегов; спецификация — SSML 1.1 на сайте W3C.

Полезно помнить, что отказы — нормальная часть любой генерации. По обезличенным агрегатам боевой базы (server/seo/benchmarkData.json, окно 25.09–25.10.2026) за 30 дней платформа выполнила 14 784 генерации: 12 323 изображения, 2 001 видео и 460 музыкальных треков. И даже у зрелых моделей есть отказы: за 90 дней успешными оказались 93,3% генераций gpt-image-2 (2 991 завершённая) и 91,2% у seedream-4.5 (1 395). С озвучкой та же логика: сначала короткий фрагмент, потом длинный текст.

Каркас: <speak>, <p> и <s>

Строгие движки требуют, чтобы весь текст был обёрнут в корневой тег <speak>. Внутри полезно размечать абзацы и предложения — так проще ставить паузы и менять темп в нужном месте.

<speak>
  <p><s>Первое предложение.</s><s>Второе предложение.</s></p>
</speak>

Спецсимволы внутри текста экранируются: &amp; вместо & и &lt; вместо <. Иначе часть движков отклонит запрос, а часть прочитает «амперсанд» вслух.

Паузы: <break>

Тег <break> задаёт паузу двумя способами: точное время (time="300ms" или time="1.2s") или силу (strength="weak|medium|strong|x-strong"). Второй вариант удобнее, когда точные миллисекунды не важны, а нужна естественная иерархия: короткая пауза между словами, средняя между предложениями, длинная между разделами.

Первый абзац.<break time="400ms"/>
Второй абзац.<break strength="strong"/>
Новая мысль.

Ориентиры для русской начитки: 250–400 мс между предложениями и 600–800 мс между смысловыми блоками. Это не стандарт, а отправная точка — на слух почти всегда хочется сократить паузы, а не удлинить. И не ставьте <break> после каждого слова: речь становится рваной.

Темп, высота и громкость: <prosody>

<prosody> управляет тремя параметрами. rate — скорость: словами (x-slow, slow, medium, fast) или процентами (rate="90%"). pitch — высота: low и high, проценты или полутона (pitch="+1st"). volume — громкость: soft, loud или число от 0 до 100.

<prosody rate="95%" pitch="+1st">
Эта фраза звучит чуть медленнее и чуть выше.
</prosody>

Для длинной начитки держите темп 90–100%: быстрее — только для рекламы и коротких подсказок. Высоту меняйте на полтона-тон, а не «на максимум»: +20st превращает голос в мультяшный и часто выходит за допустимый диапазон движка. Громкость почти всегда лучше оставить на движке и нормализовать звук уже в редакторе.

Акценты: <emphasis>

<emphasis level="strong|moderate|reduced"> выделяет слово или фразу. Работает мягче, чем кажется: это не крик, а лёгкий сдвиг интонации. Правило простое — один-два акцента на абзац. Если выделено полтекста, не выделено ничего.

Важно: скидка действует <emphasis level="strong">только сегодня</emphasis>.
Три прозрачные стеклянные сферы, соединённые тонкой светящейся линией

Числа, даты и сокращения: <say-as> и <sub>

Самая практичная часть SSML — подсказки для неоднозначных мест. <say-as interpret-as="..."> говорит движку, как читать содержимое: как число, дату, время, телефон или посимвольно. <sub alias="..."> заменяет написанное на произносимое.

Цена — <say-as interpret-as="cardinal">12500</say-as> рублей.
Встреча <say-as interpret-as="date">01.11.2026</say-as>.
<sub alias="общество с ограниченной ответственностью">ООО</sub> «Пример».

Набор значений interpret-as у движков отличается: где-то есть «currency» и «telephone», где-то только «cardinal» и «characters». Если тег не поддержан, текст обычно читается как есть — но проверить это нужно на коротком примере.

Ударения и произношение

В SSML для этого есть <phoneme alphabet="ipa" ph="..."> и вариант x-sampa. Проблема в том, что фонемную запись поддерживают далеко не все движки, а для русского она особенно редка. На практике помогают три обхода: использовать собственный синтаксис движка (например, знак ударения перед гласной — но это не часть SSML и работает не везде), заменить слово синонимом или перестроить фразу так, чтобы неоднозначность исчезла. Писать ударную гласную заглавной не стоит: часть движков прочитает слово по буквам.

Если движок поддерживает <sub>, ударение можно закрепить через него — подставив слово в нужной форме или с ясно читаемым контекстом. Это грубее, зато работает там, где <phoneme> молчит.

Теги, на которые не стоит рассчитывать

<voice> (смена голоса внутри текста), <audio> (вставка файла) и <mark> (закладка для плеера) описаны в стандарте, но в облачных синтезаторах поддерживаются редко: смена голоса обычно запрещена, внешние аудиофайлы могут быть заблокированы, а закладки нужны только собственному плееру. Проверяйте документацию конкретного движка, прежде чем строить на них сценарий.

Порядок проверки: от короткой фразы к длинному тексту

Рабочий алгоритм занимает десять минут и экономит часы:

  1. Соберите одну фразу со всеми тегами, которые собираетесь использовать.
  2. Озвучьте её и послушайте: теги прочитаны вслух, проигнорированы или сработали?
  3. Сравните два варианта — с разметкой и без: паузы и темп действительно изменились?
  4. Только после этого отправляйте полный текст, разбив его на абзацы и сохранив рабочую разметку как шаблон.

В озвучке на сайте один запрос принимает до 5000 символов — длинный текст лучше делить на части и собирать дорожку в редакторе. Так проще переозвучить один абзац, не переделывая всё.

Частые ошибки

  • Нет корневого <speak> — строгий движок отклоняет запрос.
  • Неэкранированные & и < — запрос ломается или читается по буквам.
  • Слишком много <break> — речь становится неестественно рваной.
  • Высота в герцах вместо полутонов или процентов — ошибка диапазона.
  • Вложенные <prosody> с противоречивыми параметрами — результат зависит от движка.
  • Разметка отправлена в движок, который её не поддерживает, — теги звучат вслух.

Короткий чек-лист

  • Проверьте поддержку тегов в документации движка.
  • Начните с одной фразы и всех нужных тегов.
  • Держите паузы 250–400 мс между предложениями.
  • Темп 90–100%, высота ±1–2 полутона.
  • Один-два акцента на абзац.
  • Числа, даты и аббревиатуры — через <say-as> и <sub>.
  • Длинный текст делите на части.

Частые вопросы

SSML и AI-озвучка — это одно и то же?

Нет. SSML — язык разметки, а AI-озвучка — движок, который превращает текст в речь. Движок может поддерживать SSML полностью, частично или никак.

Почему движок прочитал теги вслух?

Потому что он ждёт обычный текст и не распознал разметку. Уберите теги или включите режим SSML, если он есть в настройках.

Можно ли поставить ударение в русском слове?

Универсального тега нет. Если движок поддерживает <phoneme>, используйте его; иначе — собственный синтаксис движка, синоним или перестройка фразы.

Сколько текста можно озвучить за один раз?

У разных сервисов лимиты разные. В озвучке на NeuralSpace — до 5000 символов на запрос; длинные тексты делите на части.

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