Конвертер переводов строк
Или вставьте текст субтитров
Параметры
Каждая строка файла заканчивается либо одним невидимым символом (LF), либо двумя (CRLF). Плееры, редакторы и инструменты субтитров читают оба, поэтому это почти никогда не причина проблем — причины бывают две: сборочный конвейер или строгий парсер, отвергающий другой вариант, и инструмент сравнения, показывающий каждую строку изменённой из-за разных окончаний. LF здесь по умолчанию, потому что его используют Unix, macOS и веб, и потому что файл с ним остаётся нетронутым. Выбор CRLF преобразует оба вида существующих окончаний, поэтому смешанный файл выходит согласованным.
В какой частоте кадров считается тайминг. На страницах форматов это то, что нужно MicroDVD: он хранит время в номерах кадров. На страницах частоты кадров это частота, по которой файл был рассчитан, — версия, для которой делались субтитры, — а второе поле страницы принимает частоту видео, с которым вы будете их использовать. Обычные значения: 23,976, 24, 25, 29,97, 30, 50, 59,94 и 60. Ошибка сдвигает весь таймлайн, а на страницах частоты кадров — на коэффициент, а не на фиксированную величину.
Перевод строки — символ или пара символов, которой заканчивается строка: Unix заканчивает строку одним LF, Windows — парой CR и LF. На экране это неразличимо, и плееры читают оба варианта одинаково, поэтому разница проявляется только там, где её замечает инструмент: система контроля версий, скрипт сборки, отрезающий последний символ строки, или спецификация поставки, где назван один из двух вариантов.
Страница намеренно приводит файл к одному виду: сначала все окончания нормализуются в LF, а затем применяется выбранный вами вариант, поэтому файл со смесью — часть строк из Windows, часть из Unix — выходит целиком однородным. Одинокий CR, окончание строки старых Mac, обрабатывается вместе с остальными: такой файл для инструмента, который ищет только LF, выглядит одной огромной репликой, а после нормализации читается правильно. По умолчанию в поле стоит LF, второе значение — CRLF; принимаются все двенадцать форматов, потому что перевод строки принадлежит тексту, а не формату субтитров, и ничего не отправляется на сервер.
Примеры
Перевод файла Unix в окончания Windows
Вход
1
00:00:01,000 --> 00:00:02,000
The room is dark.
2
00:00:03,000 --> 00:00:04,000
A cold night.
Выход
1
00:00:01,000 --> 00:00:02,000
The room is dark.
2
00:00:03,000 --> 00:00:04,000
A cold night.
Каждое окончание строки становится двумя символами, включая пустую строку между репликами: эта пустая строка — тоже строка, и у неё тоже есть окончание, а преобразование, которое её пропустит, оставит файл с разделителем реплик на одиночном LF. В ожидаемом тексте окончания записаны парами CR LF, поэтому их можно пересчитать прямо по нему, и больше в файле ничего не сдвинулось.
Обратный перевод файла Windows в окончания Unix
Вход
1
00:00:01,000 --> 00:00:02,000
The room is dark.
Выход
1
00:00:01,000 --> 00:00:02,000
The room is dark.
Направление с видимым следствием. Файл, в котором остался лишний возврат каретки, в некоторых редакторах выглядит так, будто после каждой строки есть пустая, а в конвейере оболочки даёт возврат каретки в конце последнего поля. Видео, тайминги и текст в обоих файлах одинаковы; разница — символ в конце каждой строки, и именно это направление его убирает.
Файл, отредактированный на двух машинах, приведён к одному виду
Вход
1
00:00:01,000 --> 00:00:02,000
Mixed endings.
2
00:00:03,000 --> 00:00:04,000
Second.
Выход
1
00:00:01,000 --> 00:00:02,000
Mixed endings.
2
00:00:03,000 --> 00:00:04,000
Second.
Один и тот же файл, побывавший на двух машинах: часть строк кончается CRLF, часть LF, и один разделитель реплик записан каждым из способов. Выход однородный, и в этом весь смысл: файл больше не означает разное в зависимости от того, какую строку читать. Наивная замена ошибается на этом случае в обе стороны: в одну сторону оставляет строки с LF, в другую даёт удвоенный возврат каретки.
Частые вопросы
Как увидеть, какие переводы строк в файле субтитров?
В большинстве редакторов стиль перевода строки показан в строке состояния как LF, CRLF или смесь. Из оболочки файл с CRLF показывает возврат каретки в конце каждой строки, если смотреть инструментом, который делает управляющие символы видимыми. Прямая проверка — посмотреть байты в конце строки: одиночный 0A — это LF, а пара 0D 0A — CRLF.
Что страница делает с файлом, где окончания строк смешаны?
Делает их одинаковыми. Сначала файл нормализуется в LF, а затем переводится в выбранный вами стиль, поэтому файл, где часть строк кончается одним способом, а часть другим, выходит полностью однородным, а не наполовину преобразованным. В такое состояние файлы попадают после правки на нескольких машинах, и именно смесь делает сравнение с другой копией файла нечитаемым.
Меняют ли переводы строк тайминг и текст реплик?
Нет. Реплики, их номера, начало и конец и слова в них одинаковы до и после; меняется один или два символа в конце каждой строки. Плеер читает оба файла одинаково, поэтому такое преобразование можно делать под требование поставки, не беспокоясь о самих субтитрах.
Что выбрать для субтитров: LF или CRLF?
LF, если перед вами никто не называет CRLF. Его ждут инструменты Unix, большинство сборочных конвейеров и спецификация WebVTT, и он делает файл на один байт короче в каждой строке. CRLF выбирают, когда его требует спецификация поставки или инструмент, работающий только под Windows, причём выбор делается для файла, а не для всего проекта: отдельно поставляемый файл субтитров может отличаться от остальных.
Почему при переводе в CRLF меняется и пустая строка между репликами?
Потому что пустая строка — это строка, и её окончание такое же, как у любой другой. SRT разделяет реплики пустой строкой, поэтому файл, переведённый в CRLF, но с разделителем на одиночном LF, имел бы посреди однородного файла одно окончание другого вида — ровно ту смесь, которую эта страница и убирает. То же относится к последней строке файла.
Преобразуются ли старые маковские возвраты каретки?
Да. Файл, строки которого кончаются одиночным CR, стилем Mac OS до OS X, нормализуется вместе со всем остальным и выходит в выбранном вами стиле, а не остаётся одной длинной репликой. Отдельного варианта CR в поле нет, потому что так уже никто не пишет, но файлы, которые уже так записаны, читаются и переписываются правильно.