Назад к блогу

Как добавить субтитры в MKV и MP4 без перекодирования

Как добавить субтитры в MKV и MP4 без перекодирования: MKVToolNix и FFmpeg, много языков в одном файле, флаги по умолчанию и forced, почему дорожки пропадают.

3 октября 2026 г.
Sablate Team

Чтобы добавить субтитры в MKV без перекодирования, их нужно замуксить отдельной дорожкой: MKVToolNix делает это из графического интерфейса, FFmpeg — одной командой, и оба копируют видео без изменений примерно за то время, которое уходит на копирование файла. MP4 тоже может нести дорожки субтитров, но только в виде простого текста.

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

Почему для добавления субтитров в MKV не нужно перекодирование

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

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

Matroska (.mkv) создавали под мягкие субтитры. В нём может быть любое число дорожек видео, звука и субтитров, а также вложенные файлы, например шрифты, и у каждой дорожки есть собственные метаданные:

  • Язык — код вроде eng или spa; по нему плееры подписывают дорожки и сами выбирают нужную.
  • Название — произвольный текст в меню плеера, например «English» или «English (SDH)».
  • Флаг по умолчанию (default) — дорожка, которую плеер включает сам, если зритель не выбрал другую.
  • Флаг принудительного показа (forced) — дорожка, которая показывается, даже если зритель выключил субтитры, и предназначена для реплик на иностранном языке.

Правильно выставить эти четыре параметра — большая часть работы. Сам мукс — лёгкая часть.

Можно ли добавить дорожку субтитров в MP4?

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

MKVMP4
Форматы субтитров, которые хранит контейнерSRT, ASS, PGS и другиетолько mov_text
Оформление (шрифты, цвета, положение)Сохраняется в дорожках ASSТеряется
Файлы шрифтов, вложенные в видеоДаНет
Несколько языков в одном файлеДаДа, как простой текст
Открывается во встроенных плеерах AppleНе всегдаДа
Открывается в VLC и mpvДаДа
Нужно ли перекодирование, чтобы добавить дорожкуНетНет

Чаще всего выбор определяет строка про Apple. QuickTime вообще не открывает MKV, а родные приложения iPhone справляются с ним ненадёжно, зато дорожки mov_text у обоих отображаются хорошо, поэтому файл для устройств Apple должен быть MP4, даже если субтитры в нём будут простым текстом. VLC, mpv, Plex и Kodi воспроизводят MKV с сохранённым оформлением и вложенными шрифтами. Браузеры — третий случай: их видеоплееры, как правило, игнорируют встроенные дорожки субтитров и ожидают отдельный файл WebVTT, поэтому сравнение форматов считает VTT форматом для веба.

Три способа добавить дорожки субтитров

  1. MKVToolNix — бесплатный, с графическим интерфейсом, для Windows, macOS и Linux. Лучший инструмент, когда файлы субтитров уже есть.
  2. FFmpeg — бесплатный, одна команда, и единственный из трёх, который умеет записывать MP4. Лучший инструмент для скриптов и пакетной обработки.
  3. Sablate — на случай, когда субтитров ещё нет: транскрибировать, перевести по слоям и экспортировать один MKV с отдельной дорожкой на каждый язык.

Subtitle Edit тоже умеет муксить — через меню Video → Add/remove embedded subtitles — и для этого запускает FFmpeg под капотом.

Способ 1: добавить субтитры в MKV с помощью MKVToolNix

MKVToolNix — эталонный набор инструментов для файлов Matroska, а его графический интерфейс сводит всю работу к четырём шагам:

  1. Установите его с сайта mkvtoolnix.download. Версия 102.0 вышла 14 сентября 2026 года; сборке для macOS нужна macOS 13 Ventura или новее.
  2. Откройте MKVToolNix GUI, оставайтесь на вкладке Multiplexer и перетащите видео и каждый файл субтитров в область Source files. Каждый файл субтитров появится как отдельная дорожка.
  3. Выделите каждую дорожку субтитров и заполните поля Language и Track name. Поставьте флаг Default track у той единственной дорожки, которая должна включаться первой, и снимите его у остальных. Параметр Forced display оставьте выключенным — включайте его, только если в дорожке одни лишь реплики на иностранном языке.
  4. Укажите внизу имя выходного файла и нажмите кнопку Start multiplexing.

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

mkvmerge -o film.subtitled.mkv film.mp4 \
  --language 0:eng --track-name 0:English --default-track-flag 0:yes en.srt \
  --language 0:spa --track-name 0:Spanish --default-track-flag 0:no es.srt

