He decidido dejar este video del curso original aquí para que puedan ver el resultado final del proyecto.
Codigo completo con comentarios para su analisis:
# Importa el módulo openai
import openai
# Importa el módulo sys
import sys
# Importa el módulo os
import os
# Importa el módulo whisper
import whisper
# Importa el módulo yt_dlp
import yt_dlp
# Definición de la función para descargar un video de YouTube
def descargar_youtube(url):
# Solicita al usuario un nombre para el video
title = input("Ingresa el nuevo nombre de tu video a analizar: ")
# Opciones de configuración para yt_dlp
ydl_opts = {
'format': 'best',
'outtmpl': f'{title}.%(ext)s', # Define el formato y la ubicación de descarga del video
'noplaylist': True,
'download': False
}
# Crea una instancia de YoutubeDL con las opciones definidas
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
# Descarga el video
ydl.download([url])
# Agrega la extensión ".mp4" al nombre del archivo
title = title + f".mp4"
# Devuelve el nombre del archivo
return title
# Solicita al usuario qué tipo de video desea analizar
print("¿Qué tipo de video desea analizar?")
print("1. Video descargado")
print("2. Video de YouTube")
opcion = int(input("Elija una opción: "))
# Procesamiento de la opción seleccionada
if opcion == 1:
# Solicita al usuario el nombre del video descargado
archivo_video = input("Ingrese el nombre del video: ")
elif opcion == 2:
# Solicita al usuario la URL del video de YouTube
url = input("Ingrese la URL del video de YouTube: ")
# Descarga el video de YouTube y obtiene el nombre del archivo descargado
archivo_video = descargar_youtube(url)
else:
# Opción no válida, finaliza el programa
print("Opción no válida.")
sys.exit()
# Obtiene el nombre del archivo sin la extensión
nombre_archivo = os.path.splitext(archivo_video)[0]
# Crea una carpeta con el mismo nombre del archivo
carpeta = nombre_archivo
if not os.path.exists(carpeta):
os.makedirs(carpeta)
# Define la ruta del archivo de audio a generar
archivo_audio = f"{carpeta}/{nombre_archivo}.wav"
# Convierte el archivo de video en un archivo de audio utilizando FFmpeg
os.system(f'ffmpeg -i "{archivo_video}" -vn "{archivo_audio}"')
# Carga el modelo de transcripción de audio
model = whisper.load_model("base")
# Realiza la transcripción del archivo de audio
result = model.transcribe(archivo_audio)
# Define la ruta del archivo de texto a generar
archivo_texto = f"{carpeta}/{nombre_archivo}.txt"
# Guarda la transcripción en el archivo de texto
with open(archivo_texto, 'w') as f:
f.write(result["text"])
# Muestra la ubicación del archivo de transcripción
print(f"Transcripción guardada en {archivo_texto}")
# Define las opciones disponibles para el usuario
opciones = {
1: "Crea un resumen de este texto",
2: "Crea un artículo original basado en este texto",
3: "Crea un post para redes sociales basado en este texto",
4: "Crea un correo basado en este texto",
5: "Introduce un comando personalizado"
}
# Solicita al usuario qué desea hacer con la información del video
opcion = int(input("¿Qué desea hacer con la información del video?\n1. Crear un resumen\n2. Crear un artículo original\n3. Crear un post para redes sociales\n4. Crear un correo\n5. Introducir un comando personalizado\nElija una opción: "))
# Establece la clave de la API de OpenAI
openai.api_key = "TU-API"
# Procesamiento de la opción seleccionada
if opcion in opciones:
if opcion == 5:
# Solicita al usuario un comando personalizado
prompt_personalizado = input("Introduzca el comando personalizado: ")
# Combina el comando personalizado con el texto de la transcripción
prompt = prompt_personalizado + f"{result['text']}"
else:
# Combina la opción seleccionada con el texto de la transcripción
prompt = f"{opciones[opcion]}: '{result['text']}'"
# Modelo de lenguaje a utilizar
modelo = "gpt-3.5-turbo"
# Definición del mensaje para el modelo de ChatGPT
mensaje = [
{"role":"system","content":"Eres un experto en redacción, resúmenes y creación de títulos."},
{"role":"user","content":prompt}
]
# Genera una respuesta utilizando el modelo de ChatGPT
response = openai.ChatCompletion.create(
model = modelo,
messages = mensaje,
temperature= 0.8,
max_tokens=1024
)
# Obtiene la respuesta generada por el modelo
respuesta = response["choices"][0]["message"]["content"]
else:
# Opción no válida
print("Opción inválida. Inténtelo de nuevo.")
# Guarda el artículo generado en un archivo de texto
with open(f"{carpeta}/{nombre_archivo}_articulo.txt", 'w') as f:
f.write(respuesta)
# Muestra la ubicación del archivo de artículo generado
print(f"Artículo generado guardado en {carpeta}/{nombre_archivo}_articulo.txt")
# Muestra la respuesta generada
print(respuesta)
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.