Как перевести SRT-субтитры и не сломать тайм-коды: разбор ошибок и проверка
Как перевести SRT файл с сохранением таймкодов: четыре способа, проверка индексов и реплик, Python-скрипт и границы ИИ-перевода.
Чтобы перевести SRT файл с сохранением таймкодов, меняйте текст внутри реплик, а номера, порядок блоков и время начала и конца сверяйте с оригиналом. Само обещание «сохрани формат» ещё не подтверждает результат. Нужны исходный файл, проверка структуры и короткий просмотр с видео.
Предположим, у вас есть субтитры интервью или учебного ролика. Перевод звучит связно, файл открывается, но одна фраза исчезла, а соседняя оказалась на чужом месте. Плеер может принять такой файл: синтаксическая корректность и правильное соответствие реплик — разные проверки. Ниже разберём обе, а также границу, за которой нужен редактор.
Что ломается при переводе SRT-субтитров
В описании формата SRT Библиотеки Конгресса блок состоит из номера, временного интервала, текста и разделяющей пустой строки. Из этого устройства следует практическое правило: переводить нужно содержимое реплики, сохраняя её связь с исходным интервалом.
Слитые и разрезанные реплики, съехавшие индексы
Одно предложение может занимать несколько блоков. Если собрать его в красивый абзац и вернуть одним блоком, вторая половина появится раньше нужного. Обратная операция, разбиение одного блока на два, требует осмысленно назначить новый интервал. При задаче «оставить тайм-коды» такие изменения нужно запретить или вынести в отдельный этап редактирования.
Нумерация помогает сопоставить оригинал и перевод. Пропуск номера, повтор и перенумерация после удаления реплики — разные ситуации. Последовательность от 1 до N проверяет порядок, но не доказывает полноту: удалённый блок можно скрыть последующей перенумерацией. Поэтому отдельно сравнивайте количество реплик и каждый временной интервал.
Пропущенные строки и границы ответа
Проверяйте не только начало файла. Результат может содержать правильные первые блоки и закончиться раньше оригинала. В середине могут исчезнуть междометие, короткий ответ или строка второго говорящего. Если число блоков совпало, это ещё не исключает пустой текст, повтор одной реплики вместо другой или перенос слов в соседний блок.
Полезно заранее сохранить исходник под отдельным именем и не перезаписывать его при экспорте. Назовите копии, например, interview_source.srt и interview_ru_review.srt. Тогда «до/после» означает сравнение двух определённых версий, а не попытку восстановить исходное состояние из истории чата.
Кодировки CP1251 и UTF-16
Если кириллица превратилась в нечитаемые символы, сначала разберитесь с кодировкой. Перевод уже испорченного текста не восстанавливает исходные буквы. У старого файла может быть CP1251, у другого — UTF-16. Не выбирайте кодировку только по расширению .srt: откройте файл с предпросмотром и проверьте известную фразу.
В справке Subtitle Edit описан импорт с ручным выбором кодировки и рекомендован UTF-8 для новых субтитров. Сначала добейтесь правильного отображения оригинала, затем сохраните рабочую копию в UTF-8. Не соглашайтесь молча заменить нечитаемые символы: такая замена может уничтожить имя или термин ещё до перевода.
Переносы строк и имена
Перенос внутри реплики и пустая строка между блоками выполняют разные задачи. Первая операция меняет чтение на экране, вторая отделяет следующую реплику. Перенос исходного текста не обязан оставаться на том же слове в переводе, но слова должны принадлежать прежнему блоку. На проверке учитывайте и длину текста, и доступное время.
Имена и термины лучше согласовать заранее. Запишите исходное написание и предпочтительный вариант: фамилию, название продукта, сокращение, слово интерфейса. Для неоднозначного термина добавьте контекст и запрет на нежелательный перевод. После обработки найдите его по всему файлу: наличие глоссария само по себе не подтверждает, что каждое употребление правильно.
Четыре способа перевести SRT файл с сохранением таймкодов
Выбирайте способ по объёму ручного контроля и требованиям к материалу. Ниже сравниваются рабочие подходы, а не качество конкретных поставщиков. В любом варианте оставляйте время на проверку полученного файла.
| Способ | Что удобно | Что проверить |
|---|---|---|
| Вручную в редакторе | Контекст сцены и точные правки | Полноту, время и случайные изменения |
| Машинный перевод файла | Обработка готовых блоков | Поддержку SRT, язык и условия загрузки |
| Общий чат с нейросетью | Обсуждение смысла и вариантов | Пропуски, объединения, конец ответа |
| Специализированный сервис | Заданный процесс и отчёт проверки | Ограничения, цену, содержание отчёта |
1. Вручную в Subtitle Edit или Aegisub
Откройте оригинал и видео, переводите текст реплик и просматривайте спорные места в контексте. Документация Aegisub описывает редактирование строк, текста и времени. Для этой задачи заранее решите, какие поля разрешено менять: перевод не должен незаметно превратиться в пересинхронизацию.
Плюс ручной работы — возможность сразу заметить, кто говорит и к чему относится местоимение. Минус — затраты внимания на каждую реплику; при долгой работе легко пропустить строку. Даже после ручного перевода полезен структурный дифф. Если редактор меняет формат при сохранении, сначала испытайте экспорт на копии.
2. Машинный перевод файла
Ищите режим перевода документов, в котором явно поддержан SRT. Например, официальная страница DeepL описывает загрузку и скачивание SRT. Поддержку конкретной языковой пары, условия доступа и обработку данных уточняйте у выбранного инструмента перед загрузкой.
Плюс подхода — работа с готовым файлом без ручного переноса всех реплик. Минус — итоговый текст всё равно нужно проверить на контекст и читаемость. Начните с небольшой копии и убедитесь, что сохраняются интервалы. Условия одного сервиса нельзя автоматически переносить на другой только потому, что оба принимают документы.
3. Общий чат с нейросетью: типичные сбои
В чате удобно уточнять смысл фразы и обсуждать перевод термина. При получении целого файла проверяйте возможные объединения блоков, пропуски, изменённые цифры, пояснения вокруг SRT и обрыв ответа. Это сценарии для контроля, а не измеренная частота ошибок конкретной модели или заявление, что любой чат обязательно испортит файл.
Задайте короткую инструкцию: переводить только текст, не менять номера и интервалы, не объединять блоки, вернуть весь диапазон. При работе частями запишите границы каждого фрагмента и проверьте стыки после сборки. Плюс — гибкость обсуждения; минус — ответственность за полноту и сборку остаётся у вас. Красивый ответ не заменяет сравнение файлов.
4. Специализированный сервис перевода субтитров
Проверяйте, что сервис принимает ваш собственный SRT или VTT, объясняет сохранение структуры и позволяет увидеть замечания. Плюс такого процесса — перевод и контроль можно выполнять в одном месте. Минусы — лимиты, передача файла и зависимость от правил конкретного продукта. Отдельно выясните, относится ли бесплатная функция к переводу или только к проверке.
Проверка SRT после перевода за пять минут
Это быстрый первичный контроль, а не полная вычитка фильма. Если появляются ошибки или спорный смысл, проверка займёт больше времени. До начала сохраните обе версии и убедитесь, что они относятся к одной монтажной версии видео.
Шаг 1. Индексы и количество реплик
Сравните количество блоков до и после. Проверьте последовательность индексов, дубликаты и пустые реплики. Для обычного последовательного SRT ожидается 1, 2, 3 и далее без пропусков. Если исходник устроен иначе, сначала выясните причину; не перенумеровывайте только перевод, чтобы скрыть предупреждение.
Шаг 2. Дифф тайм-кодов на Python
Сохраните код ниже в check_srt.py и выполните: python check_srt.py source.srt translated.srt. Нужен Python 3, дополнительные библиотеки не требуются. Скрипт читает UTF-8 с BOM или без него, допускает окончания строк Windows и Unix, проверяет блоки, непустой текст и положительную длительность, затем сравнивает индексы и интервалы.
import re
import sys
from pathlib import Path
STAMP = r"[0-9]{2}:[0-5][0-9]:[0-5][0-9],[0-9]{3}"
TIMING = re.compile(rf"({STAMP}) --> ({STAMP})")
def milliseconds(stamp):
h, m, s, ms = map(int, re.split(r"[:,]", stamp))
return ((h * 60 + m) * 60 + s) * 1000 + ms
def load(path):
text = Path(path).read_text(encoding="utf-8-sig")
if "\x00" in text:
raise ValueError(f"{path}: convert to UTF-8 first")
blocks = re.split(r"\n[ \t]*\n", text.strip())
cues = []
for position, block in enumerate(blocks, 1):
lines = block.splitlines()
if len(lines) < 3 or lines[0] != str(position):
raise ValueError(f"{path}: invalid index/block {position}")
match = TIMING.fullmatch(lines[1])
if not match or not any(line.strip() for line in lines[2:]):
raise ValueError(f"{path}: invalid timing/empty cue {position}")
if any("-->" in line for line in lines[2:]):
raise ValueError(f"{path}: possible merged block {position}")
start, end = match.groups()
if milliseconds(end) <= milliseconds(start):
raise ValueError(f"{path}: nonpositive duration {position}")
cues.append((lines[0], start, end))
return cues
def main():
if len(sys.argv) != 3:
print("Usage: python check_srt.py source.srt translated.srt")
return 2
try:
source, target = map(load, sys.argv[1:])
if len(source) != len(target):
raise ValueError(f"cue count: {len(source)} != {len(target)}")
for position, (before, after) in enumerate(zip(source, target), 1):
if before != after:
raise ValueError(f"cue {position}: {before} != {after}")
except (OSError, UnicodeError, ValueError) as error:
print(f"FAIL: {error}")
return 1
print(f"PASS: {len(source)} cues; indices and timestamps unchanged")
return 0
if __name__ == "__main__":
sys.exit(main())PASS означает совпадение количества, индексов и тайм-кодов; FAIL показывает первую найденную проблему, код завершения равен 1. Скрипт намеренно строгий: последовательная нумерация с 1, обычные интервалы SRT без дополнительных координат. CP1251 и UTF-16 сначала преобразуйте в UTF-8. VTT этим кодом не проверяется.
Проверка не обнаруживает ошибочный перевод, переставленные тексты при неизменных интервалах или все проблемы читаемости. Она также не оценивает промежутки и наложения между соседними репликами. Совпадение тайм-кодов сохраняет и прежние ошибки синхронизации: их нужно искать отдельно по видео.
Шаг 3. Пропуски, наложения и вид на экране
Посмотрите начало, середину и конец ролика, затем несколько коротких и длинных реплик. Проверьте паузы, наложения, отображение кириллицы и переносы на реальном размере окна. Длинный промежуток может быть тишиной, а наложение — одновременной речью: предупреждение нужно разобрать, а не автоматически исправлять.
Шаг 4. Имена, числа и смысл
Найдите имена и термины из глоссария, суммы, даты, единицы измерения и отрицания. Сверьте подозрительные реплики с соседними и со звуком. Например, пропущенное «не» не меняет структуру SRT, но переворачивает инструкцию. Если не владеете целевым языком, передайте эту часть проверки человеку, который им владеет.
Когда нужен человек, даже если файл прошёл QA
Редактор нужен там, где решение зависит от контекста: шутка, ирония, смена говорящего, незаконченная мысль, термин с несколькими значениями. Для материалов с ответственными инструкциями планируйте предметную вычитку. Технически правильный файл нельзя считать подтверждением точности содержания.
Сохранение времени ограничивает место для перевода. Если фраза не читается за исходный интервал, сначала попробуйте сократить её без потери смысла. Изменение разбивки и тайминга согласуйте отдельным этапом. В конце передайте редактору исходник, перевод, глоссарий и список спорных мест: так понятно, что именно уже проверено.
Если вы строите повторяемый процесс, полезны наши разборы n8n и Zapier и контроля проектов с ИИ-агентами. В задаче с субтитрами точку приёмки можно сформулировать явно: структура совпала, замечания разобраны, содержание просмотрено человеком.
Как это делает SRT Rescue
SRT Rescue принимает ваш собственный SRT/VTT. Бесплатная проверка работает в браузере: lint отмечает пропуски, наложения и проблемы нумерации. Для перевода сервис сохраняет индексы и тайм-коды, принимает глоссарий имён и терминов и выдаёт отчёт QA по репликам в HTML, CSV или JSON.
Условия пилота на 18 октября 2026 года: $4 за один файл, разовая оплата через Stripe; сейчас продаются русский и английский языки. Лимит — 1 МиБ и до 2000 реплик. Загруженные для обработки файлы хранятся 24 часа и удаляются. Скачайте результат и отчёт в этот срок и храните собственную копию исходника.
Смысл перевода не гарантируется: нужна выборочная вычитка, а для ответственных материалов — более полная. Приём в рамках пилота открыт до 20 октября 2026 года, 18:00 UTC. Это датированные условия; перед оплатой сверьте актуальную доступность и условия на странице сервиса.
Если такой процесс подходит вашей задаче, откройте SRT Rescue и начните с бесплатной проверки файла. Проверка помогает понять состояние исходника до решения о переводе. Отчёт с замечаниями используйте как список для просмотра, а не как сертификат точности.
Дисклеймер об ИИ-переводе
ИИ может выдать убедительный текст с ошибкой смысла. Ни сохранённые тайм-коды, ни отсутствие замечаний QA не исключают такой ошибки. Оценка результата остаётся за человеком; этот материал описывает способ контроля структуры и первичной вычитки, а не обещает автоматическую готовность к публикации.
Частые вопросы о переводе SRT
Можно ли перевести SRT онлайн бесплатно?
Это зависит от условий выбранного инструмента. В SRT Rescue бесплатна проверка файла в браузере. Перевод в пилоте стоит $4 за один файл разовым платежом; бесплатную проверку не следует путать с бесплатным переводом.
Как убедиться, что таймкоды после перевода не изменились?
Сравните число блоков, индексы и время начала и конца каждой реплики с исходником. Приведённый Python-скрипт делает такую проверку для последовательного SRT в UTF-8, но не оценивает смысл текста.
Что делать, если при переводе через ChatGPT изменились номера реплик?
Вернитесь к исходнику и найдите первое расхождение. Проверьте пропуски и объединения блоков, а затем повторите перевод нужного фрагмента с сохранением структуры. Одна перенумерация не восстанавливает потерянную реплику.
Почему русский текст в SRT отображается нечитаемо?
Сначала проверьте кодировку исходного файла. CP1251 и UTF-16 нужно правильно открыть и сохранить рабочую копию в UTF-8. Не переводите текст, который уже отображается с испорченными буквами.
Можно ли так же перевести VTT?
SRT Rescue принимает и SRT, и VTT. Приведённый в статье Python-скрипт предназначен только для SRT: VTT требует отдельной проверки своего синтаксиса.
Нужна ли вычитка после успешной проверки QA?
Да. QA помогает проверить структуру и найти места для просмотра, но не гарантирует правильность смысла. Нужна как минимум выборочная вычитка; глубину проверки определяйте по назначению материала.