¡Convierte tus audios y videos en texto AL INSTANTE con Python y Whisper! 🐍 Totalmente GRATIS

Por Administrador

¡Hola, hola Omesitos! Bienvenidos a un nuevo tutorial, en donde veremos como transcribir audios y videos a texto usando Whisper, una herramienta gratuita y poderosa desarrollada por OpenAI. Así que, si estás enfrentando la tediosa tarea de escribir manualmente todo lo que escuchas o has intentado usar alguna herramienta online que te limita o te pide pagar para continuar, este tutorial es para ti. 

Pero, ¿Qué es Whisper?

Whisper es una herramienta de reconocimiento automático de voz (ASR) que utiliza inteligencia artificial para convertir cualquier grabación en texto con una precisión que se acerca a la humana. Lo mejor de todo es que Whisper es gratuito, open-source y ha sido desarrollado por OpenAI (sí, la misma empresa detrás de ChatGPT). 

Whisper fue entrenado con 680,000 horas de audio en más de 90 idiomas. Gracias a esto, no solo puede transcribir con precisión audios con acentos, ruido de fondo o lenguaje técnico, sino que también se puede aplicar en la traducción de idiomas (aunque esto no lo veremos en este tutorial, sin embargo si te interesa que haga uno sobre ello, déjamelo saber en los comentarios). 

Para más información sobre Whisper, te dejo el link a su documentación.

¿Qué necesitamos para transcribir videos o audios a texto?

Para mantenerlo sencillo vamos a usar Google Colab, es decir, lo haremos online. Allí podremos programar en Python. Entonces necesitaremos:

¡Vamos con la programación! 

Configurar el entorno de ejecución en Google Colab

Antes de empezar a usar Whisper, es muy importante que aprovechemos las bondades que nos da Google Colab, es decir, de su entorno de ejecución. Ya que tenemos la opción de usar el acelerador de Hardware.

En este caso debemos tener activado T4 GPU. Esto hará que los modelos de machine learning, que suelen ser muy lentos en CPU, se procesen de forma mucho más rápida. Pero recuerda, qué, como lo vimos en el blog post del uso de Google Colab, esta opción puede no estar disponible siempre, sin embargo intenta usarla si te lo permite. 

Instalar packages y dependencias

Lo primero que tendremos que hacer es instalar los packages y dependencias, para ello digitamos:

!pip install moviepy
!pip install python-docx
!pip install openai-whisper
!apt-get install -y ffmpeg

MoviePy: Esta herramienta nos permitirá manipular archivos de video, que usaremos para extraer audio de un video. 

python-docx: Biblioteca para crear y manipular documentos de Word, la cual usaremos para guardar las transcripciones. 

openai-whisper: Nos permitirá usar los modelos de transcripción de audio de OpenAI. 

FFmpeg:  Software para procesamiento multimedia, necesario para manejar audio y video en diversos formatos. 

Conexión entre Google Colab y Drive 

En esta ocasión necesitaremos leer los videos y audio que tenemos en Drive, por ello es necesario establecer conexión con Google Drive. Para ello tendremos que ejecutar la siguiente celda: 

from google.colab import drive 
drive.mount('/content/drive')

Luego, podemos verificar si tenemos acceso a nuestros archivos. Para ello, en la barra lateral de Google Colab, verás una carpeta llamada drive. Dentro de ella, busca My Drive y localiza la carpeta con los audios y videos.

Extraer el audio de un video con Python

Whisper nos permitirá convertir audio a texto, es por ello que si tenemos algún video, será importante extraer su audio para pasarlo a Whisper. Entonces, vamos a empezar importando lo que usaremos:

import whisper
import os
from moviepy.editor import AudioFileClip

Importamos Whisper, os para para manejar rutas y operaciones con archivos en el sistema, como separar nombres de archivos o crear nuevas rutas y AudioFileClip para extraer el audio de un archivo de video. 

def from_video_to_audio(video_path, output_ext="wav"):
    # Obtener la ruta del directorio, nombre del archivo sin extensión y construir la nueva ruta
    base_path, file_name = os.path.split(video_path)  # Separa la ruta y el nombre del archivo
    name_without_ext, _ = os.path.splitext(file_name)  # Extrae el nombre sin extensión

    # Construir la ruta completa del archivo de salida con la nueva extensión
    audio_output = os.path.join(base_path, f"{name_without_ext}.{output_ext}")

    # Extraer y guardar el audio
    audio_clip = AudioFileClip(video_path)
    audio_clip.write_audiofile(audio_output)
    audio_clip.close()  # Asegura cerrar el recurso
    print(f"Audio almacenado en: {audio_output}")
    return audio_output

