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

Синхронизировать субтитры по звуку

Медиа на входеСинхронизация по звуку

При первом запуске скачивается видео движок — около 31 МБ с этого сайта; дальше его кэширует браузер. Он нужен только чтобы прочитать звуковую дорожку; субтитры сверяются с самим звуком, без речевой модели и без загрузки.

Параметры

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

Страница исправляет субтитры, которые стоят в правильном порядке, но в неправильное время: на входе две вещи — файл субтитров и видео или звук, к которому он относится, — и она вычисляет, насколько текст уехал, а затем пишет файл заново со сдвинутыми репликами. Сдвиг в несколько секунд приходит от подрезки и логотипов, а расхождение, которое растёт через весь фильм, — от несовпадения частоты кадров: мастер 23,976 кадра в секунду с субтитрами под 25 кадров даёт к концу первого часа ошибку уже в полторы минуты.

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

При хорошем выравнивании выходят два файла, потому что они отвечают на разные вопросы: исправленные субтитры в исходном формате с именем film.synced.srt и небольшой текстовый отчёт со сдвигом в миллисекундах, применённым отношением, счётом, уверенностью и строкой о том, трогали ли файл вообще; отмена во время анализа действует к следующему шагу, а не мгновенно, потому что декодирование и поиск — это короткие неразрывные вызовы.

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

Чем измеренный сдвиг отличается от фиксированного смещения, которое я вписываю на странице сдвига?

Страница сдвига применяет число, которое вы уже знаете, поэтому остаётся верной независимо от того, согласен ли с ним звук. Эта страница идёт с другого конца: она исходит из того, что числа вы не знаете, читает речевую активность из звука и решает сдвиг и изменение скорости вместе. Поэтому она умеет исправить проблему частоты кадров, которую не выразить одним смещением: при 25 против 23,976 ошибка в начале нулевая и растёт примерно на 3,6 секунды в час, так что сдвиг, который вылечит начало, испортит конец.

Почему страница иногда вообще отказывается записывать новый файл субтитров?

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

Что означает отношение в отчёте при несовпадении 23,976 и 25 кадров в секунду?

Времена реплик умножаются на отношение и затем сдвигаются на смещение, поэтому отношение 1,0427 значит, что субтитры размечались под более быструю кадровую основу и каждую реплику нужно растянуть позже. Страница пробует оба направления каждой обычной пары, потому что то, какое из них читается, зависит от того, какой файл у вас в руках: 1,0427 и 0,9590 — одно и то же несовпадение, увиденное с двух концов. Если в отчёте отношение 1,000000, а смещение меньше кадра, файл уже совпадает и остаётся нетронутым.

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

Меняются тайминги, а больше ничего. Субтитры разбираются в то же внутреннее представление, что и на остальных страницах сайта, начало и конец каждой реплики переписываются, и файл сериализуется обратно в тот формат, в котором пришёл. Оформление ASS, позиционирование и встроенные теги уцелевают, как и собственная структура файла — поэтому .ass на входе даёт .ass на выходе, а не сплющенный .srt. Единственное видимое исключение — реплика, сжатая большим отношением до меньше чем миллисекунды: она удерживается на одной миллисекунде и считается в списке потерь.

Работает ли это, когда субтитры на одном языке, а звук на другом?

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

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