Как я сделал приложение для автоматического перевода и дубляжа фильмов и интервью

[Это адаптированный перевод моей статьи из Medium]

Введение

Идея создания Redner пришла мне в голову, когда мы с женой долго не могли найти современные фильмы с переводом на русский. Это подтолкнуло меня создать приложение, которое бы само переводило и озвучивало любое видео и аудио-файлы: фильмы, интервью, подкасты. Так я создал Redner, который уже доступен в Google Play.

Вот пример, как Redner переводит с немецкого на испанский.

Как я сделал приложение для автоматического перевода и дубляжа фильмов и интервью

1. Выбор технологий

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

  • Transkriptor.com: Обеспечивает точную транскрипцию — важный первый шаг.
  • ChatGPT: Благодаря мощным возможностям NLP выполняет сложные переводы.
  • GCP Text-to-Speech: Позволяет легко озвучить переведенные тексты.
  • AWS: Предоставляет масштабируемую инфраструктуру для сложных задач.
  • Flutter: Гарантирует единый UI/UX на Android-устройствах с возможностью расширения.

2. Архитектура решения

Архитектура Redner выглядит следующим образом:

Некоторые базовые аспекты, иллюстрирующие как работает Redner
Некоторые базовые аспекты, иллюстрирующие как работает Redner

Такая схема обеспечивает бесперебойную обработку от загрузки до выдачи дубляжа с использованием средств автоматического масштабирования от AWS.

Взаимодействие с пользователем и загрузка файлов

Пользователь начинает с загрузки аудио- или видеоматериалов через API Gateway, защищенный AWS Cognito. Gateway вызывает Lambda-функцию, которая создает presigned URL. Этот URL используется клиентским приложением для загрузки файлов непосредственно в S3 bucket. Такой подход обеспечивает безопасность и эффективность данных, позволяя взаимодействовать с системой без прямого доступа к бэкенду.

Процесс транскрипции

После загрузки файлов запускается Lambda-функция, интегрированная с Transkriptor.com. Этот сервис обрабатывает аудио/видео и преобразует речь в текст. Качественная текстовая транскрипция критически важна для правильного перевода и дубляжа. Использование AWS Lambda опять же обеспечивает масштабируемость и снижение расходов при изменчивой нагрузке.

Перевод

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

Синтез речи

Переведённый текст сохраняется в S3 bucket, который триггерит запуск дубляжа с помощью GCP Text-to-Speech (и ChatGPT для некоторых языков). Lambda-функция синтезирует аудио-файл с речью для каждого предложения. Архитектура оптимизирована под качество и скорость синтеза, поддерживая работу с несколькими языками одновременно.

Синхронизация и вывод результата

Финальные файлы дубляжа собираются в S3 bucket и триггерят другую Lambda-функцию, которая синхронизирует звук с видеорядом. Финальный результат сохраняется в специальном бакете для выдачи пользователю.

3. Детали реализации

Настройка и конфигурация

Как уже было сказано, инфраструктура Redner построена вокруг сервисов AWS. Первым этапом было создание Cognito User Pool для аутентификации пользователей и безопасного подключения User Pool Client. Это обеспечивает удобный вход в приложение и ведение пользовательских сессий. Далее — настройка API Gateway для обработки пользовательских запросов и загрузки медиа. Gateway вызывает Lambda-функцию, создающую presigned URL для безопасной загрузки файлов в S3. S3 необходим для хранения MP3 и MP4, а его триггеры запускают дальнейшие этапы обработки.

Интеграция API

Интеграция внутренних и внешних API — основа Redner. Например, на первом этапе S3 веб-хук вызывает Lambda-функцию для транскрипции, та в свою очередь дергает Transkriptor.com, который переводит аудио-дорожку в текст. Transkriptor по завершению своей работы вызывает веб-хук Redner, который запускает Lambda-функцию перевода. Та, в свою очередь, изменяет состояние джобы (job) из транскрипции в перевод. Перевод осуществляется с пакетной обработкой текста, с использованием ChatGPT. Очередь, стоящая за API-гейтвеем, гарантирует стабильную производительность даже под высокой нагрузкой.

Алгоритмы синхронизации

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

1. Субтитры с временными метками: На этом этапе я генерирую SRT-файлы с разбивкой речи по времени.

2. Маппинг сегментов: Каждый перевод сопоставляется с конкретным интервалом оригинала, чтобы дубляж попадал во временные рамки.

3. Корректировка пауз: Алгоритм на этапе перевода позволяют менять длину пауз, сохранять темп и натуральность речи.

4. Точное сшивание аудиосегментов: Дублированные куски соединяются в финальном аудио, которое привязывается к тайм-кодам видео.