video_path = "/content/drive/MyDrive/video/path.mp4"
audio_path = from_video_to_audio(video_path)

 En esta sección definimos una función llamada from_video_to_audio, para convertir un archivo de video en un archivo de audio. Esta toma como entrada la ruta del video y un formato de salida opcional (por defecto .wav).  

Primero, se genera una nueva ruta para el archivo de audio extraído, conservando el nombre original del video. Luego, utilizamos AudioFileClip de la biblioteca MoviePy para abrir el video, extraer su audio y guardarlo en la ruta especificada. Finalmente, liberamos los recursos asociados al archivo de audio y la función devuelve la ruta del archivo generado.  

En esta función hemos especificado que por defecto pase el video a .wav (recomendado para obtener mejores resultados, ya que es un formato sin pérdida y no introduce compresión que pueda disminuir la calidad del audio).  

Pero surge la pregunta, ¿qué formatos soporta Whisper?  

Whisper es compatible con varios formatos de audio comunes, como .wav o .mp3. Ahora bien, aunque no estamos usando la API de OpenAI en este caso, según su documentación, esta soporta formatos como: mp3, mp4, mpeg, mpga, m4a, wav y webm. 

Dado que esta prueba no utiliza la API, mi recomendación es que primero intentes con el formato de tu archivo. Si Whisper no lo soporta, convierte el archivo a un formato ampliamente aceptado, como .wav o .mp3, que son las opciones más confiables para segurar que el modelo pueda procesarlo sin problemas. 

Transcribir el audio a texto con Whisper

Para transcribir el audio tendremos que especificar el modelo que vamos a utilizar. Whisper nos deja elegir entre distintos modelos: tiny, base, small, medium, large, turbo. Siendo tiny el más rápido, pero menos preciso, mientras que large el de mayor precisión, pero más lento y que consume más recursos.

# Establecer el modelo que se va a usar
model = whisper.load_model("base") # tiny, base, small, medium, large, turbo

Una vez que se establezca el modelo a usar, tendremos que ejecutar la celda y esperamos a que se descargue y cargue el modelo que usaremos. 

audio_path = "/content/drive/MyDrive/audio/path.wav"
result = model.transcribe(audio_path)
print(result["text"])

Ahora que tenemos el modelo listo para ser usado, pasamos a entregar el audio. Para ello copiamos la ruta de acceso del audio y lo pegamos en las comillas de la variable audio_path

Luego se llama al método model.transcribe para procesarlo y generar un texto transcrito. Finalmente, se imprime el texto extraído del resultado result[«text»].  

Guardar el texto extraído del audio en Word con Python

Pero qué te parece si a este resultado lo pasamos a Word para verlo de mejor manera, como lo hicimos en el video de extracción de texto de PDFs.  

from docx import Document

# Crear un nuevo archivo Word
doc = Document()

# Agregar el texto extraído al documento
doc.add_paragraph(result["text"])

# Guardar el documento en un archivo Word
nuevo_path = audio_path[:-4] + "_texto_extraído.docx"
doc.save(nuevo_path)

Utilizamos la biblioteca python-docx para crear un archivo Word. Primero, se inicializa un documento vacío doc = Document(), luego se agrega al documento el texto transcrito result[«text»] como un párrafo. Finalmente, se guarda el documento con un nombre basado en el archivo de audio original, añadiendo el sufijo «_texto_extraído.docx«. 

Limitaciones de la transcripción de texto con Whisper

  • Hardware: Los modelos más avanzados de Whisper, como large, requieren una GPU potente para procesar el audio de manera eficiente, ya que, además de ser más lentos en CPU, consumen una gran cantidad de memoria. Esto puede generar problemas en máquinas con recursos limitados. 
  • Tamaño de los archivos de entrada: Si el audio o video es muy largo, puede ser necesario dividirlo en fragmentos más pequeños para evitar sobrecargar el modelo o alcanzar límites de memoria en tu entorno. 
  • Reconocimiento de locutores: Whisper no puede diferenciar entre diferentes personas que hablan en el mismo audio. 
  • Errores en acentos o pronunciaciones complejas. 
  • Audios multilingües: Whisper puede transcribir correctamente audios en varios idiomas, pero puede cometer errores al traducir automáticamente partes del texto, como ocurrió con las frases en inglés traducidas al español. 
  • Tiempo real: Según su documentación, Whisper no está diseñado para transcripción en tiempo real de forma predeterminada. Aunque puede permitir a terceros construir aplicaciones cercanas al tiempo real 

Y bien, hemos llegado al final de este tutorial. ¡Espero que te haya gustado y lo hayas encontrado útil!. Nos vemos en un siguiente post.

Referencias