Как сделать двуязычные субтитры: два языка в одном файле SRT или VTT
Создайте двуязычный файл SRT или VTT, который удобно читать: объедините по времени, разместите два языка в одной реплике, выберите, какой будет сверху, и запустите бесплатную проверку.

Чтобы сделать двуязычные субтитры, нужен один файл субтитров с таймингом, его перевод с тем же таймингом и одна реплика для каждого момента, содержащая оба языка: сначала строки оригинала, затем строки перевода, под одной меткой времени. Любой переводчик, создающий двуязычный файл, делает это за вас, а инструмент объединения справится, если у вас уже есть два файла. Обычному SRT для этого не нужен специальный синтаксис.
Создать файл — простая часть. Сложнее то, что тайминг был рассчитан на один язык. Реплика, вмещавшая две строки английского, теперь должна вместить четыре строки за те же несколько секунд на том же изображении. Поэтому основное внимание в этом руководстве уделено тому, что нужно исправить после объединения.
Мы написали тестовый файл из 12 реплик, создали испанскую, китайскую и арабскую версии, а также написали бесплатную программу проверки. Файлы получены с помощью собственного кода BookTranslator для создания субтитров, запущенного локально. Переводы мы выполнили вручную, а не через модель, поэтому эти тесты показывают, что происходит с файлом, а не насколько хорош перевод. Подробности — в README. Для проверки нужен только Python 3.
Краткий ответ: как выглядит двуязычная реплика
2
00:00:03,400 --> 00:00:06,600
There's another one at six,
but the station closes at midnight.
Hay otro a las seis,
pero la estación cierra a medianoche.
Это корректный SRT. Каждая реплика сохраняет свой номер и метку времени, и все строки текста под меткой времени отображаются на экране одновременно. WebVTT работает так же.
Сначала выберите схему
| Вы хотите | Используйте | Почему |
|---|---|---|
| Смотреть почти в любом плеере или отправить один файл кому-то | Один объединённый SRT | Это обычный файл субтитров, не требующий особых функций плеера |
| Смотреть на своём компьютере с управлением каждым языком | Два отдельных файла в плеере с поддержкой двух дорожек | Каждый язык сохраняет свой тайминг, его можно сдвигать или отключать |
| Показывать языки разного размера на веб-странице | Один VTT с классом для каждого языка | В WebVTT есть стилизация; в SRT нет стандартного способа это сделать |
| Опубликовать видео, которое выглядит одинаково везде | Встроенные субтитры | Текст становится частью изображения, и зрители не могут его отключить |
Для двух дорожек в mpv есть опция --secondary-sid. В его руководстве сказано, что вторая дорожка по умолчанию отображается в верхней части экрана, что разделяет языки. Мы сами mpv не тестировали.
Для вжигания субтитров фильтру subtitles в FFmpeg нужна сборка с libass. В FFmpeg 9.0.1, который мы установили для этого теста, её не было, поэтому перед тем как рассчитывать на вжигание, выполните ffmpeg -filters | grep subtitles. Мы не тестировали вжигание.
Шаг 1: Объедините два языка в одном файле
Если у вас один файл, переведите его с помощью инструмента, который создаёт двуязычный файл. BookTranslator делает это для каждой задачи с SRT и VTT: вы получаете переведённый файл и двуязычный файл с теми же таймкодами, а начать можно на странице переводчика субтитров. Если сначала нужно выбрать инструмент, посмотрите наше сравнение программ для субтитров.
Если у вас два файла, сопоставляйте их по времени, а не по номеру реплики. Именно здесь объединение идёт не так, потому что две дорожки одного видео редко разбивают строки одинаково. Наша вторая испанская дорожка разбивает две длинные реплики пополам и опускает звуковой эффект, год и музыку.
python3 check_bilingual_subs.py merge sample-source.srt sample-es-own-timing.srt -o merged.srt
Сопоставление по номеру реплики (опция --index в скрипте) ошиблось в 10 из 12 реплик, начиная с реплики 2, где пропала половина испанского. К реплике 3 перевод относился уже к другой строке:
3
00:00:06,800 --> 00:00:08,000
So where do we wait?
pero la estación cierra a medianoche.
Сопоставление по времени дало правильный перевод под 9 репликами, оставило 3 реплики без испанского нетронутыми и сообщило об одной испанской строке, которая ни с чем не совпала, чтобы вы могли разместить её вручную. Скрипт относит реплику второй дорожки к той реплике первой дорожки, с которой у неё наибольшее перекрытие, при условии, что оно покрывает хотя бы половину её длины. Инструменты вроде submerger тоже объединяют файлы; мы их не тестировали. Что бы вы ни использовали, выборочно проверьте реплики после первого разбиения.
Шаг 2: Проверьте файл
python3 check_bilingual_subs.py check sample-source.srt sample-es-bilingual.srt --max-target-cps 17
Он сравнивает двуязычный файл с исходным и предполагает, что оригинальные строки идут первыми, поэтому запускайте его до того, как поменяете порядок. Он предупреждает, если верхние строки не совпадают с исходником. Вот что он нашёл в испанском файле:
| Реплика | Секунды | Строки | Символов/сек в оригинале | Символов/сек в испанском | Проблема |
|---|---|---|---|---|---|
| 2 | 3.2 | 4 | 19.4 | 17.8 | Четыре строки, испанский слишком быстрый |
| 5 | 2.7 | 2 | 6.7 | 7.0 | ' в тексте |
| 7 | 1.0 | 2 | 4.0 | 4.0 | Один и тот же текст дважды |
| 8 | 1.8 | 2 | 1.7 | 1.7 | Один и тот же текст дважды |
| 9 | 1.2 | 4 | 20.8 | 22.5 | Четыре строки, оба языка слишком быстрые |
| 10 | 3.6 | 2 | 18.3 | 19.4 | Обе строки длиннее 42 символов, испанский слишком быстрый |
Реплики 6 и 12 тоже вернулись с четырьмя строками. Остальные четыре реплики были в порядке.
Ограничения на скорость и длину строк взяты у Netflix, потому что его цифры публичны и конкретны, и они различаются по языкам. Его руководство для английского допускает 42 символа в строке, две строки и до 20 символов в секунду для взрослых программ. Его руководство для латиноамериканского испанского допускает 17 символов в секунду для переведённых субтитров, а его руководство для упрощённого китайского — 16 символов в строке и 9 в секунду. Поэтому для китайского используйте --max-target-line 16 --max-target-cps 9. Эти руководства рассчитаны на один язык за раз, максимум на две строки. Нам неизвестен эквивалентный стандарт для двух языков в одной реплике, поэтому значение по умолчанию в проверяющем скрипте — три строки на экране — и всё в следующем разделе является нашим суждением.
Проверяющий скрипт также выводит суммарное число, которое достигло 43,3 символа в секунду на реплике 9. Не пытайтесь исправить это число. Никто не читает каждый символ обоих языков с полным вниманием. Считайте его указателем на реплики, за которыми стоит следить.
Шаг 3: Исправьте реплики с четырьмя строками
Вот сколько стоят четыре строки. Во встроенном отображении субтитров Chromium при разрешении 1280x720 двухстрочная английская реплика занимала 10,6% высоты кадра, а та же реплика с добавленным испанским — 21,9%.


