132 lines
4.9 KiB
Markdown
132 lines
4.9 KiB
Markdown
# Proyecto de ejemplo: Transcriptor Whisper (CPU)
|
|
|
|
Un pequeño proyecto que demuestra cómo transcribir archivos de audio en CPU usando tres enfoques:
|
|
|
|
- `openai-whisper` (paquete original)
|
|
# Proyecto de ejemplo: Transcriptor y doblador (Whisper + Coqui TTS)
|
|
|
|
Este repo contiene utilidades para transcribir audio/video en CPU usando
|
|
distintos backends de Whisper y para generar doblaje por segmentos usando
|
|
Coqui TTS. Está pensado como una base reproducible y ligera para pruebas en CPU.
|
|
|
|
Contenido principal
|
|
- `transcribe.py` — CLI principal: transcripción (openai-whisper /
|
|
transformers / faster-whisper), generación de SRT (incluyendo fallback),
|
|
síntesis TTS por segmento y pipeline de doblaje (replace / mix).
|
|
- `process_video.py` — pipeline alto nivel (extraer audio, transcribir,
|
|
traducir/opcional, generar SRT y quemar subtítulos en video).
|
|
|
|
Requisitos del sistema
|
|
- `ffmpeg` (disponible en PATH)
|
|
- Para Coqui TTS se recomienda usar Miniforge/Conda con Python 3.11 en CPU.
|
|
|
|
Instalación rápida
|
|
|
|
1) Entorno ligero (solo transcripción con `faster-whisper` y dependencias mínimas):
|
|
|
|
```bash
|
|
python -m venv .venv
|
|
source .venv/bin/activate
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
2) Entorno para Coqui TTS (recomendado si vas a sintetizar/doblar):
|
|
|
|
```bash
|
|
# Instalar Miniforge/Miniconda si no lo tienes, luego:
|
|
conda create -n tts_env python=3.11 -y
|
|
conda activate tts_env
|
|
# PyTorch CPU + TTS
|
|
python -m pip install --index-url https://download.pytorch.org/whl/cpu torch torchvision torchaudio
|
|
python -m pip install TTS faster-whisper
|
|
```
|
|
|
|
Nota: en la sesión de ejemplo se creó `tts_env` y se instaló `TTS` y `faster-whisper`.
|
|
|
|
Uso — ejemplos prácticos
|
|
|
|
1) Transcribir un audio y generar SRT (faster-whisper, modelo `base`):
|
|
|
|
```bash
|
|
# desde el entorno donde tengas faster-whisper disponible
|
|
python whisper_project/transcribe.py \
|
|
--file whisper_project/dailyrutines.audio.wav \
|
|
--backend faster-whisper --model base --srt
|
|
```
|
|
|
|
2) Generar SRT de fallback (sin texto) — divide en segmentos uniformes:
|
|
|
|
```bash
|
|
python whisper_project/transcribe.py -f path/to/audio.wav -b transformers --srt --srt-fallback
|
|
```
|
|
|
|
3) Transcripción por segmentos (extrae piezas y transcribe cada una):
|
|
|
|
```bash
|
|
python whisper_project/transcribe.py -f path/to/audio.wav --segment-transcribe --srt --srt-segment-seconds 8
|
|
```
|
|
|
|
4) Doblaje por segmentos (replace = reemplaza voz original):
|
|
|
|
```bash
|
|
# usando el entorno tts_env donde instalaste Coqui TTS
|
|
conda activate tts_env
|
|
python whisper_project/transcribe.py \
|
|
--file whisper_project/dailyrutines.audio.wav \
|
|
--segment-transcribe --srt --srt-file whisper_project/dailyrutines.kokoro.dub.srt \
|
|
--srt-segment-seconds 6 \
|
|
--tts-model tts_models/en/ljspeech/tacotron2-DDC \
|
|
--tts-model-repo tts_models/en/ljspeech/tacotron2-DDC \
|
|
--dub --dub-mode replace --dub-out whisper_project/dailyrutines.kokoro.dub.wav
|
|
```
|
|
|
|
5) Doblaje por segmentos (mix = mezcla TTS con original):
|
|
|
|
```bash
|
|
python whisper_project/transcribe.py \
|
|
--file whisper_project/dailyrutines.audio.wav \
|
|
--segment-transcribe --dub --dub-mode mix --dub-mix-level 0.7 \
|
|
--tts-model tts_models/en/ljspeech/tacotron2-DDC --dub-out out_mix.wav
|
|
```
|
|
|
|
Remuxar audio doblado en el MP4 y quemar subtítulos
|
|
|
|
1) Reemplazar la pista de audio en el MP4 por la pista doblada (sin recomprimir video):
|
|
|
|
```bash
|
|
ffmpeg -y -i dailyrutines.mp4 -i whisper_project/dailyrutines.kokoro.dub.wav -c:v copy -map 0:v:0 -map 1:a:0 -shortest dailyrutines.kokoro.dub.mp4
|
|
```
|
|
|
|
2) Quemar subtítulos (hardcode) en el video (requiere re-encode del video):
|
|
|
|
```bash
|
|
ffmpeg -y -i dailyrutines.mp4 -vf "subtitles=whisper_project/dailyrutines.kokoro.dub.srt:force_style='FontName=Arial,FontSize=24'" -c:a copy dailyrutines.kokoro.subs.mp4
|
|
```
|
|
|
|
Notas sobre modelos Hugging Face y tokens
|
|
- Si el repo del modelo TTS o del modelo de ASR es privado necesitarás
|
|
exportar `HUGGINGFACE_HUB_TOKEN` en el entorno antes de ejecutar el script
|
|
para que `huggingface_hub.snapshot_download` pueda acceder. Ejemplo:
|
|
|
|
```bash
|
|
export HUGGINGFACE_HUB_TOKEN="hf_xxx..."
|
|
```
|
|
|
|
Rendimiento y recomendaciones
|
|
- En CPU usa modelos pequeños (`tiny`, `base`) para tiempos aceptables.
|
|
- `faster-whisper` con `compute_type=int8` reduce memoria y acelera en CPU.
|
|
- Para producción con GPU, instala las ruedas de PyTorch/GPU apropiadas
|
|
y activa `gpu=True` en las llamadas a TTS y whisper si tu hardware lo permite.
|
|
|
|
Problemas comunes y troubleshooting
|
|
- "No module named 'faster_whisper'": instala `faster-whisper` en tu entorno.
|
|
- Coqui TTS tarda en descargar modelos la primera vez (pesan decenas de MB).
|
|
- Si la síntesis TTS es lenta, verifica que `torch` esté instalado y que
|
|
`TTS` use un vocoder optimizado (HifiGAN es el por defecto en los modelos
|
|
de ejemplo).
|
|
|
|
¿Quieres que haga esto por ti?
|
|
- Puedo generar el MP4 final (reemplazando pista y/o quemando subtítulos),
|
|
o ajustar el pipeline de doblaje (p.ej. time-stretch suave). Indica qué
|
|
prefieres y lo ejecuto localmente en este workspace.
|