feat: mvp

This commit is contained in:
h
2026-02-01 16:07:59 +01:00
commit 4ef769597a
20 changed files with 3566 additions and 0 deletions

65
dubbing/config.py Normal file
View File

@@ -0,0 +1,65 @@
from pydantic_settings import BaseSettings
from pathlib import Path
class TTSConfig:
"""Language-specific TTS configuration."""
# Russian: Silero v4_ru
RU_ENGINE = "silero"
RU_SAMPLE_RATE = 48000
RU_VOICE = "xenia"
# English: Edge TTS
EN_ENGINE = "edge-tts"
EN_VOICE = "en-US-GuyNeural"
class TranslationPrompts:
"""Language-specific translation prompts."""
RU = """Ты переводчик субтитров с китайского на русский.
Переводи точно по смыслу, но со слегка необычным выбором слов:
- Используй чуть более формальные или технические синонимы для глаголов, с шансом 1/10
- Например: "получить""обрести", "сказать""произнести"
- НЕ используй архаизмы
- Не добавляй лишних слов, переводи компактно
- Иногда используй причастные обороты вместо придаточных
- ОБЯЗАТЕЛЬНО используй букву ё везде где нужно (её, ещё, всё, моё, твоё, зелёный и т.д.)
- Глагол to be НЕ переводи буквально: "I am happy""я счастлив" (НЕ "я есть счастлив")
ВАЖНО: Все числа пиши словами (например: "42""сорок два", "1000""одна тысяча")."""
EN = """You are a subtitle translator from Chinese to English.
Translate naturally, keep conversational style.
IMPORTANT: Write all numbers as words (e.g., "42""forty-two", "1000""one thousand")."""
# Two-stage translation: Chinese -> English -> Russian
EN_RU_STAGE1 = """You are a subtitle translator from Chinese to English.
Translate naturally, keep conversational style.
IMPORTANT: Write all numbers as words (e.g., "42""forty-two", "1000""one thousand")."""
EN_RU_STAGE2 = """Ты переводчик субтитров с английского на русский.
Переводи МАКСИМАЛЬНО ДОСЛОВНО, слово в слово:
- Сохраняй порядок слов как в английском где возможно
- Переводи идиомы буквально (например: "break a leg""сломай ногу")
- НЕ адаптируй под русский язык, просто переводи каждое слово
- НЕ используй архаизмы
- ОБЯЗАТЕЛЬНО используй букву ё везде где нужно (её, ещё, всё, моё, твоё, зелёный и т.д.)
- ИСКЛЮЧЕНИЕ: глагол to be НЕ переводи как "есть/является": "I am happy""я счастлив" (НЕ "я есть счастлив")
ВАЖНО: Все числа пиши словами (например: "42""сорок два")."""
class Settings(BaseSettings):
gemini_api_key: str = ""
projects_dir: Path = Path(__file__).parent.parent / "projects"
original_volume_db: int = -20
tts_sample_rate: int = 48000
tts_voice: str = "xenia"
max_speedup: float = 3.0
translation_chunk_size: int = 100
translation_concurrency: int = 20
model_config = {"env_file": ".env", "env_file_encoding": "utf-8"}
settings = Settings()