Просмотрите отмеченные реплики в таком порядке:
- Сохраните язык аудио дословно. Если люди слушают оригинал и следят по тексту, сокращённый оригинал больше не совпадает с тем, что они слышат.
- Сократите другой язык до одной строки. Наша реплика 2 переходит с 17,8 символа в секунду на 13,1, когда испанский становится
A las seis hay otro; cierran a medianoche.Это три строки на экране вместо четырёх, и оба факта сохранены. - Добавляйте время, только если есть промежуток. Проверьте начало следующей реплики, прежде чем сдвигать время окончания. У реплики 2 есть 0,2 секунды в запасе, и это не стоит усилий.
- Затем оставьте остальное как есть. Реплика 9 — это
You knew?/Since March.за 1,2 секунды. Она нарушает ограничения по скорости и длине строк, но мы бы её оставили: промежуток в 0,2 секунды после неё слишком мал, чтобы помочь, и зритель, скорее всего, успевает охватить взглядом два коротких ответа. Не каждое предупреждение — ошибка.
Для длинных однострочных реплик, как реплика 10, разбивайте каждый язык на две строки, только если у реплики есть на это время. Иначе сокращайте перевод.
Если вы контролируете отображение, можно также сделать один язык легче для распознавания. Запустите to-vtt, чтобы дать каждому языку свой класс. Полученный файл отрендерен в Chromium с английским размером 80% и светло-серым цветом. Это почти не экономит место (21,1% высоты кадра вместо 21,9%), так что это не замена сокращению строки. Мы не проверяли, помогает ли это людям читать.

