Привязать субтитры к кадрам
Или вставьте текст субтитров
Параметры
Каждая граница реплики сдвигается к ближайшему кадру с этой частотой: при 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. Длина каждой реплики поэтому может измениться на половину кадра в любую сторону, и это осознанный размен страницы.
Смысл в том, чтобы отнять решение у плеера: субтитры хранятся в миллисекундах, а большинство плееров и инструментов прожига работают в кадрах, поэтому границу между кадрами округляет тот, кто рисует, и разное ПО округляет по-разному — после привязки каждая граница лежит на кадре, и все инструменты читают файл одинаково. Это не пересчёт частоты кадров: если файл неверен относительно видео, сначала нужен коэффициент, а привязка лишь оставляет длину дорожки прежней и не смотрит на видео вовсе.
Примеры
Каждая граница попадает на кадр
Вход
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. Ничего не масштабировалось — вторая реплика по-прежнему длится около двух секунд, а пауза между ними не изменилась до кадра, — но длина каждой реплики немного сдвинулась: 2 010 мс и 2 030 мс вышли как 2 000 мс и 2 040 мс.
Реплика короче кадра
Вход
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.
У десятимиллисекундной реплики оба края округляются к кадру 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 кадра в секунду — это не целое число миллисекунд на кадр, поэтому ни одна круглая секунда не является границей кадра, и оба края двигаются: реплика, длившаяся ровно 2 000 мс, выходит длиной 2 002 мс. Каждая граница по-прежнему на кадре, как и обещает страница, но круглых чисел, которыми был написан исходник, больше нет. Это стоит увидеть до того, как привязывать файл к 23,976 или 29,97 в ожидании, что тайминги вернутся неизменными.
Частые вопросы
Чем привязка к кадрам отличается от пересчёта частоты кадров?
Пересчёт меняет длину дорожки, привязка — только то, где на ней лежат границы. Пересчёт субтитров с 24 на 25 кадров в секунду умножает каждый таймкод на 0,96, чтобы они уложились в видео, и двухсекундная реплика становится 1,92 секунды. Привязка оставляет эти две секунды двумя секундами и двигает края на ближайший кадр, меняя каждый меньше чем на половину кадра.
Выровняет ли привязка субтитры с видео, идущим на другой частоте?
Нет. Эта страница никогда не смотрит на видео и не меняет длину дорожки, поэтому файл, который разъехался из-за другой частоты видео, останется настолько же разъехавшимся. Сначала посчитайте коэффициент — для этого есть страницы пересчёта частоты кадров, — а привязывайте после, если инструмент, которому вы сдаёте, требует границ на кадрах.
Насколько может измениться длина реплики при привязке к кадрам?
До половины кадра на каждом краю, то есть до целого кадра в сумме и никогда больше. При 25 кадрах в секунду это не больше 40 мс на реплику, по 20 мс на границу. При 23,976 или 29,97 целого числа миллисекунд на кадр нет, поэтому двигается даже реплика, которая начинается и кончается на круглых значениях: двухсекундная реплика становится 2 002 мс.
Я запустил страницу дважды, и второй прогон ничего не изменил. Так и должно быть?
Да, и именно это делает страницу безопасной для пакетной обработки. Когда каждая граница уже на кадре, ближайший к ней кадр — она сама, поэтому повторный запуск возвращает файл байт в байт. При проверке сдачи это ещё и дешёвый тест: файл, который меняется на втором проходе, не был привязан до конца в первый раз, чего быть не должно.
Может ли субтитр исчезнуть при привязке к сетке кадров?
Только если он короче половины кадра: тогда оба его края округляются к одному кадру и писать нечего. При 25 кадрах в секунду это значит короче 20 мс, чего ни один настоящий субтитр не бывает; страница считает то, что отбросила, поэтому смотреть нужно в отчёт, а не в скачанный файл.
Привязывать к частоте, которую объявляет сам файл?
Не автоматически: объявление говорит, как читать номера кадров в файле, а частота привязки говорит, где окажутся границы в продукте. В большинстве сдач это одно и то же число. Они расходятся, когда вы готовите файл для инструмента, работающего на другой частоте, и выбор объявленной частоты там — тихая ошибка: продукт по-прежнему точен до кадра, но на сетке, которую никто не просил.