🎬 NullOfflineVideoTranslator

Полностью автономный продакшен-пайплайн для перевода любых видеороликов на 17 языков мира (русский, английский, испанский, японский и др.). Программа сама скачивает видео, вырезает музыку, распознает текст, переводит его с учетом сленга (через ИИ) и озвучивает клонированным голосом оригинального диктора, автоматически подгоняя звук под видеоряд без искажения тембра.
✨ Ключевые фишки (Что внутри?)
- ⬇️ Fail-Fast Download & Upload: Продвинутый Colab-интерфейс. Позволяет мгновенно загрузить свой .mp4 файл напрямую с ПК или скачать видео с YouTube через yt-dlp. Если YouTube заблокирует запрос, скрипт выдаст ошибку за 5 секунд, сэкономив вам 3 минуты времени на установку.
- 🌍 Multi-Language Architecture: Автоматически определяет язык оригинала и переводит на любой из 17 поддерживаемых языков (целевой язык задается одной кнопкой в интерфейсе).
- 🎵 Studio-Grade Separation (Demucs): Изоляция голоса. Нейросеть физически отделяет фоновую музыку, басы и эффекты от человеческой речи, чтобы транскрибация была идеальной.
- 📝 Forced Alignment (WhisperX): Сверхбыстрое распознавание текста с автоматическим определением языка оригинала. Привязывает каждое слово к миллисекундам на таймлайне.
- 🧠 Context-Aware Translation (Gemini Flash): LLM-перевод целыми батчами. Идеально переводит геймерский сленг, мемы и нецензурную лексику без потери контекста. Поддержка балансировки ключей!
- 🗣️ Zero-Shot Voice Cloning (XTTSv2 ONNX INT8): Клонирование голоса оригинального диктора. Жёстко оптимизировано: модель занимает всего 360 МБ и не переполняет VRAM.
- ⏱️ Smart Time-Stretching (Rubberband Phase Vocoder): Студийный алгоритм выравнивания времени. Если русский перевод оказался длиннее английского оригинала, алгоритм плавно "сжимает" аудиоволну без изменения высоты голоса (эффект "бурундуков" полностью исключен).
- 🎚️ Dynamic Audio Leveling & Assembly: Умный микшер pydub. Приглушает музыку до -14 dBFS и выводит голос на -8 dBFS. В конце Colab выдает интерактивную HTML-кнопку для скачивания готового видео.
🚀 Как запустить (Google Colab - Рекомендуется!)
Если вы не хотите ждать часы на слабом процессоре, запустите скрипт на мощных бесплатных серверах Google:
- Откройте файл NullOfflineVideoTranslator.ipynb в Google Colab (нажав на бейдж выше).
- В верхнем меню выберите Среда выполнения -> Сменить среду выполнения -> T4 GPU.
- Заполните токены, выберите язык перевода (например, ru) и источник видео.
- Нажмите кнопку Play (▶️).
- Если выбрали локальный файл, появится кнопка для его загрузки.
- Заварите кофе ☕. Когда скрипт закончит, внизу появится огромная зеленая кнопка "СКАЧАТЬ ВИДЕО"!
В самом низу блокнота Colab есть подробная инструкция со ссылками о том, где бесплатно взять токены HuggingFace и Gemini.
💻 Как запустить локально (На своем ПК)
Убедитесь, что у вас установлен Python (скрипт поддерживает современные версии), ffmpeg и rubberband-cli (для умного растяжения звука).
Запустите скрипт установки, который сам создаст виртуальное окружение и пропатчит все конфликты библиотек:
Warning
Дисклеймер по требованиям (Локальный запуск):
Этот проект использует тяжелые нейросети. При первом запуске скрипт скачает веса моделей. Убедитесь, что у вас есть свободное место:
- WhisperX (Транскрибация) — ~2 ГБ
- XTTSv2 (Клонирование голоса) — ~3 ГБ
- Demucs (Разделение вокала) — ~200 МБ
- DeepFilterNet (Опционально, шумодав) — ~100 МБ (+ сама библиотека тянет PyTorch на ~3 ГБ)
- Итого нужно места на диске: ~8-10 ГБ.
- Итого нужно VRAM (Видеопамяти): ~4 ГБ (модели подгружаются и выгружаются из памяти по очереди, а не все разом).
Шаг 2: Настройка секретов
В корне проекта скопируйте .env.example в .env и впишите свои ключи:
HF_TOKEN=hf_ВАШ_ТОКЕН_ОТ_HUGGINGFACE
GEMINI_API_KEYS=AIzaSy_ВАШ_КЛЮЧ_1, AIzaSy_ВАШ_КЛЮЧ_2
Important
Разрешения HuggingFace: Для корректной работы разделения голосов (диаризации) с вашим HF_TOKEN, вам необходимо зайти на HuggingFace и принять лицензионные соглашения на страницах следующих моделей (нажать Agree / Accept):
Просто скормите скрипту любую ссылку на YouTube и укажите язык (например, ru или ja):
./run.sh "https://www.youtube.com/watch?v=dQw4w9WgXcQ" "ru"
Скрипт умный: если он прервется, при следующем запуске он не будет переводить уже готовые куски, а продолжит с места остановки.