Назад к блогу

Как вшить субтитры в видео (без загрузки на сервер)

Как вшить субтитры в видео на своём компьютере: четыре способа в сравнении, рабочие команды FFmpeg и как избежать потери качества при перекодировании.

11 сентября 2026 г.
Sablate Team

Вшить субтитры в видео — значит прорисовать текст прямо в картинке и перекодировать файл, чтобы субтитры путешествовали вместе с ним как пиксели. Это нужно для TikTok, Reels и Shorts, которые вообще не принимают файлы субтитров, а также в любой момент, когда субтитры — часть дизайна, а не просто опция доступности. Для этого никуда не нужно ничего загружать: FFmpeg, HandBrake и десктопные приложения для субтитров делают всё это локально, без потолка по размеру файла, который есть у браузерных сервисов.

Дальше — четыре способа сделать это, рабочие команды и два фактора, которые на самом деле портят качество.

Когда вшивание — правильное решение

Вшитые субтитры (хардсаб)Файл или дорожка субтитров (софтсаб)
Зритель может отключитьНетДа
Работает в TikTok, Reels, ShortsДаНет, не поддерживается
Работает на YouTube, VimeoДаДа, и доступно для поиска
Засчитывается для соответствия доступностиОбычно нетДа
Индексируется поисковикамиНетДа
Исправить опечатку потомПересобрать видеоОтредактировать текстовый файл
Несколько языков в одном файлеНет, отдельный рендер на каждыйДа, отдельная дорожка на каждый
Оформление сохраняется точноДаТолько в дорожках ASS

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

Четыре способа вшить субтитры

FFmpegHandBrakeБраузерные сервисыДесктопные приложения для субтитров
ЦенаБесплатноБесплатноБесплатный тариф, потом подпискаРазовый платёж или подписка
Загружает ваше видеоНетНетДа, целикомНет
Ограничение по размеру / длительностиНетНетДа, обычно жёсткоеНет
Создаёт субтитрыНетНетДаДа
Управление оформлениемЧерез ASS или force_styleОграниченноеШаблоныПолное, с живым предпросмотром
Порог входаКомандная строкаСреднийНикакогоНизкий

Два честных замечания. FFmpeg и HandBrake бесплатны и прекрасно справляются с этой задачей, и если готовый файл субтитров у вас уже есть, FFmpeg — это одна команда, покупать ради этого что-либо не нужно. Чего ни тот, ни другой не делают — это создание субтитров: они вшивают файл, который у вас уже есть, оттаймированный и исправленный где-то ещё. Браузерные сервисы субтитры создают, но загрузка там не опциональна, а значит, они не подходят для конфиденциальных материалов и для всего, что длиннее их лимита.

Вшивание с помощью FFmpeg

Для обычного SRT:

ffmpeg -i input.mp4 -vf "subtitles=subs.srt" -c:a copy output.mp4

Для оформленного файла ASS, используйте фильтр ass, чтобы оформление сохранилось, а не свелось к обычному тексту:

ffmpeg -i input.mp4 -vf "ass=subs.ass" -c:a copy output.mp4

Чтобы задать качество явно, а не соглашаться со значением по умолчанию:

ffmpeg -i input.mp4 -vf "subtitles=subs.srt" \
  -c:v libx264 -crf 18 -preset slow -c:a copy output.mp4

Чтобы изменить оформление SRT без предварительной конвертации:

ffmpeg -i input.mp4 \
  -vf "subtitles=subs.srt:force_style='FontName=Arial,FontSize=24,Outline=2'" \
  -c:a copy output.mp4

Ловушка Windows. Путь внутри фильтра разбирает сам фильтр, а не оболочка, поэтому двоеточие буквы диска и обратные слэши нужно экранировать. Это самая частая причина, по которой команда падает с ошибкой «файл не найден» на файле, который совершенно точно существует:

ffmpeg -i input.mp4 -vf "subtitles='C\:/Videos/subs.srt'" -c:a copy output.mp4

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

Что на самом деле портит качество

Есть два фактора, и вшивание само по себе — не один из них.

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

Согласие на настройки кодировщика по умолчанию. -crf 18 в x264 визуально почти неотличим от оригинала для большинства контента; значение по умолчанию 23 заметно смягчает детализированную картинку. -preset slow даёт файл меньшего размера при том же качестве в обмен на время кодирования. А -c:a copy оставляет звуковую дорожку нетронутой — перекодировать звук, когда меняется только изображение, смысла нет.

Почему рендер не совпадает с предпросмотром

Две причины, и обе можно устранить до того, как вы потратите время на кодирование.

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

Размер холста. Позиции и размеры шрифта в ASS заданы относительно виртуального холста, объявленного в самом файле, а не относительно пиксельных размеров видео. Один и тот же размер шрифта даёт разный текст на экране на 1080p и на 4K, если холст не зафиксирован. Sablate закрепляет холст субтитров на виртуальном кадре высотой 1080 и вычисляет ширину из реального соотношения сторон источника, учитывая метаданные поворота, поэтому размер шрифта означает одно и то же независимо от разрешения съёмки, — а предпросмотр в редакторе масштабируется по тому же самому холсту, что и рендерер.

Именно поэтому качество вшивания так сильно различается между инструментами. Многие онлайн-редакторы накладывают субтитры как плоский текстовый оверлей; вшивание в Sablate рендерится через libass — тот же движок, которым медиаплееры отображают субтитры ASS, — поэтому контуры, тени, покадровый караоке-тайминг и корректные для письменности шрифты получаются настоящей типографикой субтитров, а не приблизительной графикой.

Вертикальный и квадратный формат

Если видео идёт в Reels, Shorts или TikTok, меняйте соотношение сторон во время рендера, а не обрезайте кадр потом. Обрезка готового вшитого 16:9-видео до 9:16 срезает субтитры по бокам вместе с картинкой.

Sablate рендерит в 16:9 (1920×1080), 9:16 (1080×1920) или 1:1 (1080×1080), обрезая кадр под целевой формат либо дополняя его размытой копией источника, и располагает субтитры уже под финальный кадр. Держите текст за пределами нижней пятой части вертикального кадра — на большинстве телефонов эту зону перекрывает интерфейс самой платформы.

Без командной строки

Если готового исправленного файла субтитров у вас ещё нет, вшивание — это последний шаг более длинной задачи: транскрипция, правка, оформление, рендер. Sablate делает всё это от начала до конца на вашем компьютере — локальная транскрипция с Whisper, редактор с перетаскиванием тайминга на таймлайне и предупреждениями о скорости чтения, 13 пресетов оформления и вшивание, которое в точности совпадает с предпросмотром.

Вшивание доступно на бесплатном тарифе с небольшой отметкой в углу; Pro убирает отметку и добавляет экспорт в .ass, .mkv с несколькими дорожками и пакетную обработку за разовый платёж $29. Скачайте приложение или посмотрите всю разбивку на странице тарифов.

Коротко

Вшивайте субтитры, когда платформа не читает файлы субтитров или когда оформление — часть общего облика, а во всех остальных случаях отдавайте файл субтитров: текст, который можно править, всегда лучше пикселей, которые не тронуть. Рендерите с мастер-файла, а не с копии, подготовленной для загрузки. Используйте CRF 18 и копируйте звук. И проверяйте шрифт и холст до того, как потратите время на кодирование, — именно эти два фактора превращают идеальный файл субтитров в испорченный результат.