Назад к блогу

Как перевести SRT-файл, не сломав тайминг

Перевод SRT-файла без потери тайминга: почему обычные переводчики ломают таймкоды, четыре метода без этой проблемы и проверка в одну команду, которая её ловит.

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

Чтобы перевести SRT-файл и сохранить тайминг, используйте инструмент, который разбирает формат субтитров, а не тот, что воспринимает файл как обычный текст. Инструмент, понимающий формат, читает номер блока, строку таймкода и текст как три отдельные вещи, переводит только третью и записывает остальные две обратно в точности такими, какими они были.

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

Почему перевод SRT-файла ломает тайминг?

В блоке SRT четыре части, и только одна из них — язык:

2
00:00:04,120 --> 00:00:06,480
The timings live on the line above.
A translator must never touch it.

Номер обозначает реплику. Строка таймкода — с миллисекундами через запятую и стрелкой --> — это тайминг. Текст — это субтитр. Пустая строка — разделитель, который сообщает парсеру, что блок закончился.

Обычный переводчик видит один документ, в котором есть все четыре части. У него нет причин воспринимать 00:00:04,120 --> 00:00:06,480 как синтаксис, поэтому обычно вместе случаются три поломки:

  1. Реплики склеиваются. Для переводчика обычного текста пустая строка между блоками — просто пробел, и если она не переживёт обработку, две реплики превратятся в один абзац. Всё, что идёт дальше, теперь не совпадает по времени со звуком.
  2. Блоки перенумеровываются или меняются местами. Перекомпоновка абзацев путает порядковые номера, и одни парсеры сразу отказываются открывать такой файл, а другие молча перенумеровывают его и сдвигают реплики.
  3. Таймкоды переформатируются. Добавленный пробел вокруг стрелки, запятая, превратившаяся в точку, по-другому дополненное поле миллисекунд — любого из этого достаточно, чтобы строка перестала распознаваться парсером.

Есть и четвёртый вид поломки, который вообще не связан с переводчиком. Кодировка. Файл с диакритическими знаками или нелатинским письмом, сохранённый в Latin-1 или Windows-1254 вместо UTF-8, превращается в кракозябры в половине плееров, которые его открывают. Сохраняйте каждый файл субтитров в UTF-8 — и эта проблема исчезает навсегда.

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

Четыре способа перевести SRT-файл

От самого быстрого до самого контролируемого:

  1. Subtitle Edit — бесплатный, с открытым кодом, со встроенным переводом, работает локально.
  2. Онлайн-переводчик, понимающий формат — загружаете файл, получаете переведённый обратно.
  3. LLM со строгим промптом — лучший контроль терминологии, требует проверки.
  4. Десктопное приложение, где перевод — это слой — несколько языков из одного таймлайна.

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

Метод 1: Subtitle Edit

Бесплатный вариант, и с него стоит начать большинству.

Subtitle Edit распространяется с открытым кодом, работает на Windows, macOS и Linux, и в нём есть функция автоперевода, которая подставляет текст в памяти и по своей конструкции не трогает структуру блоков. Она предлагает несколько движков — DeepL и Google, если у вас есть ключи, LibreTranslate, если вы держите его на своём сервере, и локальные модели через Ollama, llama.cpp или любой OpenAI-совместимый эндпоинт.

  1. Откройте .srt в Subtitle Edit.
  2. Выберите автоперевод и укажите движок и целевой язык.
  3. Проверьте результат в табличном виде, где оригинал и перевод стоят рядом.
  4. Сохраните как новый файл в UTF-8.

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

Метод 2: онлайн-переводчик, понимающий формат

Загрузите файл, выберите язык, скачайте результат. DeepL принимает .srt как тип документа и возвращает переведённый .srt с нетронутой структурой; сколько документов вы можете обработать, зависит от вашего тарифа. То же самое делают несколько специализированных сайтов для перевода субтитров.

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

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

Метод 3: LLM со строгим промптом

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

Промпт, который работает:

Translate the subtitle text below from English into German.

Rules:
- Output exactly the same number of subtitle blocks as the input.
- Copy every block number and every timecode line unchanged, character for character.
- Translate only the subtitle text lines.
- Keep the blank line between blocks.
- Do not merge, split, reorder or renumber blocks.
- Do not translate these terms: [list product and character names here]
- Keep each translated line roughly the length of the original.

Работайте порциями по 50–100 блоков, а не вставляйте двухчасовой фильм целиком за один раз. Именно на длинных фрагментах модели начинают склеивать реплики и терять блоки — и делают это, ничего не сообщая.

Затем проверьте результат. Эта команда в одну строку считает строки с таймкодами в обоих файлах:

grep -c " --> " original.srt translated.srt

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

Метод 4: перевод как слой, а не как файл

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

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

Доступны два пути перевода. Argos работает офлайн прямо на вашем компьютере и никуда ничего не отправляет; DeepL, OpenAI и Claude доступны, если вы подключите свой собственный API-ключ. Один честный нюанс офлайн-пути: у Argos есть готовые пакеты в основном для пар, где английский — на одном из концов, поэтому для пары вроде турецкий–немецкий прямого пакета нет, и перевод строится через английский как промежуточный шаг. Это работает, и строка турецкий–немецкий звучит чуть суше, чем турецкий–английский.

Бесплатный тариф покрывает один офлайн-слой перевода на задачу для видео до десяти минут; неограниченное число слоёв, облачные движки и экспорт всех языков в один клик входят в Pro. Скачайте Sablate для Windows или Mac и переведите один файл, прежде чем решать что-либо ещё.

Как перевести субтитры офлайн

