{"id":288,"date":"2025-08-22T07:53:54","date_gmt":"2025-08-22T10:53:54","guid":{"rendered":"https:\/\/walterelias.com.ar\/sitio\/?p=288"},"modified":"2025-08-22T20:13:54","modified_gmt":"2025-08-22T23:13:54","slug":"tutorial-desgrabar-audios-de-whatsapp-con-whisper-cpp-en-linux","status":"publish","type":"post","link":"https:\/\/walterelias.com.ar\/sitio\/tutorial-desgrabar-audios-de-whatsapp-con-whisper-cpp-en-linux\/","title":{"rendered":"Tutorial: Desgrabar Audios de WhatsApp con whisper.cpp en Linux"},"content":{"rendered":"\n<p>Este tutorial te guiar\u00e1 a trav\u00e9s de la instalaci\u00f3n, configuraci\u00f3n y ejecuci\u00f3n de un script para transcribir m\u00faltiples archivos de audio (<code>.wav<\/code>) de forma autom\u00e1tica usando <code>whisper.cpp<\/code>, optimizado para tarjetas gr\u00e1ficas AMD.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfQu\u00e9 es <code>whisper.cpp<\/code>?<\/h3>\n\n\n\n<p><code>whisper.cpp<\/code> es una reimplementaci\u00f3n del modelo de transcripci\u00f3n de voz a texto de OpenAI, <strong>Whisper<\/strong>, pero escrita en C++. La versi\u00f3n original de Whisper est\u00e1 escrita en Python.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><code>whisper.cpp<\/code> vs. Whisper (Python)<\/h3>\n\n\n\n<p>La principal diferencia entre ambas es la <strong>velocidad y la eficiencia<\/strong>. <code>whisper.cpp<\/code>, al estar escrito en un lenguaje de bajo nivel como C++, puede ejecutarse mucho m\u00e1s r\u00e1pido 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\u00e1pido.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Utilidad para tu Proyecto<\/h3>\n\n\n\n<p>En el contexto de la <strong>inform\u00e1tica forense<\/strong>, la utilidad de esta herramienta es clara y valiosa. Nos permite automatizar el an\u00e1lisis de grandes vol\u00famenes de datos de audio, como las notas de voz de WhatsApp, para convertirlos en texto. Esto acelera el proceso de revisi\u00f3n, permitiendo a los investigadores buscar r\u00e1pidamente palabras clave, fechas o nombres en lugar de escuchar manualmente cada grabaci\u00f3n. De esta manera, podemos encontrar informaci\u00f3n relevante de manera m\u00e1s eficiente y efectiva.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Paso 1: Instalaci\u00f3n de Dependencias<\/h2>\n\n\n\n<p>Primero, necesitas instalar las herramientas de compilaci\u00f3n y las bibliotecas necesarias para que todo funcione. Abre una terminal y ejecuta el siguiente comando:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt update\nsudo apt install build-essential git cmake libvulkan-dev ffmpeg\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>build-essential<\/code><\/strong>: Herramientas b\u00e1sicas de compilaci\u00f3n.<\/li>\n\n\n\n<li><strong><code>git<\/code><\/strong>: Para clonar el repositorio de <code>whisper.cpp<\/code>.<\/li>\n\n\n\n<li><strong><code>cmake<\/code><\/strong>: Para configurar y compilar el proyecto.<\/li>\n\n\n\n<li><strong><code>libvulkan-dev<\/code><\/strong>: Para habilitar la aceleraci\u00f3n por GPU en tu tarjeta AMD.<\/li>\n\n\n\n<li><strong><code>ffmpeg<\/code><\/strong>: Para convertir los audios de WhatsApp a un formato compatible.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Paso 2: Compilaci\u00f3n de <code>whisper.cpp<\/code><\/h2>\n\n\n\n<p>A continuaci\u00f3n, clona el repositorio del proyecto y compila el ejecutable.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Clona el repositorio:<\/strong><br><code>git clone https:\/\/github.com\/ggerganov\/whisper.cpp.git <\/code><br><code>cd whisper.cpp<\/code><\/li>\n\n\n\n<li><strong>Compila con soporte para Vulkan:<\/strong><code>make -j4 VULKAN=1<\/code><\/li>\n<\/ol>\n\n\n\n<p>Este comando compila el proyecto y crea los binarios necesarios, incluyendo <code>whisper-cli<\/code>, optimizado para tu GPU AMD.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Paso 3: Descarga del Modelo de Lenguaje<\/h2>\n\n\n\n<p>Para que el programa funcione, necesita un modelo de inteligencia artificial. El modelo <strong><code>medium<\/code><\/strong> ofrece una mayor precisi\u00f3n, ideal para mejorar tus transcripciones.<\/p>\n\n\n\n<p>Desde el mismo directorio de <code>whisper.cpp<\/code>, ejecuta:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bash .\/models\/download-ggml-model.sh medium\n<\/code><\/pre>\n\n\n\n<p>Esto descargar\u00e1 el archivo del modelo <code>ggml-medium.bin<\/code> y lo guardar\u00e1 en la carpeta <code>whisper.cpp\/models\/<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Paso 4: Creaci\u00f3n del Script de Transcripci\u00f3n<\/h2>\n\n\n\n<p>Crea un archivo de script para automatizar el proceso de transcripci\u00f3n. Este script mejorado primero convertir\u00e1 tus archivos de audio a un formato compatible y luego los transcribir\u00e1.<\/p>\n\n\n\n<p><strong>NOTA IMPORTANTE:<\/strong> Los audios de WhatsApp, incluso los que tienen la extensi\u00f3n <code>.wav<\/code>, a menudo usan un c\u00f3dec comprimido (Opus) que no es compatible con <code>whisper.cpp<\/code>. El script utiliza <strong><code>ffmpeg<\/code><\/strong> para convertir los audios a un formato est\u00e1ndar de 16 bits PCM (mono), lo que asegura que <code>whisper.cpp<\/code> pueda procesarlos sin errores.<\/p>\n\n\n\n<p><strong>Conversi\u00f3n Manual (Opcional):<\/strong> Si prefieres convertir los archivos manualmente antes de usar el script, puedes usar esta l\u00ednea de comandos directamente en la terminal:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>for f in *.opus; do ffmpeg -i \"$f\" -ar 16000 -ac 1 -c:a pcm_s16le \"${f%.wav}_convertido.wav\"; done\n<\/code><\/pre>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Abre un editor de texto.<\/li>\n\n\n\n<li>Copia y pega el siguiente c\u00f3digo.<\/li>\n\n\n\n<li>Guarda el archivo con un nombre descriptivo, como <strong><code>transcribir_audios.sh<\/code><\/strong>.<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\n\n# --- CONFIGURACI\u00d3N ---\n# Ruta a la carpeta de whisper.cpp\nWHISPER_DIR=\"$HOME\/whisper.cpp\"\n\n# Ruta a la carpeta que contiene tus audios .wav\n# Ejemplo: \/ruta\/a\/tus\/audios\nAUDIO_DIR=\"\/ruta\/a\/tus\/audios\"\n\n# Carpeta donde se guardar\u00e1n las transcripciones (se crear\u00e1 dentro de AUDIO_DIR)\nOUTPUT_DIR=\"$AUDIO_DIR\/desgrabacion\"\n\n# Carpeta temporal para los audios convertidos\nTEMP_DIR=\"$AUDIO_DIR\/temp_convertidos\"\n\n# Idioma de los audios (ej. \"es\" para espa\u00f1ol, \"en\" para ingl\u00e9s)\nLANGUAGE=\"es\"\n\n# Nombre del archivo del modelo a utilizar\nMODEL_NAME=\"ggml-medium.bin\"\n# --- FIN DE LA CONFIGURACI\u00d3N ---\n\n\n# Comprobaci\u00f3n de existencia de carpetas\nif &#91; ! -d \"$AUDIO_DIR\" ]; then\n  echo \"Error: La carpeta de audios '$AUDIO_DIR' no existe.\"\n  exit 1\nfi\nif &#91; ! -d \"$WHISPER_DIR\/models\" ]; then\n  echo \"Error: La carpeta de modelos '$WHISPER_DIR\/models' no existe. Aseg\u00farate de haber descargado el modelo.\"\n  exit 1\nfi\n\n# Crea los directorios de salida y temporal si no existen\nmkdir -p \"$OUTPUT_DIR\"\nmkdir -p \"$TEMP_DIR\"\n\necho \"Iniciando la conversi\u00f3n de audios...\"\necho \"Los audios temporales se guardar\u00e1n en: $TEMP_DIR\"\necho \"--------------------------------------------------\"\n\n# Bucle para convertir cada archivo de audio\nfor file in \"$AUDIO_DIR\"\/*.wav; do\n  if &#91; -f \"$file\" ]; then\n    FILENAME=$(basename -- \"$file\")\n    FILENAME_NO_EXT=\"${FILENAME%.*}\"\n\n    echo \"Convirtiendo archivo: $FILENAME\"\n\n    # Comando de conversi\u00f3n usando ffmpeg\n    ffmpeg -i \"$file\" -ar 16000 -ac 1 -c:a pcm_s16le \"$TEMP_DIR\/$FILENAME_NO_EXT.wav\"\n    \n    echo \"--------------------------------------------------\"\n  fi\ndone\n\necho \"\u00a1Conversi\u00f3n de audios finalizada!\"\necho \"--------------------------------------------------\"\necho \"Iniciando la transcripci\u00f3n de audios convertidos...\"\necho \"Las transcripciones se guardar\u00e1n en: $OUTPUT_DIR\"\necho \"--------------------------------------------------\"\n\n# Bucle para procesar cada archivo .wav convertido\nfor file in \"$TEMP_DIR\"\/*.wav; do\n  if &#91; -f \"$file\" ]; then\n    FILENAME=$(basename -- \"$file\")\n    FILENAME_NO_EXT=\"${FILENAME%.*}\"\n\n    echo \"Procesando archivo: $FILENAME\"\n\n    # Comando de transcripci\u00f3n usando el binario whisper-cli\n    \"$WHISPER_DIR\/build\/bin\/whisper-cli\" \\\n      --model \"$WHISPER_DIR\/models\/$MODEL_NAME\" \\\n      --language \"$LANGUAGE\" \\\n      --output-txt --output-vtt --output-json \\\n      --output-file \"$OUTPUT_DIR\/$FILENAME_NO_EXT\" \\\n      \"$file\"\n      \n    echo \"--------------------------------------------------\"\n  fi\ndone\n\n# Elimina los archivos temporales de la carpeta\nrm -r \"$TEMP_DIR\"\n\necho \"\u00a1Proceso de transcripci\u00f3n finalizado!\"\n\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Paso 5: Configuraci\u00f3n y Ejecuci\u00f3n del Script<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Ajusta la configuraci\u00f3n:<\/strong> Abre el archivo <strong><code>transcribir_audios.sh<\/code><\/strong> y edita la l\u00ednea <strong><code>AUDIO_DIR<\/code><\/strong> para que apunte a la carpeta donde est\u00e1n tus audios.<\/li>\n\n\n\n<li><strong>Dale permisos de ejecuci\u00f3n:<\/strong> Abre una terminal, navega a la carpeta donde guardaste el script y dale permisos para que se pueda ejecutar:<code>chmod +x transcribir_audios.sh<\/code><\/li>\n\n\n\n<li><strong>Ejecuta el script:<\/strong> Inicia el proceso de transcripci\u00f3n con el siguiente comando:<code>.\/transcribir_audios.sh<\/code><\/li>\n<\/ol>\n\n\n\n<p>El script se encargar\u00e1 de todo el proceso autom\u00e1ticamente, convirtiendo los audios, transcribi\u00e9ndolos y luego eliminando los archivos temporales.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Paso 6: Verificaci\u00f3n de los Resultados<\/h2>\n\n\n\n<p>Una vez que el script finalice, encontrar\u00e1s las transcripciones en la carpeta que definiste en la variable <code>OUTPUT_DIR<\/code>. Por cada archivo de audio, se habr\u00e1n creado tres archivos de texto:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>.txt<\/code><\/strong>: Un archivo de texto plano con la transcripci\u00f3n.<\/li>\n\n\n\n<li><strong><code>.vtt<\/code><\/strong>: Un archivo de subt\u00edtulos con marcas de tiempo.<\/li>\n\n\n\n<li><strong><code>.json<\/code><\/strong>: Un archivo JSON con datos estructurados de la transcripci\u00f3n.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Este tutorial te guiar\u00e1 a trav\u00e9s de la instalaci\u00f3n, configuraci\u00f3n y ejecuci\u00f3n de un script para transcribir m\u00faltiples archivos de audio (.wav) de forma autom\u00e1tica usando whisper.cpp, optimizado para tarjetas gr\u00e1ficas AMD. \u00bfQu\u00e9 es whisper.cpp? whisper.cpp es una reimplementaci\u00f3n del modelo de transcripci\u00f3n de voz a texto de OpenAI, Whisper, pero escrita en C++. La&#8230;<\/p>\n","protected":false},"author":1,"featured_media":290,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[33,27],"tags":[],"class_list":["post-288","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-informatica-forense","category-profesionales"],"_links":{"self":[{"href":"https:\/\/walterelias.com.ar\/sitio\/wp-json\/wp\/v2\/posts\/288","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/walterelias.com.ar\/sitio\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/walterelias.com.ar\/sitio\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/walterelias.com.ar\/sitio\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/walterelias.com.ar\/sitio\/wp-json\/wp\/v2\/comments?post=288"}],"version-history":[{"count":4,"href":"https:\/\/walterelias.com.ar\/sitio\/wp-json\/wp\/v2\/posts\/288\/revisions"}],"predecessor-version":[{"id":294,"href":"https:\/\/walterelias.com.ar\/sitio\/wp-json\/wp\/v2\/posts\/288\/revisions\/294"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/walterelias.com.ar\/sitio\/wp-json\/wp\/v2\/media\/290"}],"wp:attachment":[{"href":"https:\/\/walterelias.com.ar\/sitio\/wp-json\/wp\/v2\/media?parent=288"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/walterelias.com.ar\/sitio\/wp-json\/wp\/v2\/categories?post=288"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/walterelias.com.ar\/sitio\/wp-json\/wp\/v2\/tags?post=288"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}