erm: локальная утилита, вычищающая слова-паразиты из записей речи

Утилита erm запускается одной командой (uvx erm input.wav) и возвращает очищенный звук плюс JSON со списком вырезанных фрагментов, работая полностью локально. Наивный подход проваливается сразу по трём причинам: Whisper часто вообще не включает слова-паразиты в транскрипт, потому что обучался на причёсанной прозе; произвольные обрезки дают слышимые щелчки на стыках; а несовпадение фонового шума делает склейки заметными. Поэтому простое «нашёл токен, вырезал» не годится.

Детекция идёт в четыре прохода: транскрипция Whisper для очевидных паразитов, поиск по паузам для тех, что модель проглотила, разбиение слов для паразитов, слипшихся с соседними словами, и детекция протяжных гласных. Дальше точки реза сдвигаются к тишине и привязываются к пересечениям нуля, применяются масштабируемые кроссфейды (50, 120 мс), а под склейку подкладывается room tone, маскирующий перепады фона. По умолчанию используется faster-whisper с моделью medium.en (или large-v3 для лучшего отлова), концы реза могут смещаться до 60 мс, осколки короче 120 мс схлопываются, а гибридный режим детектит по оригиналу, но режет уже из шумоподавленной версии.

Ключевые факты

  • erm это локальная CLI: на выходе чистое аудио и JSON со списком резов
  • Whisper часто опускает паразиты, так как обучен на чистой прозе
  • Наивная обрезка даёт щелчки и заметные перепады фонового шума
  • Четыре прохода детекции: транскрипт, паузы, разбиение слов, протяжные гласные
  • Чистый звук стыков: привязка к нулю, кроссфейды 50, 120 мс, подкладка room tone

«Whisper сам по себе вырезает паразиты, потому что почти все его обучающие транскрипты это чистая проза.»

— автор erm