Приложение будет работать на Tauri https://v2.tauri.app/start/ (Rust + веб-технологии), что позволяет создавать кроссплатформенные нативные приложения для macOS и Windows. Пользователь вводит ссылку на YouTube-видео, выбирает исходный и целевой языки, а приложение:
- Скачивает аудио и видео с помощью утилиты yt-dlp (https://github.com/yt-dlp/yt-dlp).
- Распознаёт речь из аудио с помощью модели Whisper, сохраняя результат в формате VTT.
- Переводит текст субтитров через OpenAI API (с разбивкой на временные метки для повышения качества перевода).
- Генерирует озвучку переведённого текста с помощью text-to-speech (например, OpenAI TTS или другой подходящей утилиты).
- Интегрирует переведённую аудиодорожку и субтитры в исходное видео с помощью ffmpeg.
- Автоматически управляет утилитами: скачивает и обновляет yt-dlp и ffmpeg при необходимости.
-
Пользовательский интерфейс (UI):
- Разработка интерфейса с использованием веб-технологий (HTML/CSS/JS) на Vue 3 и Vite в рамках Tauri.
- Поля для ввода ссылки, выбора языков, указания папки для сохранения и отображения прогресса.
-
Бэкэнд на Rust:
- Основная логика управления процессами (запуск внешних утилит, вызов API и т.д.).
- Модуль для проверки и загрузки обновлений yt-dlp и ffmpeg. Можно использовать HTTP-запросы к официальным репозиториям для получения информации о последних версиях.
- Асинхронное выполнение команд и последовательное обновление статуса, который передается в UI.
-
Внешние утилиты:
- yt-dlp: для скачивания аудио и видео. Его можно запускать через стандартный механизм запуска внешних процессов в Rust.
- ffmpeg: для объединения видео с новой аудиодорожкой и субтитрами.
- Whisper: для распознавания речи. Можно либо использовать локально установленную версию, либо вызвать через Docker-контейнер, если есть такая возможность.
- OpenAI API: для перевода текста и, возможно, для text-to-speech (если модель TTS от OpenAI соответствует требованиям).
-
Обработка и конвертация:
- Извлечение аудио: после скачивания аудио через yt-dlp.
- Распознавание: передача аудио в Whisper для получения исходных субтитров (VTT).
- Перевод: разбиение субтитров на логичные фрагменты (по временным меткам) и отправка их в OpenAI API для перевода.
- Генерация озвучки: текст-to-speech синтез переведенного текста с сохранением аудиофайла.
- Финальная сборка: использование ffmpeg для интеграции нового аудио и субтитров в исходное видео.
-
Автоматическое обновление утилит:
Приложение должно проверять версии yt-dlp и ffmpeg при запуске. Если обнаруживается новая версия, приложение должно скачивать и заменять устаревшую утилиту. Это можно реализовать через запросы к GitHub API или официальным сайтам проектов. -
Асинхронная обработка и логирование:
Разбиение процесса на этапы с асинхронными вызовами позволяет отображать прогресс выполнения (например, "скачивание аудио...", "распознавание речи...", "перевод...", "генерация озвучки...", "сборка финального файла..."). -
Обработка ошибок:
Надежное управление ошибками на каждом этапе — от проблем с сетью до ошибок при вызове внешних утилит — обеспечит стабильность работы приложения. -
Оптимизация перевода:
Разбиение субтитров по временным меткам и отправка их частями в OpenAI API позволит добиться более качественного перевода, а также уменьшить нагрузку на API и снизить затраты.
-
Пользовательские настройки:
Возможность выбора дополнительных параметров, таких как качество видео, параметры TTS (например, выбор голоса), а также настройки по форматированию субтитров. -
Локальное распознавание и перевод:
Для пользователей, заботящихся о конфиденциальности или не имеющих стабильного интернета, можно рассмотреть локальную обработку (например, запуск локального сервера для Whisper). -
Интеграция с облачными сервисами:
Если потребуется масштабирование, можно интегрировать облачные функции для обработки видео, что особенно актуально для больших файлов.
Пример кода для реализации многих функций можно взять из репозитория https://github.com/thewh1teagle/vibe