Перейти до основного вмісту
SubtitleMatrix

Вирівняти субтитри по кадрах

ТаймінгВирівнювання за опорною доріжкою
Або вставте текст субтитрів

Параметри

Кожна межа репліки переноситься на найближчий кадр із цією частотою, тож при 25 fps 00:00:02,010 стає 00:00:02,000, а 00:00:02,030 — 00:00:02,040. Межа рівно посередині між кадрами округлюється вгору, тож 00:00:02,020 стає 00:00:02,040. Нічого не масштабується: таймлайн зберігає довжину, а межі просто лягають на кадри, тож довжина кожної репліки може змінитися до пів кадру в будь-який бік. Це не оголошена частота кадрів файлу — вона лише визначає, де межі опиняться в результаті.

У якій частоті кадрів пораховано таймінги. На сторінках форматів це те, що потрібно MicroDVD, бо він зберігає час як номери кадрів. На сторінках частоти кадрів це частота, за якою файл синхронізували — версія, для якої робили субтитри, — а друге поле сторінки приймає частоту відео, з яким ви будете їх використовувати. 23,976, 24, 25, 29,97, 30, 50, 59,94 і 60 — найпоширеніші. Помилка зміщує весь таймлайн, а на сторінках частоти кадрів — на відношення, а не на фіксовану величину.

Ця сторінка переносить кожну межу репліки на найближчий кадр обраної вами частоти. Швидкість вона не змінює: шкала зберігає довжину, порядок реплік лишається як був, а змінюється лише те, де стоїть кожна межа — 00:00:02,010 за 25 кадрів на секунду стає 00:00:02,000, а 00:00:02,030 — 00:00:02,040. Тому довжина кожної репліки може змінитися до пів кадру в будь-який бік, і це та ціна, яку сторінка свідомо бере.

Робота, яку вона виконує, — забирає рішення в плеєра. Субтитри зберігаються в мілісекундах, але більшість плеєрів і програм для врізання працюють у кадрах, тому межу між двома кадрами округлює той, хто малює, — і різні програми округлюють по-різному. Один плеєр показує рядок на кадр раніше, інший на кадр пізніше, і той самий файл на двох машинах виглядає трохи зсунутим. Один прогін тут робить це рішення вашим і єдиним: після нього кожна межа збігається з кадром, і всі інструменти читають файл однаково.

Це не перерахунок частоти кадрів. Перетворення субтитрів із 23,976 на 25 множить усю шкалу на коефіцієнт, щоб репліки вклалися у відео, — це інша сторінка в іншій групі. Ця сторінка взагалі не дивиться на відео: якщо файл уже правильний і ви хочете лише, щоб межі стояли на кадрах, прив’язуйте; якщо він неправильний щодо відео, спершу треба змінити коефіцієнт.

Два поля частоти кадрів з’являються тому, що вони відповідають на різні питання. Одне — частота, з якою читають файл; вона потрібна форматам із номерами кадрів, як-от MicroDVD, щоб їх узагалі можна було зрозуміти. Друге — частота, до якої прив’язувати. У файлі, що сам оголошує частоту, вони зазвичай однакові, а їхнє переплутування тихе: вихід усе одно точний до кадру, лише на чужій сітці. Усе виконується у вкладці браузера, без завантаження, однаково для SRT, WebVTT, ASS, SSA, SBV, SAMI, MicroDVD, TTML, JSON і CSV.

Приклади

Кожна межа лягає на кадр

Вхід

1
00:00:02,020 --> 00:00:04,030
Hello there.

2
00:00:07,010 --> 00:00:09,040
Second line.

Результат

1
00:00:02,040 --> 00:00:04,040
Hello there.

2
00:00:07,000 --> 00:00:09,040
Second line.

За 25 кадрів на секунду межі належать на кратні 40 мс. 02,020 стоїть точно посередині між двома й округлюється вгору до 02,040; 04,030 піднімається до 04,040; 07,010 повертається до 07,000. Нічого не масштабували — друга репліка все ще близько двох секунд, а проміжок між ними з точністю до кадру не змінився, — але довжина кожної репліки трохи зрушила: 2010 і 2030 мс стали 2000 і 2040 мс.