Здесь используются классы реплик WebVTT и селектор ::cue(). Это предназначено для браузеров. Другие плееры могут игнорировать стили или файл VTT.
Шаг 4: Решите, какой язык разместить сверху
На этот счёт есть некоторые исследования. В исследовании зрительных движений 2026 года с участием 42 носителей испанского языка, для которых английский является вторым, зрители проводили больше времени на верхней строке, на каком бы языке она ни была, и больше времени на той строке, которая совпадала с аудио. Оценки понимания были выше, когда сверху был испанский, их первый язык. Более раннее исследование с участием 112 китайцев, изучающих английский, показало, что двуязычные субтитры помогали пониманию так же, как субтитры только на их первом языке, и оба варианта превосходили английские субтитры или их отсутствие.
Это единичные исследования конкретных групп зрителей, поэтому воспринимайте их как отправную точку:
- Чтобы следить за содержанием фильма или лекции: ставьте сверху язык, на котором вы читаете лучше всего.
- Чтобы практиковать изучаемый язык: ставьте этот язык сверху и примите, что можете понимать несколько меньше. Исследование 2026 года измеряло понимание, а не обучение, так что это наше суждение.
- Чтобы проверить перевод: порядок мало что значит, поэтому оставьте как есть.
Двуязычный файл BookTranslator всегда помещает оригинал сверху. Чтобы поменять местами:
python3 check_bilingual_subs.py flip sample-source.srt sample-es-bilingual.srt -o translation-on-top.srt
Что возвращается с ошибками и как это исправить
Это результаты запуска кода субтитров BookTranslator на наших тестовых файлах, и первые два пункта отмечает проверяющая программа.
- Текст, не требующий перевода, появляется дважды.
1984и♪ ♪пропускаются как не содержащие слов для перевода, поэтому двуязычный файл печатает каждое из них дважды. Удалите одну строку вручную. - В тексте может появляться
'. По состоянию на ноябрь 2026 года реплика с тегами форматирования и апострофом может вернуться с экранированным апострофом. Наша исходная строка стала<i>Don't answer that.</i>в двуязычном файле, а в отдельном тесте VTT французский перевод стал<i>Je n'attendrai pas.</i>и в переведённом файле. Chromium декодировал его в VTT и показал обычный апостроф. Но когда мы конвертировали SRT с помощью FFmpeg,'остался в выходном тексте, так что исходите из того, что некоторые плееры покажут его буквально. Замените'на'перед использованием файла. Мы сообщили об этом нашим инженерам. - Настройки реплик VTT удаляются. Настройки позиции, такие как
line:0 align:start position:10%, и блокиNOTEисчезли из нашего тестового вывода VTT, а метки говорящих появились на обеих строках. Если ваш VTT зависит от размещения, добавьте его обратно после перевода. - Текст справа налево размечается построчно. Арабские строки возвращались обёрнутыми в символы направления Unicode. Мы проверили только одну реплику в VTT-копии файла в Chromium, и она отображалась справа налево. Строки, где арабский смешан с цифрами, как в нашей реплике 10, — более сложный случай, и мы их не просматривали, поэтому проверяйте в вашем реальном плеере. В SRT нет другого способа задать направление. Наше руководство по письменности справа налево охватывает более широкие вопросы для книг.
Если ваш исходный файл — ASS или SSA, двуязычный вывод BookTranslator добавляет переведённую строку как второе событие с тем же стилем и таймингом, что представляет собой другую структуру. Наше руководство по субтитрам ASS объясняет, как устроены такие файлы. Если символы с диакритикой выглядят сломанными на любом из языков, проблема обычно в кодировке файла, о чём рассказывает наше руководство по кодировке субтитров.
Прежде чем поделиться файлом
- Запустите проверку и просмотрите каждую отмеченную реплику.
- Найдите
',&и"и замените их. - Удалите дублирующиеся строки на звуковых эффектах, числах и музыке.
- Просмотрите самые насыщенные несколько минут в том плеере, которым будут пользоваться ваши зрители, и на том размере экрана, который они будут использовать.
- Убедитесь, что нижние строки не перекрывают текст на экране видео.
- Прочитайте перевод в контексте. Наш рабочий процесс с ИИ-субтитрами рассказывает, как его проверять.
У вас готов SRT или VTT? Загрузите его в переводчик субтитров и узнайте цену до оплаты. Когда перевод завершится, скачайте двуязычный файл вместе с переведённым. Затем запустите на нём проверку, поскольку количество строк в реальной задаче зависит от того, как модель разбивает каждую переведённую реплику.
Похожие статьи





