Как вшить субтитры в видео (без загрузки на сервер)
Как вшить субтитры в видео на своём компьютере: четыре способа в сравнении, рабочие команды FFmpeg и как избежать потери качества при перекодировании.
Вшить субтитры в видео — значит прорисовать текст прямо в картинке и перекодировать файл, чтобы субтитры путешествовали вместе с ним как пиксели. Это нужно для TikTok, Reels и Shorts, которые вообще не принимают файлы субтитров, а также в любой момент, когда субтитры — часть дизайна, а не просто опция доступности. Для этого никуда не нужно ничего загружать: FFmpeg, HandBrake и десктопные приложения для субтитров делают всё это локально, без потолка по размеру файла, который есть у браузерных сервисов.
Дальше — четыре способа сделать это, рабочие команды и два фактора, которые на самом деле портят качество.
Когда вшивание — правильное решение
| Вшитые субтитры (хардсаб) | Файл или дорожка субтитров (софтсаб) | |
|---|---|---|
| Зритель может отключить | Нет | Да |
| Работает в TikTok, Reels, Shorts | Да | Нет, не поддерживается |
| Работает на YouTube, Vimeo | Да | Да, и доступно для поиска |
| Засчитывается для соответствия доступности | Обычно нет | Да |
| Индексируется поисковиками | Нет | Да |
| Исправить опечатку потом | Пересобрать видео | Отредактировать текстовый файл |
| Несколько языков в одном файле | Нет, отдельный рендер на каждый | Да, отдельная дорожка на каждый |
| Оформление сохраняется точно | Да | Только в дорожках ASS |
На практике большинству нужно и то и другое: вшивать — для вертикальных соцплатформ, где иначе не работает никак, и отдавать файл субтитров всюду, где его принимают, потому что файл можно найти поиском, переключить и исправить. Если нужно получить оба результата из одной задачи, доставка на нескольких языках разбирает, как оба варианта получаются из одного и того же таймлайна.
Четыре способа вшить субтитры
| FFmpeg | HandBrake | Браузерные сервисы | Десктопные приложения для субтитров | |
|---|---|---|---|---|
| Цена | Бесплатно | Бесплатно | Бесплатный тариф, потом подписка | Разовый платёж или подписка |
| Загружает ваше видео | Нет | Нет | Да, целиком | Нет |
| Ограничение по размеру / длительности | Нет | Нет | Да, обычно жёсткое | Нет |
| Создаёт субтитры | Нет | Нет | Да | Да |
| Управление оформлением | Через 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 и копируйте звук. И проверяйте шрифт и холст до того, как потратите время на кодирование, — именно эти два фактора превращают идеальный файл субтитров в испорченный результат.