Как перевести SRT-файл, не сломав тайминг
Перевод SRT-файла без потери тайминга: почему обычные переводчики ломают таймкоды, четыре метода без этой проблемы и проверка в одну команду, которая её ловит.
Чтобы перевести 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 как синтаксис, поэтому обычно вместе случаются три поломки:
- Реплики склеиваются. Для переводчика обычного текста пустая строка между блоками — просто пробел, и если она не переживёт обработку, две реплики превратятся в один абзац. Всё, что идёт дальше, теперь не совпадает по времени со звуком.
- Блоки перенумеровываются или меняются местами. Перекомпоновка абзацев путает порядковые номера, и одни парсеры сразу отказываются открывать такой файл, а другие молча перенумеровывают его и сдвигают реплики.
- Таймкоды переформатируются. Добавленный пробел вокруг стрелки, запятая, превратившаяся в точку, по-другому дополненное поле миллисекунд — любого из этого достаточно, чтобы строка перестала распознаваться парсером.
Есть и четвёртый вид поломки, который вообще не связан с переводчиком. Кодировка. Файл с диакритическими знаками или нелатинским письмом, сохранённый в Latin-1 или Windows-1254 вместо UTF-8, превращается в кракозябры в половине плееров, которые его открывают. Сохраняйте каждый файл субтитров в UTF-8 — и эта проблема исчезает навсегда.
Верный признак — повреждённый файл при беглом просмотре часто всё ещё выглядит нормально. Текст на нужном языке, таймкоды на месте, и ничто не бросается в глаза. Он ломается, когда плеер пытается его разобрать — или, что хуже, разбирает и проигрывает со сдвигом в две секунды.
Четыре способа перевести SRT-файл
От самого быстрого до самого контролируемого:
- Subtitle Edit — бесплатный, с открытым кодом, со встроенным переводом, работает локально.
- Онлайн-переводчик, понимающий формат — загружаете файл, получаете переведённый обратно.
- LLM со строгим промптом — лучший контроль терминологии, требует проверки.
- Десктопное приложение, где перевод — это слой — несколько языков из одного таймлайна.
Все четыре способа сохраняют таймкоды нетронутыми при правильном использовании. Разница между ними — в цене, приватности и в том, на сколько языков вы переводите.
Метод 1: Subtitle Edit
Бесплатный вариант, и с него стоит начать большинству.
Subtitle Edit распространяется с открытым кодом, работает на Windows, macOS и Linux, и в нём есть функция автоперевода, которая подставляет текст в памяти и по своей конструкции не трогает структуру блоков. Она предлагает несколько движков — DeepL и Google, если у вас есть ключи, LibreTranslate, если вы держите его на своём сервере, и локальные модели через Ollama, llama.cpp или любой OpenAI-совместимый эндпоинт.
- Откройте
.srtв Subtitle Edit. - Выберите автоперевод и укажите движок и целевой язык.
- Проверьте результат в табличном виде, где оригинал и перевод стоят рядом.
- Сохраните как новый файл в 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 | Бесплатно | Да, с локальной моделью | Частично | Одного файла, любой языковой пары |
| Онлайн-переводчик документов | Бесплатный тариф, затем платно | Нет | Нет | Быстрого хорошего результата на европейских парах |
| LLM со строгим промптом | Зависит от модели | Да, с локальной моделью | Да | Жаргона, имён, собственного глоссария |
| Sablate | Бесплатный тариф, Pro — $29 разово | Да | Да | Нескольких языков из одного транскрипта |
«У меня один файл и нет бюджета». Subtitle Edit. Он бесплатный, это самый мощный инструмент для работы с форматом субтитров в этом списке, и он не сломает ваш тайминг.
«Мне нужен лучший перевод на немецкий, и файл не конфиденциальный». Переводчик документов. Результат DeepL при переводе с английского на немецкий требует меньше всего правок из всего перечисленного здесь.
«Видео конфиденциальное». Subtitle Edit с локальной моделью или офлайн-путь Sablate. Всё, что загружает файл на сервер, исключается — неважно, насколько оно хорошо.
«Я выпускаю одно и то же видео на шести языках». Слои, а не файлы. Пофайловые методы умножаются на шесть, а работа со слоями — нет, и работа с несколькими языками объясняет, почему транскрипт заслуживает внимательной вычитки прежде, чем что-либо из этого начнётся.
Как не допустить, чтобы тайминг снова сломался
Три привычки, в порядке того, сколько времени они экономят.
Проверяйте количество блоков при каждом переводе. Команда grep выше занимает две секунды и ловит единственную поломку, которая незаметна при обычном просмотре. Переведённый файл, в котором блоков меньше, чем в исходнике, сломан — всегда.
Проверяйте скорость чтения после перевода, а не после транскрипции. Тайминг уцелел, а вот текст не остался той же длины. Перевод с английского на испанский или французский обычно получается длиннее на 20–25%, а на немецкий — вплоть до 35%, и всё это в те же самые секунды. Комфортная строка на 14 CPS превращается в строку на 17,5 CPS без единого сдвинутого таймкода — лимиты скорости чтения разбирают, что с этим делать, и ответ всегда один: менять слова или длительность, но никогда не синхронизацию.
Держите исходный транскрипт как мастер-версию. Исправляйте в нём имена, терминологию и пунктуацию прежде, чем что-либо переводить. Фамилия, исправленная в исходнике, исправлена сразу на всех языках; та же фамилия, исправленная потом, — это отдельная правка на каждый язык, и со временем правки расходятся.
Если что-то из этого в итоге окажется вшито в видео, делайте это в последнюю очередь. Скорость чтения во вшитой копии — уже навсегда, а формат, в который вы экспортируете, решает, сможет ли зритель вообще переключить язык.
Переводите файл, а не видео. Сохраняйте таймлайн, за который вы уже заплатили, тратьте силы на слова, которые на нём держатся, и проверяйте количество блоков перед публикацией.