Este tutorial te guiará a través de la instalación, configuración y ejecución de un script para transcribir múltiples archivos de audio (.wav
) de forma automática usando whisper.cpp
, optimizado para tarjetas gráficas AMD.
¿Qué es whisper.cpp
?
whisper.cpp
es una reimplementación del modelo de transcripción de voz a texto de OpenAI, Whisper, pero escrita en C++. La versión original de Whisper está escrita en Python.
whisper.cpp
vs. Whisper (Python)
La principal diferencia entre ambas es la velocidad y la eficiencia. whisper.cpp
, al estar escrito en un lenguaje de bajo nivel como C++, puede ejecutarse mucho más rápido y con menos consumo de recursos, especialmente en la CPU, lo que lo hace ideal para dispositivos con recursos limitados o para tareas que requieren procesamiento rápido.
Utilidad para tu Proyecto
En el contexto de la informática forense, la utilidad de esta herramienta es clara y valiosa. Nos permite automatizar el análisis de grandes volúmenes de datos de audio, como las notas de voz de WhatsApp, para convertirlos en texto. Esto acelera el proceso de revisión, permitiendo a los investigadores buscar rápidamente palabras clave, fechas o nombres en lugar de escuchar manualmente cada grabación. De esta manera, podemos encontrar información relevante de manera más eficiente y efectiva.
Paso 1: Instalación de Dependencias
Primero, necesitas instalar las herramientas de compilación y las bibliotecas necesarias para que todo funcione. Abre una terminal y ejecuta el siguiente comando:
sudo apt update
sudo apt install build-essential git cmake libvulkan-dev ffmpeg
build-essential
: Herramientas básicas de compilación.git
: Para clonar el repositorio dewhisper.cpp
.cmake
: Para configurar y compilar el proyecto.libvulkan-dev
: Para habilitar la aceleración por GPU en tu tarjeta AMD.ffmpeg
: Para convertir los audios de WhatsApp a un formato compatible.
Paso 2: Compilación de whisper.cpp
A continuación, clona el repositorio del proyecto y compila el ejecutable.
- Clona el repositorio:
git clone https://github.com/ggerganov/whisper.cpp.git
cd whisper.cpp
- Compila con soporte para Vulkan:
make -j4 VULKAN=1
Este comando compila el proyecto y crea los binarios necesarios, incluyendo whisper-cli
, optimizado para tu GPU AMD.
Paso 3: Descarga del Modelo de Lenguaje
Para que el programa funcione, necesita un modelo de inteligencia artificial. El modelo medium
ofrece una mayor precisión, ideal para mejorar tus transcripciones.
Desde el mismo directorio de whisper.cpp
, ejecuta:
bash ./models/download-ggml-model.sh medium
Esto descargará el archivo del modelo ggml-medium.bin
y lo guardará en la carpeta whisper.cpp/models/
.
Paso 4: Creación del Script de Transcripción
Crea un archivo de script para automatizar el proceso de transcripción. Este script mejorado primero convertirá tus archivos de audio a un formato compatible y luego los transcribirá.
NOTA IMPORTANTE: Los audios de WhatsApp, incluso los que tienen la extensión .wav
, a menudo usan un códec comprimido (Opus) que no es compatible con whisper.cpp
. El script utiliza ffmpeg
para convertir los audios a un formato estándar de 16 bits PCM (mono), lo que asegura que whisper.cpp
pueda procesarlos sin errores.
Conversión Manual (Opcional): Si prefieres convertir los archivos manualmente antes de usar el script, puedes usar esta línea de comandos directamente en la terminal:
for f in *.opus; do ffmpeg -i "$f" -ar 16000 -ac 1 -c:a pcm_s16le "${f%.wav}_convertido.wav"; done
- Abre un editor de texto.
- Copia y pega el siguiente código.
- Guarda el archivo con un nombre descriptivo, como
transcribir_audios.sh
.
#!/bin/bash
# --- CONFIGURACIÓN ---
# Ruta a la carpeta de whisper.cpp
WHISPER_DIR="$HOME/whisper.cpp"
# Ruta a la carpeta que contiene tus audios .wav
# Ejemplo: /ruta/a/tus/audios
AUDIO_DIR="/ruta/a/tus/audios"
# Carpeta donde se guardarán las transcripciones (se creará dentro de AUDIO_DIR)
OUTPUT_DIR="$AUDIO_DIR/desgrabacion"
# Carpeta temporal para los audios convertidos
TEMP_DIR="$AUDIO_DIR/temp_convertidos"
# Idioma de los audios (ej. "es" para español, "en" para inglés)
LANGUAGE="es"
# Nombre del archivo del modelo a utilizar
MODEL_NAME="ggml-medium.bin"
# --- FIN DE LA CONFIGURACIÓN ---
# Comprobación de existencia de carpetas
if [ ! -d "$AUDIO_DIR" ]; then
echo "Error: La carpeta de audios '$AUDIO_DIR' no existe."
exit 1
fi
if [ ! -d "$WHISPER_DIR/models" ]; then
echo "Error: La carpeta de modelos '$WHISPER_DIR/models' no existe. Asegúrate de haber descargado el modelo."
exit 1
fi
# Crea los directorios de salida y temporal si no existen
mkdir -p "$OUTPUT_DIR"
mkdir -p "$TEMP_DIR"
echo "Iniciando la conversión de audios..."
echo "Los audios temporales se guardarán en: $TEMP_DIR"
echo "--------------------------------------------------"
# Bucle para convertir cada archivo de audio
for file in "$AUDIO_DIR"/*.wav; do
if [ -f "$file" ]; then
FILENAME=$(basename -- "$file")
FILENAME_NO_EXT="${FILENAME%.*}"
echo "Convirtiendo archivo: $FILENAME"
# Comando de conversión usando ffmpeg
ffmpeg -i "$file" -ar 16000 -ac 1 -c:a pcm_s16le "$TEMP_DIR/$FILENAME_NO_EXT.wav"
echo "--------------------------------------------------"
fi
done
echo "¡Conversión de audios finalizada!"
echo "--------------------------------------------------"
echo "Iniciando la transcripción de audios convertidos..."
echo "Las transcripciones se guardarán en: $OUTPUT_DIR"
echo "--------------------------------------------------"
# Bucle para procesar cada archivo .wav convertido
for file in "$TEMP_DIR"/*.wav; do
if [ -f "$file" ]; then
FILENAME=$(basename -- "$file")
FILENAME_NO_EXT="${FILENAME%.*}"
echo "Procesando archivo: $FILENAME"
# Comando de transcripción usando el binario whisper-cli
"$WHISPER_DIR/build/bin/whisper-cli" \
--model "$WHISPER_DIR/models/$MODEL_NAME" \
--language "$LANGUAGE" \
--output-txt --output-vtt --output-json \
--output-file "$OUTPUT_DIR/$FILENAME_NO_EXT" \
"$file"
echo "--------------------------------------------------"
fi
done
# Elimina los archivos temporales de la carpeta
rm -r "$TEMP_DIR"
echo "¡Proceso de transcripción finalizado!"
Paso 5: Configuración y Ejecución del Script
- Ajusta la configuración: Abre el archivo
transcribir_audios.sh
y edita la líneaAUDIO_DIR
para que apunte a la carpeta donde están tus audios. - Dale permisos de ejecución: Abre una terminal, navega a la carpeta donde guardaste el script y dale permisos para que se pueda ejecutar:
chmod +x transcribir_audios.sh
- Ejecuta el script: Inicia el proceso de transcripción con el siguiente comando:
./transcribir_audios.sh
El script se encargará de todo el proceso automáticamente, convirtiendo los audios, transcribiéndolos y luego eliminando los archivos temporales.
Paso 6: Verificación de los Resultados
Una vez que el script finalice, encontrarás las transcripciones en la carpeta que definiste en la variable OUTPUT_DIR
. Por cada archivo de audio, se habrán creado tres archivos de texto:
.txt
: Un archivo de texto plano con la transcripción..vtt
: Un archivo de subtítulos con marcas de tiempo..json
: Un archivo JSON con datos estructurados de la transcripción.