Para esta clase, vamos a utilizar la biblioteca “whisper”. Whisper es un modelo de reconocimiento de voz de la empresa OpenAI.
Únicamente vamos a pasarle un audio y recibiremos la misma información en texto. Aunque para nosotros el resultado que vamos a obtener será rápido, detrás de esta herramienta ocurren cosas muy interesantes, las cuales puedes leer en su Paper de Whisper.
Cargamos el modelo pre-entrenado de transcripción de audio utilizando la biblioteca whisper. El modelo se llama “base” y se guarda en la variable model
:
model = whisper.load_model("base")
Luego, transcribimos el audio del archivo que se encuentra en la ruta archivo_audio
, utilizando el modelo cargado anteriormente. El resultado se guarda en la variable result
:
result = model.transcribe(archivo_audio)
A continuación, creamos una cadena de texto que representa la ruta donde se guardará el archivo de texto que contendrá la transcripción. La ruta se compone de la carpeta donde se guardará el archivo (almacenada en la variable carpeta
) y el nombre del archivo sin extensión (guardado en la variable nombre_archivo
), con la extensión .txt
:
archivo_texto = f"{carpeta}/{nombre_archivo}.txt"
Después de tener la variable archivo_texto
, procedemos a crear el archivo de texto que contendrá el texto extraído anteriormente, el cual se encuentra en la variable result
:
with open(archivo_texto, 'w') as f:
f.write(result["text"])
Nota: El siguiente código realiza la misma función que el bloque anterior:
f = open(archivo_texto, "w")
f.write(result["text"])
f.close()
Si te fijas, lo que hace el código es abrir un archivo, que si no existe, lo crea. Luego, escribe en él y finalmente lo cierra. Sin embargo, a veces puede haber problemas al cerrar el archivo. La mejor manera de realizar este proceso es utilizando un contexto con la instrucción with
, en lugar de abrir y cerrar manualmente el archivo.
Continuamos…
Después de que se haya creado el archivo correctamente, imprimimos en pantalla:
print(f"Transcripción guardada en {archivo_texto}")
Todo nuestro código que llevamos hasta el momento se debería de ver así:
import openai
import sys
import os
import whisper
import yt_dlp
def descargar_youtube(url):
title = input("Ingresa el nuevo nombre de tu video a analizar: ")
ydl_opts = {
'format': 'best',
'outtmpl': f'{title}.%(ext)s',
'noplaylist': True,
'download': False
}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
ydl.download([url])
title = title + f".mp4"
return title
print("¿Qué tipo de video desea analizar?")
print("1. Video descargado")
print("2. Video de YouTube")
opcion = int(input("Elija una opción: "))
if opcion == 1:
archivo_video = input("Ingrese el nombre del video: ")
elif opcion == 2:
url = input("Ingrese la URL del video de YouTube: ")
archivo_video = descargar_youtube(url)
else:
print("Opción no válida.")
sys.exit()
nombre_archivo = os.path.splitext(archivo_video)[0]
carpeta = nombre_archivo
if not os.path.exists(carpeta):
os.makedirs(carpeta)
archivo_audio = f"{carpeta}/{nombre_archivo}.wav"
os.system(f'ffmpeg -i "{archivo_video}" -vn "{archivo_audio}"')
model = whisper.load_model("base")
result = model.transcribe(archivo_audio)
archivo_texto = f"{carpeta}/{nombre_archivo}.txt"
with open(archivo_texto, 'w') as f:
f.write(result["text"])
print(f"Transcripción guardada en {archivo_texto}")
Nota del maestro: Recuerda que este curso es gratuito y no cuenta con soporte. Si tienes problemas o dudas, puedes escribirme en Twitter haciendo clic aquí y esperar a que tenga un tiempo libre para poder contestarte. También puedes considerar tomar el curso profesional en nuestra plataforma de Azul School, que incluye soporte prioritario para todos nuestros cursos y muchos más beneficios. Haz clic aquí para comprar tu membresía anual u obtener más información al respecto.