Параметры действуют на файл, который идёт после них, а 0 — это ID дорожки внутри каждого SRT, где всегда лежит только одна дорожка. Если буквы с диакритикой превращаются в кракозябры, значит, SRT не в UTF-8: поставьте --sub-charset 0:windows-1252 (или настоящую кодировку файла) перед этим файлом либо сначала пересохраните его в UTF-8.

Чтобы позже изменить флаги без повторного мукса, mkvpropedit правит готовый файл на месте:

mkvpropedit film.subtitled.mkv --edit track:s1 --set flag-default=0 --edit track:s2 --set flag-default=1

track:s1 — первая дорожка субтитров. Поскольку команда меняет заголовок файла, а не записывает новый, она выполняется почти мгновенно даже на большом фильме.

Способ 2: добавить дорожки субтитров с помощью FFmpeg (MKV и MP4)

FFmpeg делает тот же мукс одной командой, и именно им нужно пользоваться, когда на выходе должен получиться MP4. Вот команда для MKV с английской и испанской дорожками:

ffmpeg -i film.mp4 -i en.srt -i es.srt \
  -map 0:v -map 0:a -map 1 -map 2 -c copy \
  -metadata:s:s:0 language=eng -metadata:s:s:0 title=English \
  -metadata:s:s:1 language=spa -metadata:s:s:1 title=Spanish \
  -disposition:s:0 default -disposition:s:1 0 \
  film.subtitled.mkv

Читайте слева направо: три входа; -map берёт видео и звук из фильма, а затем по порядку каждый файл субтитров; -c copy копирует каждый поток, а не кодирует его; -metadata:s:s:0 помечает первый поток субтитров на выходе; а две опции -disposition ставят английскому флаг по умолчанию и снимают флаг у испанского.

Явный список -map важен. Голый -map 0 затянул бы и все дорожки субтитров, которые уже есть в источнике, а дорожку mov_text из MP4 нельзя скопировать в MKV, поэтому команда останавливается с ошибкой, ещё ничего не записав.

Для MP4 преобразуйте субтитры в mov_text, а всё остальное скопируйте:

ffmpeg -i film.mp4 -i en.srt -i es.srt \
  -map 0:v -map 0:a -map 1 -map 2 \
  -c:v copy -c:a copy -c:s mov_text \
  -metadata:s:s:0 language=eng -metadata:s:s:1 language=spa \
  film.subtitled.mp4

Видео и звук по-прежнему нетронуты; в формат MP4 переписывается только текст субтитров. Если на входе оформленный файл .ass, именно на этом шаге оформление пропадает.

Оформленным субтитрам ASS место в MKV, с вложенным шрифтом — чтобы плеер рисовал их выбранным вами шрифтом, а не запасным, который подставит сам:

ffmpeg -i film.mp4 -i en.ass \
  -map 0:v -map 0:a -map 1 -c copy \
  -attach Montserrat-ExtraBold.ttf -metadata:s:t:0 mimetype=application/x-truetype-font \
  -metadata:s:s:0 language=eng \
  film.subtitled.mkv

В документации FFmpeg прямо сказано, что вложениям Matroska нужен этот тег mimetype. mpv и VLC загружают вложенные шрифты, когда отрисовывают ASS, поэтому оформление путешествует вместе с файлом. Какой именно шрифт вкладывать — отдельный вопрос: в руководстве по шрифтам для субтитров разобрано, что хорошо читается и какие письменности не умеют рисовать популярные шрифты для субтитров.

Способ 3: создать субтитры и MKV за один проход

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

  1. Транскрибируйте видео на своём компьютере с помощью Whisper.
  2. Исправьте транскрипт в редакторе.
  3. Добавьте каждый язык слоем перевода на тот же тайминг.
  4. Выберите вариант экспорта Video with switchable subtitles (.mkv).

В файле оказывается то, что в способе 2 собирается вручную. Видео и звук копируются потоково, поэтому экспорт занимает примерно столько же времени, сколько копирование файла. Каждый языковой слой становится отдельной дорожкой ASS в вашем стиле оформления, а шрифт заменяется на тот, который умеет рисовать письменность этого языка. Каждая дорожка получает языковую метку и понятное название, первая дорожка помечается флагом по умолчанию, а если в стиле используется один из встроенных шрифтов Sablate для субтитров, файл этого шрифта вкладывается в MKV, чтобы оформление сохранилось и на другом компьютере.

