Перейти к основному содержимому
SubtitleMatrix

Добавить BOM в субтитры

Текст и оформлениеИсправление кодировки и BOM
Или вставьте текст субтитров

Параметры

BOM — три байта в самом начале файла, которые сообщают, в какой кодировке он записан. Она невидима во всех редакторах и плеерах, не занимает места на экране, и в субтитрах от её добавления или удаления ничего не меняется. О ней заботятся два вида инструментов: Windows-программы для субтитров, которые ставят её по умолчанию, и строгие парсеры в сборочных конвейерах, которые отвергают файл, начинающийся с неё. Эта страница открывает поле в состоянии, названном в её заголовке, так что вы можете переключить его, если ваш файл оказался наоборот. Файл в UTF-16 всегда несёт BOM, иначе читатель не узнает порядок байтов, — запрос на удаление там оставляет её на месте.

В какой частоте кадров считается тайминг. На страницах форматов это то, что нужно MicroDVD: он хранит время в номерах кадров. На страницах частоты кадров это частота, по которой файл был рассчитан, — версия, для которой делались субтитры, — а второе поле страницы принимает частоту видео, с которым вы будете их использовать. Обычные значения: 23,976, 24, 25, 29,97, 30, 50, 59,94 и 60. Ошибка сдвигает весь таймлайн, а на страницах частоты кадров — на коэффициент, а не на фиксированную величину.

BOM — это один символ, U+FEFF, стоящий впереди всего остального в файле; в UTF-8 он занимает три байта, EF BB BF, и на этой странице меняется ровно одно: перед первым байтом появляется отметка, а реплики, таймкоды и переводы строк остаются такими, какими пришли. Нужна она потому, что многие программы — старые плееры Windows, средства авторинга дисков, скрипты, читающие первую строку, — решают, в какой кодировке файл, по первым байтам, а не по разбору всего файла: с отметкой имя с диакритикой, фигурная кавычка или греческая буква читаются собой.

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

Примеры

ASCII-файл субтитров с отметкой впереди

Вход

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.

Ожидаемый текст начинается с невидимого символа: U+FEFF, три байта EF BB BF, перед единицей в номере первой реплики. Панели будут выглядеть одинаково, и это не ошибка отрисовки: разница между файлами длиной в три байта, и ни у одного из них нет формы. Скачайте результат и откройте в редакторе, который показывает кодировку, либо посмотрите первые байты в hex-редакторе — там отметка видна сразу.

Файл Windows: отметка добавлена, возвраты каретки сохранены

Вход

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.

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

Файл, в котором отметка уже есть

Вход

1
00:00:01,000 --> 00:00:02,000
Already marked.

Выход

1
00:00:01,000 --> 00:00:02,000
Already marked.

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

Частые вопросы

Что именно меняет добавление BOM в файл субтитров?

Один символ в самом начале файла: U+FEFF, записанный тремя байтами EF BB BF в UTF-8. Ни одна реплика не добавляется, не удаляется и не правится, ни один таймкод не сдвигается, номера реплик и переводы строк выходят такими, какими вошли, а текст каждой строки не тронут. Если сравнить два файла построчно, отличается только первая строка, и отличается она тремя байтами в начале.

Почему панели на этой странице выглядят одинаково?

Потому что добавляемый символ не имеет формы. U+FEFF — это пробел нулевой ширины, поэтому панель, которая рисует текст так же, как ваш плеер, показывает до и после одно и то же. Изменение настоящее и лежит в скачанном файле: разница — первые три байта. Смотреть на него нужно в индикаторе кодировки редактора или в hex-редакторе, где в начале видны EF BB BF, а не в тексте.

Безопасно ли запускать добавление BOM дважды на одном файле?

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

Сохранится ли отметка, если потом конвертировать файл в другой формат?

Страницами конвертации этого сайта — нет: они пишут обычный UTF-8 без отметки, поэтому добавленная здесь отметка не переживёт смену формата. Порядок работы такой: сначала конвертация, потом отметка как последний шаг перед сдачей. В целом это и более разумный порядок, потому что отметка — свойство готового файла, а не содержимого субтитров.

Меняет ли добавление BOM переводы строк в файле субтитров?

Нет. Отметка ставится перед первым байтом файла и не влияет на то, что идёт после неё. Файл Windows, полный CRLF, остаётся полным CRLF, файл Unix остаётся на LF, а файл со смешанными окончаниями выходит с той же смесью, с которой пришёл. Переводы строк меняет другая страница, и делать обе вещи на одной странице было бы плохой идеей.

В какие форматы субтитров можно добавить BOM?

Во все двенадцать, которые обрабатывает сайт: SRT, WebVTT, ASS, SSA, SBV, SAMI, LRC, MicroDVD, TTML, JSON, TXT и CSV. Отметка относится к первым байтам файла, а не к формату субтитров, поэтому настраивать в ней нечего: даже обычная текстовая расшифровка без всякой шкалы времени может её нести.

Похожие инструменты