GAS17 commited on
Commit
f020e8b
·
verified ·
1 Parent(s): 1d9428e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +32 -15
app.py CHANGED
@@ -4,17 +4,27 @@ import tempfile
4
  import os
5
  import requests
6
  import base64
 
 
 
 
 
 
 
 
 
 
 
 
7
 
8
  def extraer_audio(video_file):
9
  """
10
- Función que recibe la ruta de un archivo de video, extrae el audio y lo guarda
11
- en un archivo temporal .mp3. Retorna una tupla: (ruta_del_mp3_o_None, mensaje).
12
  """
13
- # Crear archivo temporal para el MP3, sin borrarlo automáticamente
14
  with tempfile.NamedTemporaryFile(delete=False, suffix=".mp3") as temp_audio:
15
  temp_audio_path = temp_audio.name
16
  try:
17
- # Cargar el video (soporta varios formatos) y extraer el audio
18
  clip = mp.VideoFileClip(video_file)
19
  clip.audio.write_audiofile(temp_audio_path, logger=None)
20
  clip.close()
@@ -26,20 +36,19 @@ def extraer_audio(video_file):
26
 
27
  def transcribir_audio(audio_file_path):
28
  """
29
- Función que utiliza la API de FAL para transcribir un archivo de audio.
30
- Devuelve una tupla: (transcripción, mensaje)
31
  """
32
  fal_key = os.environ.get("FAL_KEY")
33
  if not fal_key:
34
  return "", "Error: FAL_KEY no está configurada en las variables de entorno."
35
  try:
36
- # Leer y codificar el audio en base64 para formar un data URI
37
  with open(audio_file_path, "rb") as f:
38
  audio_data = f.read()
39
  encoded_audio = base64.b64encode(audio_data).decode("utf-8")
40
  data_uri = f"data:audio/mp3;base64,{encoded_audio}"
41
 
42
- # Configurar el payload para la solicitud a la API de FAL
43
  payload = {
44
  "input": {
45
  "audio_url": data_uri,
@@ -57,7 +66,8 @@ def transcribir_audio(audio_file_path):
57
  "Authorization": f"Bearer {fal_key}"
58
  }
59
 
60
- # Endpoint de la API de FAL (ajusta si es necesario según la documentación oficial)
 
61
  endpoint = "https://api.fal.ai/subscribe/fal-ai/whisper"
62
 
63
  response = requests.post(endpoint, json=payload, headers=headers)
@@ -72,8 +82,10 @@ def transcribir_audio(audio_file_path):
72
 
73
  def procesar_video(video_file):
74
  """
75
- Función principal que extrae el audio de un video y luego lo transcribe.
76
- Retorna una tupla: (ruta_del_mp3, transcripción, mensaje)
 
 
77
  """
78
  audio_path, msg_audio = extraer_audio(video_file)
79
  if not audio_path:
@@ -91,11 +103,16 @@ iface = gr.Interface(
91
  gr.Textbox(label="Mensaje de estado")
92
  ],
93
  title="Extracción de Audio y Transcripción de Video a MP3",
94
- description="Esta aplicación extrae el audio de un video, lo convierte a .mp3 y realiza la transcripción utilizando la API de FAL.\n" \
95
- "Requisitos:\n" \
96
- "• Instalar: pip install gradio moviepy requests\n" \
97
- "• Configurar la variable de entorno FAL_KEY con tu API key de FAL."
 
 
 
98
  )
99
 
100
  if __name__ == "__main__":
 
 
101
  iface.launch()
 
4
  import os
5
  import requests
6
  import base64
7
+ import socket
8
+
9
+ def check_dns():
10
+ """
11
+ Función de ayuda para verificar si el hostname 'api.fal.ai' se resuelve correctamente.
12
+ Ejecuta esta función para ver en la consola la dirección IP resultante o el error DNS.
13
+ """
14
+ try:
15
+ ip = socket.gethostbyname("api.fal.ai")
16
+ print("La IP de 'api.fal.ai' es:", ip)
17
+ except Exception as e:
18
+ print("Error al resolver 'api.fal.ai':", e)
19
 
20
  def extraer_audio(video_file):
21
  """
22
+ Extrae el audio de un video y lo guarda en un archivo temporal (.mp3).
23
+ Retorna una tupla: (ruta_del_mp3_o_None, mensaje).
24
  """
 
25
  with tempfile.NamedTemporaryFile(delete=False, suffix=".mp3") as temp_audio:
26
  temp_audio_path = temp_audio.name
27
  try:
 
28
  clip = mp.VideoFileClip(video_file)
29
  clip.audio.write_audiofile(temp_audio_path, logger=None)
30
  clip.close()
 
36
 
37
  def transcribir_audio(audio_file_path):
38
  """
39
+ Envía el audio a la API de FAL para transcribirlo.
40
+ Retorna una tupla: (transcripción, mensaje).
41
  """
42
  fal_key = os.environ.get("FAL_KEY")
43
  if not fal_key:
44
  return "", "Error: FAL_KEY no está configurada en las variables de entorno."
45
  try:
46
+ # Convertir el archivo de audio a un Data URI con base64
47
  with open(audio_file_path, "rb") as f:
48
  audio_data = f.read()
49
  encoded_audio = base64.b64encode(audio_data).decode("utf-8")
50
  data_uri = f"data:audio/mp3;base64,{encoded_audio}"
51
 
 
52
  payload = {
53
  "input": {
54
  "audio_url": data_uri,
 
66
  "Authorization": f"Bearer {fal_key}"
67
  }
68
 
69
+ # Asegúrate de que este endpoint sea el actual según la documentación oficial de FAL.
70
+ # Si tienes errores de resolución de hostname, revisa la URL o tu configuración de DNS.
71
  endpoint = "https://api.fal.ai/subscribe/fal-ai/whisper"
72
 
73
  response = requests.post(endpoint, json=payload, headers=headers)
 
82
 
83
  def procesar_video(video_file):
84
  """
85
+ Función principal:
86
+ 1. Extrae el audio del video.
87
+ 2. Envía el audio a la API de FAL para transcribirlo.
88
+ Retorna: (ruta_del_mp3, transcripción, mensaje de estado).
89
  """
90
  audio_path, msg_audio = extraer_audio(video_file)
91
  if not audio_path:
 
103
  gr.Textbox(label="Mensaje de estado")
104
  ],
105
  title="Extracción de Audio y Transcripción de Video a MP3",
106
+ description=("Esta aplicación extrae el audio de un video, lo convierte a un archivo MP3 "
107
+ "y posteriormente envía el audio a la API de FAL para transcribirlo.\n\n"
108
+ "Requisitos:\n"
109
+ "• pip install gradio moviepy requests\n"
110
+ "• Configurar la variable de entorno FAL_KEY con tu API Key de FAL\n\n"
111
+ "Si recibes errores de DNS al conectar con la API, verifica el endpoint y tu conexión a Internet "
112
+ "usando la función 'check_dns()'.")
113
  )
114
 
115
  if __name__ == "__main__":
116
+ # Ejecuta esta función para verificar si 'api.fal.ai' se resuelve correctamente.
117
+ check_dns()
118
  iface.launch()