Speech2Text es una solucion local para convertir archivos de audio o video en texto mediante Whisper. Permite procesar reuniones, entrevistas, llamadas, clases, grabaciones de trabajo u otros registros de voz sin depender de una interfaz web externa para la transcripcion.
La solucion sirve para:
- Transcribir audio a texto en español u otros idiomas soportados por Whisper.
- Generar archivos de salida en formato
.txt,_detailed.txty.json. - Identificar hablantes mediante diarizacion cuando se configura un token de Hugging Face.
- Revisar el avance del proceso por etapas desde una interfaz grafica.
- Ejecutar el mismo motor desde consola para automatizar o integrar procesos.
La aplicacion mantiene los modelos Whisper en la carpeta local models/ y guarda los resultados en output/. Para diarizacion, convertir automaticamente formatos no nativos a WAV 16 kHz mono antes de invocar pyannote.
La solucion se centra en dos programas principales:
transcriber_gui.py: interfaz grafica para usuarios finales.transcriber_dia.py: motor de transcripcion/diarizacion usable por consola.
- Python 3.10 o superior.
ffmpeginstalado y disponible en elPATH.- Dependencias Python instaladas dentro de un ambiente virtual.
Crear el ambiente virtual:
python -m venv whisper_envActivar el ambiente virtual en PowerShell:
.\whisper_env\Scripts\Activate.ps1Activar el ambiente virtual en CMD:
whisper_env\Scripts\activate.batSi PowerShell bloquea la activacion por politicas de ejecucion, ejecutar:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUserInstalar las dependencias dentro del ambiente virtual:
python -m pip install -r requirements.txtEjecutar:
python transcriber_gui.pyLa GUI permite:
- Seleccionar un archivo de audio o video.
- Elegir modelo Whisper:
tiny,base,small,medium,large. - Definir idioma, por ejemplo
es. - Procesar audio con una barra de avance por etapa.
- Ver la transcripcion en pantalla.
- Copiar la transcripcion al portapapeles.
- Guardar automaticamente los resultados en la carpeta
output/.
Guardar los archivos de salida con el nombre del audio. Si ya existe una salida con el mismo nombre, agregar un sufijo numerico:
output/audio.txt
output/audio_detailed.txt
output/audio.json
output/audio_1.txt
output/audio_1_detailed.txt
output/audio_1.json
La diarizacion identifica hablantes usando pyannote.
-
Crear un token classic en Hugging Face:
- Entrar a
Settings > Tokens. - Seleccionar
New token. - Usar permiso
Read. - Habilitar acceso a repositorios publicos gated si la opcion esta disponible.
- Entrar a
-
Aceptar las licencias/condiciones de los modelos pyannote:
-
Guardar el token como variable de entorno.
En Windows:
setx HF_TOKEN "hf_xxxxxxxxxxxxxxxxx"En Bash:
export HF_TOKEN=hf_xxxxxxxxxxxxxxxxxPara activar la diarizacion en la GUI:
- Abrir
Opciones > Carga de HF token. - Ingresar el token de Hugging Face.
- Activar la opcion
Diarizacion. - Opcionalmente indicar
Nro. hablantes.
El token se guarda localmente en .env:
HF_TOKEN=tu_token.env esta ignorado por Git y no debe compartirse.
Pyannote puede requerir aceptar condiciones en Hugging Face para los modelos:
pyannote/speaker-diarization-3.1pyannote/speaker-diarizationpyannote/segmentation-3.0
El programa intenta cargar primero pyannote/speaker-diarization-3.1 y, si no esta disponible, usar como fallback pyannote/speaker-diarization.
Ejecutar transcripcion simple:
python transcriber_dia.py audio.m4a -m base -l es -o output/audio.txtEjecutar con diarizacion:
python transcriber_dia.py audio.m4a -m base -l es -o output/audio.txt --diarize --hf-token TU_TOKEN --num-speakers 2Opciones principales:
-m, --model Modelo Whisper: tiny, base, small, medium, large
-l, --language Codigo de idioma, por ejemplo es
-o, --output Archivo de salida base
--diarize Activa diarizacion de hablantes
--hf-token Token de Hugging Face
--num-speakers Numero esperado de hablantes
--no-progress Desactiva barras de progreso internas
-v, --verbose Muestra informacion detallada
Los modelos Whisper se descargan y cargan desde la carpeta local:
models/
Si el modelo no existe, descargar automaticamente. Si ya existe, reutilizar.
Al indicar un archivo de salida, generar:
.txt: transcripcion simple._detailed.txt: transcripcion con timestamps y hablantes si aplica..json: resultado completo.
Ejecutar la suite de pruebas unitarias:
python -m unittest discover -s testsLas pruebas cubren funciones auxiliares del motor, eventos de progreso, asignacion de hablantes, escritura de salidas y logica base de la interfaz grafica sin cargar modelos Whisper ni ejecutar pyannote.
- Considerar que la primera ejecucion de un modelo puede tardar porque descarga pesos.
- Considerar que la diarizacion puede tardar bastante mas que la transcripcion.
- Convertir temporalmente audios
.m4a,.mp3o.mp4a WAV 16 kHz mono para pyannote. - Usar GPU y
fp16automaticamente si hay GPU CUDA disponible.
Distribuir este proyecto bajo licencia MIT.
La instalacion principal recomendada es con venv, pero Conda puede ser util si necesitas controlar mejor versiones de torch, ffmpeg, CUDA o dependencias cientificas.
Si existe un archivo environment.yml, crear el ambiente con:
conda env create -f environment.yml
conda activate whisper_envEn Windows, si no se tiene modo desarrollador activado, Hugging Face y SpeechBrain pueden mostrar advertencias por uso de symlinks. Para evitarlo, configurar:
setx HF_HUB_DISABLE_SYMLINKS 1
setx SPEECHBRAIN_DOWNLOAD_STRATEGY copyDespues de ejecutar setx, cerrar y volver a abrir la terminal para que las variables queden disponibles.
Si se dispone de GPU NVIDIA compatible, instalar PyTorch con CUDA para acelerar Whisper y parte del procesamiento de diarizacion.
En ese caso, ajustar el bloque de torch en environment.yml para usar CUDA en lugar de CPU. La configuracion exacta depende de la version de CUDA y del soporte de PyTorch instalado.
Si no se dispone de GPU NVIDIA o no se requiere configurar CUDA, usar la version CPU. Funcionara, pero sera mas lenta.