Нейросеть должна была находить мат в видео. Вместо этого она начала его выдумывать
Мне скидывают видосы. Смешные, но мат через слово. Ни показать никому, ни выложить.
Ок, думаю, запикаю руками. Открыл CapCut. Слушаю, пауза, отмотал назад, нашёл где начинается слово, вырезал, бип, подогнал. Одно слово. Следующее. Ещё. И вот то, которое пропустил, потому что тихо.
Двухминутный ролик. Двадцать минут ковыряния.
2024 год. Нейросети генерят видео, пишут код — а я на таймлайне ищу, где человек сказал «бл***».
Мысль сделать сервис для этого была давно. Но я фронтендер. Каждый раз думал «надо бы» и переключался на что-нибудь попроще, потому что даже не представлял, с какой стороны к этому подойти.
А потом наступили новогодние каникулы
Все отдыхают, я сижу с ноутбуком. Решил — ладно, попробую, хуже не будет. За неделю собрал MVP. Кривой, половина кейсов падала, но базовый сценарий работал: кидаешь файл, оно распознаёт речь, находит мат, вставляет бипы.
Первый раз прогнал через него тот самый видос и в нужном месте услышал бип вместо мата. Знаете это чувство, когда что-то, что ты написал, впервые реально работает? Вот это оно.
Дальше, конечно, выяснилось, что от MVP до чего-то рабочего — пропасть. Но процесс затянул.
Про русский мат
Это самая интересная техническая часть, я не ожидал.
Первая мысль была — ну, захардкожу список матерных слов, буду проверять каждое распознанное слово. Делов-то.
Ага.
В русском языке 4 матерных корня. Четыре. А словоформ от них — больше 5000. Берём один корень из трёх букв: х**вый, х**ня, ох**ть, прих**чить, зах**чить, однох**ственно... Каждое ещё склоняется по падежам, родам, числам. И люди постоянно придумывают новые.
Список не спасает. RegEx тоже — или пропускаешь, или ловишь ложные срабатывания.
Пришлось делать нормальный морфологический анализ: каждое слово раскладывается до корня, корень проверяется по базе. Это ловит вообще любую форму, даже выдуманную на ходу.
Кстати, я пока разбирался в этом, узнал про русский мат больше, чем за всю предыдущую жизнь. Прямо целое исследование провёл.
Нейросеть, которая ругается сама
Отдельный прикол — галлюцинации. Нейросеть распознаёт речь и периодически «слышит» слова, которых в аудио не было. И почему-то часто — именно нецензурные.
В записи тишина. В транскрипте — слово из трёх букв. Откуда? Непонятно.
Пришлось писать детектор галлюцинаций. Код, который проверяет, не выдумывает ли нейросеть ругательства. Я когда это делал, сам не мог поверить, что это реальная задача, которую надо решать.
Баги, которые запомнились
Их было много, но вот те, от которых я прям сидел и не понимал, что происходит.
Однажды кто-то загрузил длинный файл, где мата было очень много. FFmpeg-команда для вставки всех бипов стала настолько длинной, что операционная система отказалась её запускать. Ошибка E2BIG — «argument list too long». Я не знал, что у ОС вообще есть такой лимит.
Ещё: когда заглушаешь кусок аудио, на стыке слышен щелчок. Резкий обрыв волны. Надо делать плавное затухание. Казалось бы, элементарная вещь — но я подбирал параметры fade несколько дней, прежде чем перестало щёлкать.
Вертикальные видео роняли сервер. OOM. Оказалось, портретные ролики при обработке жрут кратно больше памяти. Отдельно спасибо всем, кто снимает вертикально.
Ну и классика: обработанное видео не играло в Firefox. Два дня дебага. Причина — цветовое пространство YUV444 вместо YUV420. До этого проекта я не знал, что такое «цветовое пространство видео». Теперь знаю. Мог бы и не знать.
Что вышло в итоге
Сервис, который делает за полминуты то, на что у меня уходило двадцать минут. Загружаешь файл, получаешь версию без мата. Есть режим для песен — нейросеть отделяет вокал от музыки, потом анализирует текст. Можно кинуть ссылку на YouTube вместо файла.
Кто этим пользуется
Думал, буду я один. Кинул друзьям, те — своим.
Больше всего пользуются нарезчики — люди, которые клипуют моменты из стримов и интервью. У них поток: десятки коротких нарезок, в каждой мат, вручную обрабатывать нереально.
Самый неожиданный кейс — суды. Мне в телеграм-чат несколько раз писали, что используют сервис для подготовки аудиозаписей к судебным заседаниям. Есть запись разговора, её нужно приобщить к делу, а там мат. Я даже не думал, что такая проблема существует.
Ну и люди, которые просто хотят чистую версию песни или видоса для себя. С этого всё и начиналось.
Про «я же фронт»
Оглядываясь назад — самым сложным было начать. Не Docker, не FFmpeg, не нейросети. А сесть и написать первую строчку бэкенда, когда до этого всю карьеру писал фронт.
Потом оказалось, что разбираться по ходу — нормально. Больно, но нормально. Гуглишь, ломаешь, чинишь, опять ломаешь. За этот проект я узнал столько, сколько не узнал бы за годы работы в зоне комфорта.
И ещё одна штука, которая удивила: для русского языка инструментов нет. Вообще. Для английского — SaaS на любой чих. А на русском — пустота. И это не только про цензуру мата.
Если хотите потыкать — videocensor.ru
Если есть вопросы про техническую часть или про то, каково это — фронтендеру лезть в бэкенд — спрашивайте.