Вилучити BOM із субтитрів
Або вставте текст субтитрів
Параметри
BOM — це три байти на самому початку файлу, що вказують, у якому кодуванні він записаний. Вона невидима в кожному редакторі й плеєрі, не займає місця на екрані, і нічого в субтитрах не змінюється, коли її додати чи вилучити. Про неї дбають два різновиди інструментів: програми Windows, що пишуть субтитри, які ставлять її за замовчуванням, і строгі парсери в складальних конвеєрах, які відкидають файл, що починається з неї. Ця сторінка відкриває поле в стані, який називає її заголовок, тож ви можете перемкнути його, якщо ваш файл виявиться навпаки. Файл у UTF-16 завжди несе BOM, бо саме так читач знає, який із двох порядків байтів перед ним — прохання вилучити її там лишає її на місці.
У якій частоті кадрів пораховано таймінги. На сторінках форматів це те, що потрібно MicroDVD, бо він зберігає час як номери кадрів. На сторінках частоти кадрів це частота, за якою файл синхронізували — версія, для якої робили субтитри, — а друге поле сторінки приймає частоту відео, з яким ви будете їх використовувати. 23,976, 24, 25, 29,97, 30, 50, 59,94 і 60 — найпоширеніші. Помилка зміщує весь таймлайн, а на сторінках частоти кадрів — на відношення, а не на фіксовану величину.
Маркер порядку байтів — це один символ, U+FEFF, перед усім іншим у файлі. Багато інструментів його пишуть, і багато інструментів його не чекають, а ті, що не чекають, показують його як короткий блок символів, приклеєний до початку першої репліки. Ця сторінка прибирає його й лишає все інше точно там, де знайшла.
Прибирання важить найбільше там, де файл перестає бути чимось, що читає людина, і стає чимось, що розбирає програма: конвеєри збірки субтитрів, скрипти, що читають перший рядок файлу, і формати, чия специфікація каже, що початкові байти — це перший символ першої репліки. Важить воно й тоді, коли файли з’єднують, бо маркер посередині з’єднаного файлу — це символ посередині репліки. І важить для здачі: якщо специфікація, за якою ви здаєте, каже UTF-8 без маркера, маркер — це різниця, яку знайде перевірка.
Чого сторінка не робить — не вирішує за вас нічого іншого. Номери реплік, таймкоди, текст реплік і закінчення рядків повертаються такими, якими увійшли, включно з CRLF, а файл без маркера повертається байт у байт, а не переписується в щось еквівалентне. Прибрати маркер — не те саме, що змінити кодування файлу, і ці дві речі часто плутають: ця сторінка змінює перший символ файлу й нічого в тому, як закодовано решту.
Є один випадок, де назва сторінки й те, що насправді відбувається, розходяться, і це варто знати до прогону. Файл UTF-16 потребує свого маркера: без нього немає способу відрізнити два порядки байтів, тому файл UTF-16, записаний без маркера, неможливо прочитати назад. Пропустіть такий файл через цю сторінку — і завантажений файл усе одно нестиме маркер, бо альтернатива — файл, якого ніхто не відкриє. Якщо ваш файл UTF-16 і маркер має зникнути, вам потрібне інше кодування, а не те саме без маркера, і сторінка конвертації кодувань посилається нижче.
Маркер прибирається з файлу, який ви завантажуєте, тому панелі можуть виглядати однаково: символ нульової ширини саме так і виглядає. Перевірте результат у покажчику кодування редактора або в шістнадцятковому редакторі: файл без маркера починається з першого байта своєї першої репліки. Приймаються всі дванадцять форматів, від SRT до звичайного текстового транскрипту, і нічого не завантажується: файл читається, змінюється й записується у вашому браузері.
Приклади
Файл із маркером, маркер знято
Вхід
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.
Вхід починається з U+FEFF, а вихід — ні: два файли відрізняються рівно цим одним символом, і це вся операція. Файли в такому стані зазвичай виходять із програми субтитрів Windows, а причина, чому люди хочуть позбутися маркера, — крок збірки або строгий розбирач, що дивиться на початкові байти, а не на репліки.
Файл Windows: маркер прибрано, повернення каретки збережено
Вхід
1
00:00:01,000 --> 00:00:02,000
Marked and Windows.
Результат
1
00:00:01,000 --> 00:00:02,000
Marked and Windows.
Зникає лише маркер. Кожне повернення каретки належить файлу, і сторінка не має щодо них жодної думки: хто хоче змінити обидві речі, тому потрібна сторінка закінчень рядків, і саме розділення двох операцій робить кожну з них безпечною для файлу, якого ви не відкривали. Очікуваний текст і далі тримає свої CRLF точно як вхід.
Файл без маркера, повернутий байт у байт
Вхід
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.
Прибирати не було чого, тому файл повертається незмінним — включно з відсутністю маркера. Це випадок, що ловить реалізацію, яка спершу пише маркер, а потім знімає його, або нормалізує файл дорогою: чесне прочитання «робити не було чого» — це сам вхід, байт у байт, а не причепурена його версія.
Часті запитання
Як визначити, чи має мій файл субтитрів маркер порядку байтів?
Відкрийте його в редакторі, що показує кодування файлу: файл UTF-8 із маркером зазвичай позначено як UTF-8 with BOM або UTF-8 BOM, а не просто UTF-8. Якщо це не допомагає, подивіться на перші байти в шістнадцятковому редакторі: файл, що починається з EF BB BF, несе маркер, а той, що починається з першого символу репліки, — ні. Блок символів на початку першого рядка — це те саме, побачене програмою, що прочитала маркер як три звичайні символи.
Чому маркер лишається на файлі UTF-16 після прибирання?
Бо файл UTF-16 його потребує. UTF-16 зберігає кожен символ двома байтами, і два порядки байтів зовні виглядають однаково, тому маркер — це те, що каже читачеві, який порядок перед ним; файл UTF-16 без маркера неможливо прочитати назад ні цим сайтом, ні чимось іншим. Сторінка зберігає його з цієї причини. Щоб отримати файл зовсім без маркера, змініть його кодування на UTF-8 або Windows-1252, де маркер необов’язковий.
Чи пошкодить сторінка файл субтитрів, який ніколи не мав маркера?
Ні. Вихід у цьому випадку — це вхід, байт у байт, і про нього нічого не повідомляється. Прогін сторінки файлом, у стані якого ви не впевнені, безпечний за побудовою з тієї самої причини: коли маркера немає, нема чого писати, а коли є — зміна найменша з можливих. Прогін, який не знайшов роботи, — не прогін, який щось зробив.
Чи може файл субтитрів мати більше одного маркера порядку байтів?
Так, і це трапляється щоразу, коли інструмент додає маркер, не перевіривши, чи він уже є: другий маркер робить файл, що в редакторі виглядає цілком нормально, але відрізняється від нормального своїми початковими байтами. Ця сторінка прибирає всі маркери, а не один, тому двічі помічений файл чиститься за один прохід, а повторний прогін нічого не змінює.
Чи змінює прибирання маркера кодування мого файлу субтитрів?
Не в тому сенсі, який зазвичай мають на увазі. Текст файлу — ті самі символи, і решта закодована так само; змінюється те, що читач більше не має початкових байтів, які кажуть йому кодування. Файл UTF-8 без маркера — це звичайний UTF-8, який більшість інструментів і так припускає. Зміна самого кодування — окрема сторінка, посилання на неї є тут.
Чи повернеться маркер, коли я завантажу файл субтитрів?
Ні. Завантаження — це момент, коли файл записується, і прогін цієї сторінки записує його без маркера, тож ви отримуєте те, що описують дві панелі. Кодування, у якому файл записано, зберігається від того, як його прочитали, з одним винятком: файл, що прийшов як UTF-16, записується назад як UTF-16 і зберігає свій маркер, бо той маркер структурний, а не декоративний.