Конвертируйте, изменяйте время и очищайте файлы субтитров SRT и VTT в вашем браузере.
SubRip (.srt) появился из программы копирования DVD в начале 2000-х годов и почти случайно стал форматом субтитров по умолчанию. WebVTT (.vtt) был разработан позже, специально для видео HTML5, и это то, что браузер ожидает, когда вы прикрепляете элемент дорожки к видео.
Они выглядят настолько похожими, что люди считают, что достаточно переименовать файл. Это не так, и ошибка остается молчаливой: браузер, передавший файл SRT, переименованный в .vtt, обычно вообще ничего не отображает, без объяснения причин ошибки.
Во-первых, заголовок. Файл WebVTT должен начинаться с буквального слова WEBVTT в первой строке. Файл SRT не имеет заголовка и начинается непосредственно с первого фрагмента. Эта единственная пропущенная строка является наиболее распространенной причиной того, что преобразованный файл не работает в браузере.
Во-вторых, разделитель миллисекунд. SRT записывает 00:00:01,500 через запятую. WebVTT записывает 00:00:01.500 с точкой. Игрок, ожидающий одного и получивший другое, обычно отклоняет кий.
В-третьих, нумерация сигналов. Сигналы SRT обычно нумеруются строкой, содержащей только целое число перед каждой меткой времени. В WebVTT этот идентификатор является необязательным и, если он присутствует, может быть любой строкой, а не числом.
Есть и более мелкие различия: WebVTT позволяет опускать компонент часов, поэтому 01:30.000 означает девяносто секунд, и поддерживает настройки позиционирования после метки времени, такие как line:90% align:center. Этот инструмент считывает все это и сохраняет настройки сигнала при преобразовании в VTT.
Загрузите файл — формат определяется автоматически по заголовку WEBVTT — а затем загрузите его в любом формате, который вам нужен. Тайминги сохраняются внутри в целых миллисекундах, поэтому преобразование является точным, а преобразование вперед и назад не накапливает дрейф.
Номера вызовов при экспорте перенумеровываются последовательно с 1. Если в нумерации исходного файла есть пробелы или дубликаты, что часто встречается в файлах, отредактированных вручную, результат будет чистым.
Каждый файл проверяется при загрузке, и результаты отображаются над предварительным просмотром. В каждом сообщении указывается конкретный номер сигнала, поскольку фраза «этот файл недействителен» бесполезна, когда в файле девятьсот сигналов.
Ошибки — это настоящие поломки: сигнал, который заканчивается раньше, чем начинается, вызов, начинающийся раньше предыдущего, или временная метка, которую вообще невозможно прочитать. Предупреждения — это технически допустимые, но обычно непреднамеренные события: сигнал нулевой длительности, который никогда не появится на экране, или два сигнала, перекрывающиеся так, что оба отображаются одновременно.
Неверно сформированный сигнал не прерывает работу всего файла. Сообщается о плохом блоке, а оставшиеся сигналы все еще загружаются, поэтому вы можете увидеть масштаб проблемы за один проход вместо того, чтобы исправлять ошибки по одному сбою за раз.
Файлы субтитров часто содержат разметку: теги типа HTML, такие как <i> и <b>, класс WebVTT и голосовые теги, такие как <c.loud> и <v Speaker>, а также переопределяющие блоки SubStation, такие как {\an8}, которые управляют позиционированием.
Кнопка «Удалить теги форматирования» удаляет все это, сохраняя при этом разрывы строк внутри каждой реплики, что важно для читаемости. Символьные сущности, такие как &, намеренно оставлены в покое, поскольку они представляют собой контент, а не форматирование.
Рассинхронизированные субтитры бывают двух разных разновидностей, и неправильное исправление только усугубляет ситуацию. Прежде чем прикасаться к чему-либо, потратьте тридцать секунд на диагностику.
CONSTANT OFFSET означает, что субтитры везде неправильные. Проверьте строку в начале и строку в конце. Если оба опоздали примерно на две секунды, вам нужна смена.
DRIFT означает, что ошибка увеличивается по мере воспроизведения видео. Если первая строка почти правильная, но последняя строка отстает на сорок секунд, сдвиг не поможет — нужно масштабироваться. Дрейф почти всегда возникает из-за несоответствия частоты кадров: субтитры были синхронизированы с частотой 23.976 кадров в секунду, а ваше видео воспроизводится со скоростью 25 кадров в секунду, или наоборот.
Введите смещение в миллисекундах. Положительное число приводит к задержке субтитров, что и нужно, когда они появляются слишком рано. Отрицательное число перемещает их раньше для субтитров, отстающих от диалога.
Измерьте ошибку, а не гадайте. Запишите временную метку, где фраза фактически была произнесена, и временную метку, где она появляется в данный момент, а затем используйте разницу. Две секунды — это 2000 ms.
Временные метки фиксируются на нуле. Ни SRT, ни WebVTT не могут представлять отрицательное время, и игрок, получивший такой сигнал, обычно отклоняет сигнал или ведет себя непредсказуемо. Таким образом, если вы сдвинете файл назад более чем на время начала первого сигнала, затронутые сигналы будут закреплены за 00:00:00, а не станут отрицательными - и инструмент точно сообщит вам, со сколькими вызовами это произошло. Если вы видите это предупреждение, возможно, ваше смещение слишком велико.
Масштабирование умножает каждую временную метку на постоянный коэффициент, что является правильным исправлением дрейфа.
Фактором является соотношение частот кадров. Преобразование субтитров, рассчитанных на 23.976 кадров в секунду, в видео 25 кадров в секунду означает умножение на 25 ÷ 23.976, примерно 1.0427. В противном случае используйте 23.976 ÷ 25, примерно 0.959.
Если вы не знаете частоту кадров, вы можете получить коэффициент из самого дрейфа: разделите правильное время последней строки на ее текущее время. Примените его, затем снова проверьте оба конца.
Объединение предназначено для материалов, которые были частично снабжены субтитрами — например, две половины фильма выпущены как отдельные файлы.
Сначала загрузите основной файл, затем выберите второй файл на панели слияния и задайте для него смещение. Смещение — это место начала второй части на объединенной временной шкале: если первая часть длится 58 минут и 20 секунд, смещение равно 3,500,000 ms.
Сигналы из обоих файлов объединяются и повторно сортируются по времени начала, поэтому результат всегда находится в правильном порядке, даже если смещение немного перекрывает два набора. Все перенумеровано с 1.
Разделение делает обратный процесс: один файл разделяется по выбранной вами временной метке.
По умолчанию вторая часть перебазируется, поэтому она начинается с нуля, и это то, что вам нужно, когда она будет воспроизводиться с отдельным видеофайлом, который также начинается с нуля. Сигналы назначаются на часть, содержащую время их начала, поэтому вызов, расположенный между точкой разделения, соответствует той части, с которой он начался, а не разрезается пополам.
Обе части загружаются одновременно с именами -part1 и -part2. Если выбранная вами точка разделения оставит одну часть пустой, инструмент сообщит вам об этом, а не создаст пустой файл автоматически.