Conversión de video chino a doblaje en inglés
Convierte videos chinos de habla directa en videos finales doblados al inglés: clona la voz del hablante original, reescribe el guion para compradores internacionales y genera un solo MP4.
Un solo comando
cd "<raíz del proyecto>"
$env:MINIMAX_API_KEY = "<Clave de MiniMax China>"
$env:VOLC_API_KEY = "<Clave de API de Volcengine>"
.\venv\Scripts\python.exe scripts\dub.py --src "<ruta del video>" --slug "<nombre corto>"
Productos:
| Ubicación | Contenido |
|---|---|
out/<nombre corto>_EN_dubbed.mp4 | Video final (única entrega) |
out/<nombre corto>_EN.srt / _ZH.srt | Subtítulos en chino e inglés |
work/batch/<nombre corto>/REPORT.md | Tiempo empleado, rondas de síntesis, costo |
Parámetros comunes: --until translate (solo generar guion, sin sintetizar), --from fit (comenzar desde cierta etapa), --force (ignorar estado guardado).
Seis etapas
1 prep Extraer audio + separación de voz Demucs + registrar duración del video
2 asr Reconocimiento Volcengine a nivel de palabra → línea de tiempo de oraciones en chino
3 translate DeepSeek → texto en inglés (cambio de audiencia + presupuesto de palabras + números escritos en palabras)
4 fit Ejecutar N rondas de síntesis → probar cada una → puntuar según "cuánto puede llenar" y elegir la mejor
5 place Colocar audio en línea de tiempo + insertar pausas entre oraciones + escribir subtítulos (marcas de tiempo a nivel de palabra reales)
6 mux Agregar música de fondo + normalizar volumen → MP4
Si falla, vuelve a ejecutar el mismo comando: las etapas ya completadas se omiten automáticamente (incluye verificación de que el producto sea más nuevo que la entrada).
Requisitos previos
| Elemento | Descripción |
|---|---|
| Voz | work/voice.json, generado ejecutando clone_voice.py una vez, compartido por todos los videos, no es necesario clonar de nuevo |
| Clave Volcengine | Reconocimiento de archivos de audio (volc.seedasr.auc) |
| Clave MiniMax | Sitio nacional api.minimaxi.com, requiere verificación de identidad y saldo (de lo contrario 2038 / 1008) |
| Clave DeepSeek | Sitio oficial api.deepseek.com |
| Dependencias | demucs torch numpy requests openai soundfile |
| Música | Un directorio con archivos .wav, ver BGM_DIR en config.py |
Todos los servicios son conexión directa, dub.py fuerza la limpieza de variables de proxy.
Lectura obligatoria: 18 lecciones prácticas
La lista completa está en docs/LESSONS.md. Las más fáciles de pasar por alto y con mayor costo:
- Cambiar la audiencia, no solo traducir — Mucho material original está dirigido a exportadores chinos ("amigos que hacen comercio exterior"), el inglés debe hablar directamente al comprador extranjero. La regla está en
SYSTEM_FILLdetranslate.py. - Escribir números en palabras en la etapa de traducción —
20,000cuenta como 1 palabra pero se lee como 2 palabras, sesgando todos los cálculos de longitud; dejar números arábigos puede hacer que se lean dígito por dígito. - atempo deshabilitado — No hacer que la persona hable más rápido para llenar el espacio; hay que acortar el guión.
- Las uniones entre oraciones deben tener fundidos de entrada/salida — Los cortes en formas de onda no cero producen chasquidos.
- Verificar defectos de audio no solo mirando el salto máximo de todo el archivo — Esto puede ser enmascarado por saltos mayores en el archivo fuente; hay que mirar la distribución de saltos.
- La reanudación debe verificar que el producto sea más nuevo que la entrada — De lo contrario, se entregará silenciosamente un doblaje antiguo.
El mecanismo detallado y el proceso de depuración están en docs/USAGE.md (originalmente "Instrucciones de uso") y docs/REPORT.md (informe de implementación).
Limitaciones conocidas
- La densidad de información en chino es mayor que en inglés, por lo que en algunos materiales puede ser necesario eliminar oraciones manteniendo los puntos de venta (la herramienta lo hace automáticamente y lo registra en el informe).
- El nivel de llenado suele ser del 93–100%, el final se complementa con música de fondo.
- Para nombres propios que no se pronuncian correctamente fuera de
Eva, agregar al diccionarioTTS_RESPELLensynth_single.py(solo afecta la entrada de TTS, no los subtítulos).
Flujo de trabajo sugerido
Para material nuevo, ejecuta el proceso completo una vez para que el cliente confirme (voz/velocidad/música/pausas), y después procesa en lote. En el lote, cada elemento especificará el costo.