Загрузка 0
ПОДЕЛИТЬСЯ

Мой блог

Листай вниз

Как работает дубляж видео и почему Whisper ошибается в проде

Как работает дубляж видео и почему Whisper ошибается в проде

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

Первый этап любого проекта по автоматической обработке медиаконтента — это подготовка входных данных, извлечение звука и первичное распознавание. В этом материале я подробно разберу, как устроен вход конвейера, с какими трудностями я столкнулся при разработке и почему стандартные инструменты вроде Whisper требуют серьезной доработки напильником.

Как работает дубляж видео и почему Whisper ошибается в проде
Как работает дубляж видео и почему Whisper ошибается в проде

Что происходит на входе конвейера

Пользователи загружают файлы в форматах MP4, MOV, MP3, WAV или передают прямые ссылки на YouTube. В случае с видеохостингом я использую утилиту yt-dlp для скачивания роликов в разрешении 720p — этого более чем достаточно, так как исходное видео не подвергается перекодированию, а в финале происходит лишь замена аудиодорожки. С помощью инструмента ffmpeg из файла извлекается MP3-аудио, а из видеопотока удаляются лишние звуковые дорожки командой -c:v copy -an, оставляя чистый контейнер для будущей работы.

Реклама

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

Разделение голоса и музыкального сопровождения

Прежде чем отправить аудиопоток на этап распознавания речи, я пропускаю его через модель Demucs, которая разделяет дорожку на чистый вокал и фоновый шум с музыкой. Такой подход продиктован двумя важными причинами. Во-первых, модель Whisper демонстрирует гораздо более высокую точность на изолированном вокале, особенно когда речь идет об intro-фрагментах вебинаров, где спикер вещает поверх громкой музыкальной заставки.

Во-вторых, оригинальный акустический фон необходим на финальной стадии сведения. Переведенный голос накладывается не на абсолютную тишину, а на подложку с фоновыми шумами и звуками зала, что избавляет аудиотрек от неприятного эффекта «разговора из бункэра». На выходе формируются два файла: вокал и фоновая дорожка. Громкость вокала сохраняется на уровне 0.25 в качестве отдельной опции оригинального звука, позволяя пользователям подмешивать исходный голос спикера под новый дубляж по аналогии с классическими закадровыми переводами.

Архитектура распознавания и резервные каскады

Основной процесс распознавания речи выполняется на собственной серверной ноде, оснащенной видеокартой A4000. В качестве рабочего инструмента используется связка whisperX с моделью large-v3-turbo, дополненная пословным выравниванием и диаризацией через pyannote. Такая конфигурация обеспечивает высокую скорость и экономичность до тех пор, пока сервер функционирует стабильно.

Если серверная нода оказывается перегружена или временно недоступна после обновлений, задача автоматически перенаправляется по заранее настроенному каскаду. Сначала запрос уходит к моделям на платформе Replicate, а в случае их отказа подключается сервис Gladia в качестве финального рубежа обороны. Для специфических языков логика распределяется отдельно: казахский язык обрабатывается через Gladia из-за ограничений whisperX, а для хинди применяется faster-whisper с нативными таймкодами.

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

Три главные ловушки галлюцинаций в Whisper

Проблема галлюцинаций нейросети Whisper в продакшене проявляется в виде вполне конкретных багов, для устранения которых в коде сервиса прописаны три защитных правила:

Реклама
  • Слова аномальной длины свыше 50 символов удаляются полностью.
  • Зацикленные повторяющиеся подстроки выявляются по частоте встречаемости в окне и отправляются на исправление в языковую модель.
  • Короткие обрывки короче трех символов или сегменты без спикера отбрасываются автоматически.

Так называемые «слова-монстры» вроде бесконечных повторов одинаковых букв или слогов появляются на длинных паузах, музыкальных фрагментах или аплодисментах. В живой человеческой речи подобных конструкций не существует, поэтому правило удаления слов длиннее 50 символов работает безотказно. Зацикленные фразы вроде бесконечного повторения одного выражения ловятся с помощью анализа окна в 130 символов: если первые 10 символов повторяются в тексте пять и более раз, срабатывает защитный алгоритм.

Обнаруженный зацикленный фрагмент передается в языковую модель с инструкцией оставить первое осмысленное вхождение и убрать мусор. Если LLM не справляется с нормализацией, весь сегмент получает специальную пометку и исключается из озвучки, подсвечиваясь в редакторе красным маркером. Подобная страховка гарантирует, что зритель услышит небольшую паузу вместо бесконечного зацикленного бреда голосом искусственного лектора.

Формирование и фильтрация текстовых сегментов

Стандартный вывод сегментов от Whisper непригоден для прямого перевода и озвучивания, поскольку границы этих сегментов определяются размером окна декодера, а не логикой человеческой речи. Для корректной укладки в тайминг сервис извлекает из ответа нейросети исключительно слова с таймкодами, после чего собирает предложения заново по собственным алгоритмам.

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

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

Обработка сплошного текста без знаков препинания

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

Для преодоления этой трудности длинные сегменты текста вместе со всеми таймкодами передаются в языковую модель. Задача LLM заключается в расстановке знаков препинания, разбитии длинного монолога на логические предложения и пересчете меток времени для каждого фрагмента на основе исходных слов. Если модель возвращает некорректный ответ, срабатывает резервный сценарий со сжатием текста без потери общего смысла.

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

Реклама
01.