Explorando la inteligencia artificial y OpenAI con Python

0 of 25 lessons complete (0%)

Extracción de audio de video.

Exploración y Depuración del Código

You don’t have access to this lesson

Please register or sign in to access the course content.

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.