Два из четырёх способов работают целиком на вашем компьютере, а это важно, когда сценарий конфиденциален или нет надёжного подключения: Subtitle Edit с локальной моделью и слои Argos в Sablate. Оба переводят только текст и сохраняют каждый таймкод, так что проблема с таймингом, описанная выше, ни к одному из них не относится.

Subtitle Edit с локальной модельюSablate с Argos
Что нужно установитьOllama или llama.cpp и модель, затем указать на неё Subtitle EditНичего дополнительного; каждый языковой пакет один раз скачивается в самом приложении
ЯзыкиТе, с которыми справляется выбранная вами модельОколо 50 целевых языков с любого исходного, большинство пар — через английский
Качество переводаЗависит от размера модели; на европейских парах уступает DeepLБуквальный и читаемый, уступает DeepL и современным LLM
Контроль терминологииВ промпте можно перечислить термины, которые не переводитьВ самом переводчике нет; имена исправляйте потом поиском и заменой
ЦенаБесплатноОдин офлайн-слой на задачу в бесплатном тарифе, без ограничений в Pro

Трезво оцените ожидания, прежде чем на них полагаться. Офлайн-переводчики — гораздо меньшие модели, чем DeepL или современная облачная LLM, и это заметно: формулировки получаются буквальными, идиомы переводятся слово в слово, а имена иногда переводятся там, где не должны. У Argos есть и собственное ограничение: почти все его пакеты связывают язык с английским, поэтому пара вроде турецкий–немецкий выполняется как два перевода подряд, через английский, и набирает ошибки обоих.

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

Какой метод стоит выбрать?

МетодЦенаРаботает офлайнКонтроль терминологииЛучше всего для
Subtitle EditБесплатноДа, с локальной модельюЧастичноОдного файла, любой языковой пары
Онлайн-переводчик документовБесплатный тариф, затем платноНетНетБыстрого хорошего результата на европейских парах
LLM со строгим промптомЗависит от моделиДа, с локальной модельюДаЖаргона, имён, собственного глоссария
SablateБесплатный тариф, Pro — $29 разовоДаДаНескольких языков из одного транскрипта

«У меня один файл и нет бюджета». Subtitle Edit. Он бесплатный, это самый мощный инструмент для работы с форматом субтитров в этом списке, и он не сломает ваш тайминг.

«Мне нужен лучший перевод на немецкий, и файл не конфиденциальный». Переводчик документов. Результат DeepL при переводе с английского на немецкий требует меньше всего правок из всего перечисленного здесь.

«Видео конфиденциальное». Subtitle Edit с локальной моделью или офлайн-путь Sablate. Всё, что загружает файл на сервер, исключается — неважно, насколько оно хорошо.

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

Как не допустить, чтобы тайминг снова сломался

Три привычки, в порядке того, сколько времени они экономят.

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

Проверяйте скорость чтения после перевода, а не после транскрипции. Тайминг уцелел, а вот текст не остался той же длины. Перевод с английского на испанский или французский обычно получается длиннее на 20–25%, а на немецкий — вплоть до 35%, и всё это в те же самые секунды. Комфортная строка на 14 CPS превращается в строку на 17,5 CPS без единого сдвинутого таймкода — лимиты скорости чтения разбирают, что с этим делать, и ответ всегда один: менять слова или длительность, но никогда не синхронизацию.

Держите исходный транскрипт как мастер-версию. Исправляйте в нём имена, терминологию и пунктуацию прежде, чем что-либо переводить. Фамилия, исправленная в исходнике, исправлена сразу на всех языках; та же фамилия, исправленная потом, — это отдельная правка на каждый язык, и со временем правки расходятся.

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

Переводите файл, а не видео. Сохраняйте таймлайн, за который вы уже заплатили, тратьте силы на слова, которые на нём держатся, и проверяйте количество блоков перед публикацией.

Часто задаваемые вопросы

Как перевести SRT-файл, не сломав тайминг?

Используйте инструмент, который разбирает формат SRT, а не тот, что воспринимает файл как обычный текст. Такой инструмент читает номер блока, строку таймкода и текст по отдельности, переводит только текст и записывает остальное без изменений. Subtitle Edit делает это бесплатно, а DeepL принимает SRT как документ.

Можно ли переводить субтитры офлайн?

Да. Subtitle Edit умеет переводить локальной моделью через Ollama или llama.cpp, а Sablate переводит в языковые слои с помощью Argos, который один раз скачивает пакет для каждого языка, после чего работает без подключения. Оба сохраняют тайминг. Ждите буквальных формулировок: офлайн-модели меньше, чем DeepL или облачные LLM, поэтому всё, что собираетесь публиковать, проверяйте.

Почему Google Translate портит SRT-файлы?

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

Можно ли перевести SRT-файл бесплатно?

Да. Subtitle Edit бесплатен, распространяется с открытым кодом, работает на Windows, macOS и Linux, и в нём есть встроенный перевод с несколькими движками, включая локальные модели, которым не нужен интернет. Бесплатные онлайн-переводчики субтитров тоже существуют, но они загружают ваш файл на сервер, а это важно, если содержимое конфиденциально.

Переведённые субтитры по-прежнему укладываются в исходный тайминг?

В тайминг они укладываются, а вот в скорость чтения — часто нет. Перевод с английского на испанский или французский обычно добавляет 20–25% символов, а на немецкий — до 35%, и всё это в те же самые секунды. Границы реплик остаются верными, а вот строку становится слишком быстро читать.

Как проверить, что переведённый SRT-файл всё ещё корректен?

Посчитайте строки с таймкодами в обоих файлах и сравните числа. Если в оригинале их 412, а в переводе 389, значит, блоки склеились или пропали. Затем откройте переведённый файл в плеере рядом с видео и проверьте первую реплику, последнюю реплику и один быстрый обмен репликами в середине.

Что лучше: перевести файл субтитров или заново распознать речь на целевом языке?

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