1. Introducción
Whisper es un modelo de reconocimiento de voz desarrollado originalmente por OpenAI que permite convertir audio en texto (speech-to-text). El proyecto whisper.cpp es una implementación en C/C++ del modelo original, optimizada para ejecutarse de forma eficiente en hardware local sin necesidad de conexión a internet.
Al igual que llama.cpp es el motor de inferencia para modelos de texto (LLM), whisper.cpp es su equivalente para modelos de audio. Necesitaremos un backend que dependa de nuestro sistema operativo y tarjeta gráfica para comunicar la GPU con el motor de inferencia:
Necesitaremos seguir los siguientes pasos:
- Instalar los drivers actualizados de la GPU
- Elegir e instalar un backend apropiado
- Instalar whisper.cpp y un modelo para su uso
2. Instalación de drivers (GPU)
Antes de continuar, selecciona tu tarjeta gráfica:
Asegúrate de tener los últimos drivers de nVIDIA instalados.
Una vez instalados puedes testear desde una terminal si tu sistema detecta correctamente la GPU:
nvidia-smi
Asegúrate de tener los últimos drivers de AMD instalados.
3. Elegir el backend apropiado
Ahora necesitamos instalar y configurar el backend para comunicar la gráfica con nuestro motor de inferencia. Para ello tenemos que elegir uno de los siguientes. Observa que depende del sistema operativo y de nuestra tarjeta gráfica (y no todos los backends ofrecen el mismo rendimiento):
| Backend | Rendimiento | Nvidia | AMD | Observaciones |
|---|---|---|---|---|
| CUDA (Nvidia) | 🟩🟩🟩🟩🟩 | ✅ | ❌ | |
| ROCm/HIP (AMD) | 🟩🟩🟩🟩🟩 | ❌ | ✅ | |
| Vulkan | 🟩🟩🟩🟩⬛ | ✅ | ✅ | |
| CPU/RAM | 🟨🟨⬛⬛⬛ | ❌ | ❌ | Opción ideal para sistemas sin GPU (o poco potentes). |
Si no quieres compilar, puedes descargarte los ficheros precompilados listos para descomprimir y utilizar desde la página de releases de GitHub. Para Windows, elige la opción cublas, mientras que para Linux, puedes elegir la versión ubuntu.
Para compilar whisper.cpp con soporte CUDA, ejecuta los siguientes comandos:
# Preparamos compilación
sudo apt update
sudo apt install -y git build-essential cmake
# Descargamos whisper.cpp
cd ~
git clone https://github.com/ggml-org/whisper.cpp.git
cd whisper.cpp
# Compilamos con CUDA
cmake -B build -DGGML_CUDA=1
cmake --build build -j --config Release
Una vez compilado, comprobamos que funciona:
./build/bin/whisper-cli --version
whisper.cpp version: 1.9.1
Para compilar whisper.cpp con soporte ROCm/HIP de AMD, ejecuta los siguientes comandos:
# Preparamos compilación
sudo apt update
sudo apt install -y git build-essential cmake
# Descargamos whisper.cpp
cd ~
git clone https://github.com/ggml-org/whisper.cpp.git
cd whisper.cpp
# Compilamos con HIP/ROCm (sustituye gfx1201 por tu arquitectura)
cmake -B build -DGGML_HIP=1 -DAMDGPU_TARGETS="gfx1201"
cmake --build build -j --config Release
Para conocer la arquitectura de tu GPU AMD:
rocminfo | grep "gfx"
Arquitecturas comunes: gfx1100 (RX 7900 XTX), gfx1101 (RX 7800 XT), gfx1201 (RX 9070 XT).
Vulkan ofrece algo menos de rendimiento que CUDA o ROCm, pero es la opción multiplataforma ya que está disponible tanto para Windows como para Linux, soportando tanto Nvidia como AMD.
# Preparamos compilación
sudo apt update
sudo apt install -y git build-essential cmake
# Descargamos whisper.cpp
cd ~
git clone https://github.com/ggml-org/whisper.cpp.git
cd whisper.cpp
# Compilamos con Vulkan
cmake -B build -DGGML_VULKAN=1
cmake --build build -j --config Release
Si no tienes una tarjeta gráfica potente, puedes hacer inferencia mediante CPU. Ofrece un rendimiento muy bajo, pero en sistemas potentes con mucha RAM puede ser una opción.
# Preparamos compilación
sudo apt update
sudo apt install -y git build-essential cmake
# Descargamos whisper.cpp
cd ~
git clone https://github.com/ggml-org/whisper.cpp.git
cd whisper.cpp
# Compilamos para CPU
cmake -B build
cmake --build build -j --config Release
4. Descarga de modelos
Whisper necesita un modelo para realizar la transcripción. Existen varios modelos de diferente tamaño y precisión. A mayor tamaño, mejor calidad de transcripción pero mayor consumo de recursos:
| Modelo | Memoria | Velocidad | Precisión |
|---|---|---|---|
| tiny | ~273 MB | Muy rápido | Baja |
| base | ~388 MB | Rápido | Media-Baja |
| small | ~852 MB | Moderado | Media |
| medium | ~2.1 GB | Lento | Alta |
| large | ~3.9 GB | Muy lento | Muy alta |
Si lo prefieres, puedes descargarlos desde HuggingFace y colocarlos en la carpeta models/. Si no, puedes usar el script de la carpeta /models/ del repositorio de whisper.cpp y elegir la que prefieras:
cd ~/whisper.cpp
sh ./models/download-ggml-model.sh small
Recuerda que el modelo concreto small que hemos usado es pequeño. Para transcripciones más precisas, utiliza modelos como
mediumolarge.
5. Conversión de audio
El ejemplo whisper-cli únicamente acepta ficheros WAV de 16 bits. Si tu audio está en otro formato (MP3, FLAC, OGG, etc.), deberás convertirlo previamente. Para ello necesitas tener instalado ffmpeg:
# Instalar ffmpeg (si no lo tienes)
sudo apt install ffmpeg
# Esto convierte un fichero MP3 a WAV
ffmpeg -i original.mp3 -ar 16000 -ac 1 -c:a pcm_s16le final.wav
# Ahora, le indicamos el modelo y le pasamos el .wav al whisper
whisper-cli -m models/ggml-base.bin -f final.wav
De esta forma, estarías haciendo la conversión desde tu formato a WAV, que es el que requiere, para entonces enviarselo a whisper.cpp:
6. Uso
Una vez compilado whisper.cpp y descargado un modelo, podemos empezar a transcribir audio. El programa principal es whisper-cli.
Vamos a transcribir uno de los audios de ejemplo que vienen incluidos en el repositorio:
cd ~/whisper.cpp
./build/bin/whisper-cli -m models/ggml-base.bin -f samples/jfk.wav
El programa procesará el audio y mostrará la transcripción con marcas de tiempo:
[00:00:00.000 --> 00:00:00.850] And so my
[00:00:00.850 --> 00:00:01.590] fellow
[00:00:01.590 --> 00:00:04.140] Americans, ask
[00:00:04.140 --> 00:00:05.660] not what your
[00:00:05.660 --> 00:00:06.840] country can do
[00:00:06.840 --> 00:00:08.430] for you, ask
[00:00:08.430 --> 00:00:09.440] what you can do
[00:00:09.440 --> 00:00:10.020] for your
[00:00:10.020 --> 00:00:11.000] country.
Consejos
Veamos algunos ejemplos de comandos, que explicaremos a continuación:
whisper-cli -m models/ggml-base.bin -f samples/jfk.wav -t 4
whisper-cli -f audio_esp.wav -l es
whisper-cli -f audio_esp.wav --task translate
whisper-cli -f samples/jfk.wav --print-colors
whisper-cli -f audio_esp.wav -osrt
- Con
-mindicas el modelo que quieres utilizar (obligatorio). - Con
-tindicas el número de hilos de procesamiento. - Para transcribir en un idioma concreto, usa el parámetro
-l(lang). - Para traducir al inglés (independientemente del idioma original), usa
--task translate. - Con
--print-colorspuedes indicar con colores que palabras ha identificado con seguridad. - Con parámetros como
-osrtpuedes indicar el formato de salida de la transcripción:
| Parámetro | Formato | Descripción |
|---|---|---|
-otxt |
.txt |
Fichero de texto plano. |
-ovtt |
.vtt |
WebTT. Formato de subtítulos estándar para la web. |
-osrt |
.srt |
Formato de subtítulos SRT, utilizado para videos. |
-olrc |
.lrc |
Formato de lyrics de audio, muy utilizado junto a MIDIs. |
-owts |
.wts |
Formato de letras, palabra-por-palabra, muy utilizado para karaoke. |
Whisper.cpp también incluye un servidor que expone una API, mediante la cuál podemos conectar whisper a otros programas o agentes. Una vez iniciado, el servidor estará disponible en http://127.0.0.1:8080 y aceptará peticiones para transcribir:
whisper-server -m models/ggml-base.bin --host 127.0.0.1 --port 8080