Три ограничения — прямо и без прикрас. Экспорт в MKV входит в Pro — это разовый платёж $29, он указан на странице с тарифами. Sablate не записывает дорожки субтитров в MP4, потому что mov_text выбросил бы оформление, — экспортируйте файлы .srt и, если нужен MP4, запустите приведённую выше команду FFmpeg для MP4. И экспорт заменяет все дорожки субтитров, которые уже были в исходном файле, а не сохраняет их, поэтому, если они важны, добавьте их обратно через MKVToolNix.

Транскрипцию и перевод шаг за шагом разбирает рабочий процесс с несколькими языками.

Какой способ выбрать?

Выбирайте по тому, что у вас уже есть (файлы субтитров или только видео), и по тому, где файл должен воспроизводиться:

MKVToolNixFFmpegSablate
ЦенаБесплатноБесплатно$29 разово (Pro)
ПлатформыWindows, Mac, LinuxWindows, Mac, LinuxWindows и Mac
ИнтерфейсГрафический интерфейс и командная строкаКомандная строкаГрафический интерфейс
Муксует уже готовые файлы субтитровДаДаЧастично, через импорт в задачу
Создаёт субтитры из речиНетНетДа
Записывает MP4 с дорожками субтитровНетДаНет
Языковые метки и флаг по умолчаниюДаДаДа, ставятся автоматически
Флаг принудительного показаДаДаНет
Вкладывает шрифтыДаДаДа, встроенные шрифты для субтитров
Меняет флаги без повторного муксаДа, через mkvpropeditНетНет

«У меня уже есть файлы субтитров». MKVToolNix. Он бесплатный, показывает все дорожки и флаги, прежде чем что-либо записать, и работа занимает две минуты.

«Мне нужно обработать целый сезон серий». mkvmerge или FFmpeg в цикле. Обе приведённые выше команды работают без присмотра, как только имена файлов подчиняются шаблону.

«Файл должен воспроизводиться на iPhone или в QuickTime». MP4 через FFmpeg, и смиритесь с субтитрами простым текстом.

«Мои субтитры — оформленный ASS». MKV с вложенным шрифтом. MP4 срезает оформление при добавлении.

«У меня есть только видео». Sablate, если вам нужны транскрипция, перевод и многодорожечный MKV в одном месте. Subtitle Edit — бесплатный путь, если вас устраивает собирать эти шаги самостоятельно.

«Видео пойдёт на YouTube». Ни один из контейнеров. Такие платформы, как YouTube, принимают .srt или .vtt отдельной загрузкой.

Почему мои субтитры в MKV не показываются?

Дорожка почти всегда на месте — просто что-то решает её не показывать. Сначала выведите список того, что на самом деле лежит в файле:

ffprobe -v error -select_streams s -show_entries stream=index,codec_name:stream_tags=language,title:stream_disposition=default,forced -of compact=p=0 film.subtitled.mkv

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

  1. Ни одна дорожка не помечена флагом по умолчанию. Плееру нечего включать самому. Поставьте флаг через mkvpropedit, как в способе 1.
  2. Побеждает собственная настройка плеера. В VLC, Plex и на многих телевизорах хранится предпочитаемый язык субтитров или настройка «выключено», которые перекрывают флаги в файле. Сначала проверьте плеер, потом файл.
  3. Полная дорожка помечена как принудительная. Зрители, которые выключили субтитры, всё равно видят каждую реплику. Флаг принудительного показа нужен только частичным дорожкам.
  4. Дорожка в MP4 игнорируется. Многие плееры молча пропускают mov_text. Если файл не обязан быть MP4, замуксите его заново в MKV.
  5. Буквы с диакритикой превращаются в кракозябры. Исходный SRT сохранён в устаревшей кодировке. Пересохраните его в UTF-8 и замуксите заново либо укажите кодировку параметром --sub-charset в mkvmerge или -sub_charenc перед входным файлом субтитров в FFmpeg.
  6. Оформленный текст показан обычным шрифтом. В дорожке ASS указан шрифт, которого нет на устройстве воспроизведения. Вложите файл шрифта, как в последней команде FFmpeg.

Мукс — дешёвая часть доставки субтитров: минута в MKVToolNix, одна строка в FFmpeg, ничего не перекодируется. Дорогая часть — вообще получить хорошие файлы субтитров на каждом языке. Если они у вас уже есть, вам хватит бесплатных инструментов выше. Если есть только запись, скачайте Sablate для Windows или Mac, транскрибируйте и переведите её, а дорожки, метки и флаги пусть запишет экспорт.