Автогенерация субтитров с помощью Whisper
Захотелось посмотреть что-нибудь простенькое на сербском с сербскими субтитрами. (Внезапно) оказалось, что это тебе не русский, на котором есть все в 5 озвучках и с 10 видами субтиров скачать FullHD без регистрации и смс. Если озвучку еще можно найти, то субтитры — нереально (даже если искать, например, хорватский, который на 99% такой же).
Решил изменить подход — найти какую-нибудь утилиту для транскрибирования и автоматом перевести звук в текст. Ну это ведь сейчас каждая колонка умеет, правда же? *падме.жпг*. Почти сразу вышел на Whisper от OpenAI. Есть и другие варианты, но половина из них не поддерживает сербский, и многие заброшены.
Раз это ИсКуСтВеНый ИнТеЛеКт, то и задачку подберем поинтереснее — Сунђер Боб Коцкалоне! Там почти все гнусавые, но это ж ИИ, наверняка должен понимать контекст и все такое, а я этот мультик не смотрел никогда, проникнусь наконец богатым источником шаблонов для мемов…
На удивление, никаких токенов и регистраций для использования не нужно, все можно запустить локально. Установка скачивает пол-интернета, но зато утилита запускается элементарно:
whisper SundjerBob0101.mp4 --language Serbian --output_format srt --model large
На вход можно подавать сразу видео без промежуточной конвертации в аудио, а на выходе можно получить сразу субтитры с таймингами.
На выбор есть несколько моделей. Маленькая — вообще ни о чем, в средней даже я со своим уровнем “А минус 1” вижу косяки. Казалось бы, большая модель, да еще с явным указанием языка, должна работать хорошо (тем более что работает она весьма не быстро), но результат разочаровал. Некоторые фразы транскрибированы лучше, некоторые хуже по сравнению со средней моделью. В добавок к этому, местами текст пропадает совсем, местами появляются цифры, иероглифы или просто мусор. Текст постоянно переключается с кириллицы на латиницу (что считается неприличным). Самое разочаровывающее — есть слова, которых нет в языке вообще. Т.е. эта шляпа не просто не держит контекст, она даже по словарю не смотрит слова. Не получится взять субтитры за основу, чтобы поправить немного ошибок.
Тем не менее, даже с такими сгенерированными субтитрами я понимаю больше, чем просто на слух. Второй эксперимент я провел на Смешариках — там все получше, смотришь как с хреновыми субтитрами.
Еще я попробовал pyTranscriber, который использует Google API под капотом. Результат чуть похуже, но в разы быстрее. Но главный минус — не ставит тайминги, и результат — это просто текстовый файл.
В общем, распознавание речи выглядит все еще не до конца решенной проблемой.