Репліка коротша за кадр

Вхід

1
00:00:04,000 --> 00:00:04,010
Squeezed.

2
00:00:06,010 --> 00:00:08,010
A normal one.

Результат

2
00:00:06,000 --> 00:00:08,000
A normal one.

У репліки на 10 мс обидві межі округлюються до кадру 100, тому прив’язка залишила б їй однаковий час на обох кінцях — а репліку, що закінчується там, де починається, показати неможливо. Її вилучено й пораховано, а не розтягнуто до одного кадру: вигадана довжина поставила б на екран субтитр, якого файл не просив. За 25 кадрів на секунду для цього треба бути коротшою за 20 мс; друга репліка в двадцять разів довша й поводиться як звичайно.

Дробова частота кадрів не залишає довжин без змін

Вхід

1
00:00:01,000 --> 00:00:03,000
Hello there.

Результат

1
00:00:01,001 --> 00:00:03,003
Hello there.

23,976 кадру на секунду — це не ціла кількість мілісекунд на кадр, тому жодна кругла секунда не є межею кадру й обидві межі рухаються: репліка, що тривала рівно 2000 мс, виходить довжиною 2002 мс. Кожна межа все ще на кадрі, як і обіцяє сторінка, але круглі числа, з якими писали джерело, зникли. Це варто побачити до того, як прив’язувати файл до 23,976 чи 29,97 і чекати, що таймінг повернеться незмінним.

Часті запитання

Що дає прив’язка до кадрів, чого не дає перерахунок частоти кадрів?

Перерахунок змінює довжину шкали; прив’язка змінює лише те, де на ній стоять межі. Перетворення субтитрів із 24 на 25 кадрів на секунду множить кожен таймкод на 0,96, щоб вони вклалися у відео, і репліка на дві секунди стає 1,92. Прив’язка залишає ті дві секунди двома секундами й переносить краї на найближчий кадр, змінюючи кожен менш ніж на пів кадру.

Чи змусить прив’язка субтитри збігтися з відео, яке йде з іншою частотою кадрів?

Ні. Сторінка ніколи не дивиться на відео й не змінює довжину шкали, тому файл, який відстає через іншу частоту відео, залишиться так само зсунутим. Спершу визначте коефіцієнт — для цього є сторінки перерахунку частоти кадрів, — і вже потім прив’язуйте, якщо інструмент, якому ви здаєте, потребує меж на кадрах.

Наскільки може змінитися довжина репліки після прив’язки?

До пів кадру на кожному краї, тобто до цілого кадру разом, і ніколи більше. За 25 кадрів на секунду це щонайбільше 40 мс на репліку, по 20 мс на межу. За 23,976 чи 29,97 цілої кількості мілісекунд на кадр немає, тому навіть репліка, що починається й закінчується на круглих значеннях, рухається: дворядкова на дві секунди стає 2002 мс.

Я прогнав сторінку двічі, і другий прогін нічого не змінив. Так і має бути?

Так, і саме це робить сторінку безпечною для пакетної обробки. Щойно кожна межа стоїть на кадрі, найближчий кадр до межі — це сама межа, тому другий прогін повертає файл байт у байт. Якщо ви перевіряєте здачу, це також означає, що файл, який змінився під час другого проходу, не був прив’язаний повністю першого разу — такого бути не повинно, але перевірка дешева.

Чи може субтитр зникнути після прив’язки?

Лише якщо він коротший за пів кадру: тоді обидві його межі округлюються до одного кадру й писати вже нічого. За 25 кадрів на секунду це все, що коротше за 20 мс, — жоден справжній субтитр таким не буває; сторінка рахує вилучене, тому дивіться звіт, а не саме завантаження.

Чи варто прив’язувати до тієї частоти, яку оголошує сам файл?

Не автоматично — оголошення каже, як читати номери кадрів у файлі, а частота прив’язки каже, де стоятимуть межі у виході. У більшості здач це одне число. Вони різняться, коли ви готуєте файл для інструмента, що працює з іншою частотою, і вибір оголошеної частоти там — тиха помилка: вихід усе одно точний до кадру, але на сітці, якої ніхто не просив.

Споріднені інструменти