Опубликован код утилиты subsync (https://github.com/smacke/subsync), обеспечивающей автоматическую синхронизацию субтитров с видео. Утилита позволяет откорректировать момент показа текста, синхронизировав его с началом произношения фраз. Код написан на языке Python и распространяется (https://github.com/smacke/subsync) под лицензией MIT. Подготовлен патч (https://github.com/smacke/subsync/raw/master/subsync-vlc.patch) для интеграции с мультимедийным проигрывателем VLC. Для обработки видео используется FFmpeg, для разбора субтитров применяется библиотека srt (https://pypi.org/project/srt/), а для выделения речи модуль
py-webrtcvad (https://github.com/wiseman/py-webrtcvad).
Проект не привязан к конкретным языкам и базируется на сопоставлении абстрактных текстовых данных с выделенными фрагментами речи. Алгоритм синхронизации вначале выполняет дискретизацию видео и субтитров с разбиением на отрывки продолжительностью 10 мс. Далее для каждого отрывка определяется наличие речи: для видео задействован применяемый в WebRTC алгоритм определения наличия речи VAD, а для субтитров формируется раскладка на основе указанных временных меток. В итоге формируется два ряда, в которых каждый отрывок с речью отмечен 1, а без речи - 0. На последнем этапе осуществляется сопоставление двух полученных рядов и корректировка смещения с использованием быстрого преобразования Фурье (FFT).
URL: https://github.com/smacke/subsync
Новость: https://www.opennet.dev/opennews/art.shtml?num=50284
Скачиваешь с торрентов сериальчик на ангельском. Он оказывается записью с ТВ с неаккуратно вырезанной ТВ-рекламой (секунды 3 рекламы например остаются невырезанными). Идешь скачивать отдельно субтитры на русском. А у них время оказывается синхронизировано для записи с ТВ, осуществленной другим человеком, который рекламу вырезал более аккуратно (или менее аккуратно). В итоге, просматривая сериальчик, постоянно жмешь +delay / -delay. Этот питонопроект поможет в этой ситуации?
Нет, потому что речь на английском будет и синхронизация слетит.
Почитал описание алгоритма на гитхабе, вроде должно работать, во всяком случае если продолжительности титров примерно совпадают с продолжительностью реплик
Да не будет оно работать. Оно работает только на сферическом коне в вакууме. Любой посторонний шум (машина проехала, речь в фоне, звон посуды) к xерам ломает их "алгоритм".
Это для фильмов, в которых речь, музыка, эффекты разделены по каналам. Т.е. эта утилита работает с каналом речи только. Это не для сграбленных видео, где все в одном канале.
> продолжительности титров примерно совпадают с продолжительностью репликДля перевода это условие не выполняется
Смотря как перевод делали. Ведь продолжительность показа титра не обязана сильно коррелировать с количеством текста в нём. Т.е. оно конечно хорошо бы чтобы коррелировало, но далеко не всегда сабы бывают сделаны с учётом всех «хорошо бы»
Да, таких очень мало, т.к. обычно переводят по готовым английским субтитрам. :-)
Но в описании сказано "language-agnostic automatic synchronization".
Правильно, ему без разницы, какой язык речи и субтитров - можно английский, можно русский, можно любой другой. Но совпадать-то они должны, чтобы попадать друг в друга по длительности.
В этом конкретном случае проще и лучше обычно скачать у того, кто клепал субтитры.Иногда бывает, что в одной раздачи субтитры есть, но качество ужасное, поэтому приходится качать еще и нормальный рип, но не всегда субтитры подходят для него...
> Этот питонопроект поможет в этой ситуации?В общем, я только что потестил на разных файлах и походу оно делает нормальный ретайминг только в том случае, если нужен delay всех строк сразу (например, с самого начала и до конца на n sec назад или вперед). С этим оно справилось. Но на файлах с рекламными вставками, там где delay нужно было делать дважды (до и после рекламы), началась разножопица.
Жаль, но вообще, вставки можно и вырезать, а это проще сделать бывает, чем подгонять субтитры вручную. Для релизера. Мне было бы лень так заморачиваться, если честно. :-)
Есть множество редакторов субтитров, которые это позволяют сделать в один клик - поправляют тайминги всех последующих субтитров по сдвигу одного.
В этом случае и править ничего не надо, достаточно задать delay в видеоплеере, к сожалению, для многих сабов это не работает или работает плохо.
В некоторых редакторах можно сдвинуть на n секунд не только все титры разом, но и все титры до/после заданного титра. Это помогает если рассинхрон появляется в середине фильма
Это сложно определить, да и часто бывает, что рассинхрон постоянный. Например, я устанавливаю delay, базируясь на первой реплике в фильме, но это не исправляет вторую, третью и т.д.
Дык это. Выравниваешь все титры по первому, проверяешь парочку после него, если там всё ок то смотришь что в конце фильма. Если там есть рассинхрон то смотришь что есть-ли рассинхрон в середине, нарастает-ли он постепенно или появляется в некоторый момент. Прогрессирующий рассинхрон (бывает из-за разницы FPS) в некоторых редакторах можно править автоматически, если рассинхрон появляется единовременно то точку его появления легко найти «бинарным поиском». Не особо сложно, особенно по сравнению с ручной расстоновкой таймингов
дык сабж вроде бы и предназначен для того, чтобы не заморачиваться со всеми перечисленными манипуляциями, а просто прогнать все сабы из текущего каталога через этот subsync и на выходе получить сабы с исправленными таймингами; вот только с поставленной задачей оно не справляется
Тут весь тред уже не про сабж, а про менее автоматические альтернативы ему
aegisub в помощь. Сам пользуюсь еще с бородатых - для любителей бурятских мультиков, штука незаменимая (ибо тайминги могут варьироваться в зависимости от рипера). Брат жив, зависимость есть.
Для автоматического ретайминга субтитров под разные релизы ещё есть https://github.com/tp7/Sushi
> Далее для каждого отрывка определяется наличие речитакже не будет работать для субтитров, которые составлялись видимо либо для глухих, либо для просмотра в публичных местах без звука; т.е. таких субтитров, где встречаются всякие там "[стук в дверь]", "[апплодисменты]" и т.д. А также переводы надписей.
Нужность проекта для отечественного пирата к сожалению никакая.
Написать утилиту, которая будет сопоставлять SDH и простые субтитры куда проще (достаточно школьных знаний)
В большинстве субтитров нет ни того, ни другого. Переводы надписей (кроме названия фильма) обычно только в форсированных, а звуки обозначают только в субтитрах для глухих.
> Переводы надписей (кроме названия фильма) обычно только в форсированныхДа неужели? А в полных субтитрах надписи переводить не нужно?
Но не так уж часто это делают, и не всегда они есть вообще.Хотя, понятно, что перевода даже одной надписи, скорее всего, достаточно, чтобы такая автоматическая синхронизация поехала.
Думаю научить утилиту игнорить титры которые не удалось сопоставить с куском речи (и куски речи которые не удалось сопоставить с титрами) относительно не трудно. Хотя я не очень понял как именно сабж сопоставляет титры кускам речи, так-что хз.
Кстати, еще бывает текстовая реклама в субтитрах.
Он берет титры в которых уже есть время и аджактит их на время тишины.
Вот я не особо понял как именно он аджактит
Там где тишина нет субтитров. Там где звук двигай ближайшие титры из файлы с титрами.
> Но не так уж часто это делают, и не всегда они есть вообще.я чаще встречаю наличие полных/форсированных на выбор или только полных
Да, я тоже, но я имел ввиду, что не всегда надписи есть в фильмах.
Зачем эти новости про чьи то экспериментальные проект. Или тут репостить все из гитхаб трендинг?
Пущай пишуть.
Только собрался заняться диаризацией, которую подсказали тут:
https://www.opennet.dev/openforum/vsluhforumID3/116144.html#51Так не те - уже всё готово. Хотя лишь более простой вариант: вместо детектирования разных голосов, только факт наличия речи.
Долго ты собирался.
Ну, как известно, не лезь поперед батьки в пекло.