Такой многоэтапный анализ с точностью до миллисекунд обеспечивает максимально точную синхронизацию.

Тестирование и отладка

Многокомпонентная архитектура требует комплексного тестирования. Я написал Unit-тесты для каждой Lambda-функции. Интеграционные тесты проверяют корректную работу AWS-компонентов и сторонних API. В AWS CloudWatch ведутся подробные логи, отслеживается частота успешных вызовов, сбои из-за сети или лимитов.

Используя эти данные, я постепенно совершенствовал конфигурацию, улучшал надёжность и производительность.

4. Пользовательский интерфейс

Главный принцип клиентского приложения Redner — простота и интуитивность интерфейса. Приложение выполнено в минималистичном стиле. На главном экране "Мои переводы" отображаются загруженные видео- и аудио-файлы со статусами их обработки, такими как "распознаю речь", "озвучиваю" и т. д.

Пользовательский интерфейс приложения
Пользовательский интерфейс приложения

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

Ваши отзывы крайне важны для развития Redner. Пишите вопросы, предложения и замечания в комментариях!

5. Оптимизация и производительность

Минимизация затрат и повышение эффективности — ключевые задачи. Использование AWS Lambda обеспечивает автоматическое масштабирование и оплату только за фактические вычисления, без затрат на простаивающие серверы. S3 оптимизирован с помощью lifecycle-политик: данные автоматически переносятся в более дешёвые классы хранения по мере их устаревания. Эффективные паттерны доступа и минимизация дублирования данных тоже помогают оптимизировать расходы.

Для снижения latency (задержки) я реализовал асинхронную обработку везде, где это имело смысл: задачи транскрипции, перевода и озвучки запускаются параллельно по событиям (триггеры S3/Lambda), что позволяет минимизировать ожидание пользователя. Введены механизмы умных повторов (retry с exponential backoff) для гарантии устойчивости API-запросов даже при сбоях.

6. Сложности, с которыми я столкнулся

Технологические трудности

Основная проблема — интеграция разнородных API и сервисов (AWS Lambda, Transkriptor, ChatGPT, GCP Text-to-Speech). Требовалось аккуратное управление и синхронизация. Были сложности с лимитами и задержками сети, влияющими на задержку. Для борьбы с этим внедрены ретраи и оптимизированные асинхронные очереди.

Задачи синхронизации

Основной челлендж — синхронизировать треки дубляжа и видео-кадров. Решением стали точные временные данные из SRT и особые алгоритмы выравнивания аудио по кадровой сетке. Потребовалось много итераций и тестов, чтобы добиться близости звучания оригинала и дубляжа.

Выводы по тестированию

Тестирование выявило некоторую реальную боль пользователей. Например, сложность навигации по этапам обработки — из-за этого была переработана система статусов и интерфейс в целом. Глубокое юнит- и интеграционное тестирование помогло отловить баги ещё до релиза.

7. Развитие функционала

Расширение поддерживаемых платформ

В ближайшем будущем Redner выйдет не только на Android и iOS, но и в виде браузерного плагина. Прямо из браузера можно будет переводить медиафайлы, что, конечно, будет удобнее использования отдельного приложения. Планируется также интеграция с ОС для автоматического дубляжа любых аудиопотоков (например, YouTube и прочие стриминги).

Кастомизация голоса

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

Развитие B2B-сервисов

Redner попытается выйти на рынок B2B для киностудий и медиа-компаний: автоматический черновой дубляж фильмов для ускорения предпродакшна. Студии смогут оперативно получать и корректировать пробные версии дубляжа, что ускорит финальную подготовку контента.

Улучшения облачной инфраструктуры

В планах — дальнейшее совершенствование облачной архитектуры даже сверх существующих serverless-технологий, поиск новых решений для масштабирования.

Заключение

Redner помогает снизить языковой барьер, используя современные технологии. Он делает дубляж простым и доступным для всех.

Скачайте Redner, попробуйте перевод — и оставьте свой отзыв! Ваше мнение поможет сделать сервис лучше.

Дополнительные материалы

Документация AWS

Лучшие гайды по настройке и использованию AWS и serverless-архитектуре.

Google Cloud Platform (GCP)

Подробные туториалы по Text-to-Speech.

Transkriptor.com

Гайды и FAQ для работы с распознаванием речи.

Flutter Development

Полезные гайды и статьи для кроссплатформенной разработки.

Интеграция ChatGPT

Примеры интеграции OpenAI API.

Примеры serverless-проектов

Практические репозитории по AWS serverless.

Делитесь мыслями и полезными материалами в комментариях — вместе сделаем Redner лучше!

11