66 lines
3.4 KiB
Python
66 lines
3.4 KiB
Python
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()
|