gnosticdev commited on
Commit
d97f0d8
·
verified ·
1 Parent(s): ba92c3e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +18 -22
app.py CHANGED
@@ -38,7 +38,7 @@ def eliminar_archivo_tiempo(ruta, delay=1800):
38
  from threading import Timer
39
  Timer(delay, eliminar).start()
40
 
41
- async def procesar_audio(texto, voz, duracion_video, audio_original):
42
  temp_files = []
43
  try:
44
  logging.info("Iniciando procesamiento de audio")
@@ -82,17 +82,11 @@ async def procesar_audio(texto, voz, duracion_video, audio_original):
82
 
83
  audio_final = CompositeAudioClip(audios).set_duration(duracion_video)
84
  logging.info("Audio procesado exitosamente")
85
- return audio_final
86
 
87
  except Exception as e:
88
  logging.error(f"Fallo en procesamiento de audio: {str(e)}")
89
  raise
90
- finally:
91
- for file in temp_files:
92
- try:
93
- os.remove(file)
94
- except Exception as e:
95
- logging.warning(f"Error limpiando {file}: {e}")
96
 
97
  def aplicar_glitch(video_clip):
98
  def glitch_effect(frame):
@@ -107,21 +101,22 @@ def aplicar_glitch(video_clip):
107
  return video_clip.fl_image(glitch_effect)
108
 
109
  async def procesar_fragmento(chunk, texto_tts, voz_seleccionada, start_time):
 
110
  try:
111
  audio_original = chunk.audio
112
  duracion_chunk = chunk.duration
113
 
114
  # Si el chunk es demasiado corto, devolver sin procesar
115
  if duracion_chunk <= 18:
116
- audio_final = await procesar_audio(
117
  texto_tts,
118
  voz_seleccionada,
119
  duracion_chunk,
120
  audio_original
121
  )
122
- return chunk.set_audio(audio_final)
123
 
124
- audio_final = await procesar_audio(
125
  texto_tts,
126
  voz_seleccionada,
127
  duracion_chunk,
@@ -159,20 +154,14 @@ async def procesar_fragmento(chunk, texto_tts, voz_seleccionada, start_time):
159
 
160
  video_chunk = concatenate_videoclips(segments, method="compose")
161
  video_chunk = video_chunk.set_audio(audio_final)
162
- return video_chunk
163
 
164
  except Exception as e:
165
  logging.error(f"Fallo procesando fragmento: {str(e)}")
166
  raise
167
- finally:
168
- try:
169
- chunk.close()
170
- audio_original.close()
171
- audio_final.close()
172
- except:
173
- pass
174
 
175
  async def procesar_video(video_input, texto_tts, voz_seleccionada):
 
176
  try:
177
  logging.info("Iniciando procesamiento de video")
178
  video_original = VideoFileClip(video_input, target_resolution=(720, 1280))
@@ -189,8 +178,9 @@ async def procesar_video(video_input, texto_tts, voz_seleccionada):
189
  processed_clips = []
190
  for i, (start_time, chunk) in enumerate(chunks):
191
  logging.info(f"Procesando chunk {i+1}/{len(chunks)}")
192
- processed_chunk = await procesar_fragmento(chunk, texto_tts, voz_seleccionada, start_time)
193
  processed_clips.append(processed_chunk)
 
194
 
195
  # Combinar chunks
196
  final_video = concatenate_videoclips(processed_clips, method="compose")
@@ -226,11 +216,17 @@ async def procesar_video(video_input, texto_tts, voz_seleccionada):
226
  raise
227
  finally:
228
  try:
 
229
  video_original.close()
230
  intro.close()
231
  outro.close()
232
- except:
233
- pass
 
 
 
 
 
234
 
235
  # Interfaz Gradio
236
  with gr.Blocks() as demo:
 
38
  from threading import Timer
39
  Timer(delay, eliminar).start()
40
 
41
+ async def procesar_audio(texto, voz, duracion_video, audio_original=None):
42
  temp_files = []
43
  try:
44
  logging.info("Iniciando procesamiento de audio")
 
82
 
83
  audio_final = CompositeAudioClip(audios).set_duration(duracion_video)
84
  logging.info("Audio procesado exitosamente")
85
+ return audio_final, temp_files # Retornamos los archivos temporales para limpieza
86
 
87
  except Exception as e:
88
  logging.error(f"Fallo en procesamiento de audio: {str(e)}")
89
  raise
 
 
 
 
 
 
90
 
91
  def aplicar_glitch(video_clip):
92
  def glitch_effect(frame):
 
101
  return video_clip.fl_image(glitch_effect)
102
 
103
  async def procesar_fragmento(chunk, texto_tts, voz_seleccionada, start_time):
104
+ temp_files = []
105
  try:
106
  audio_original = chunk.audio
107
  duracion_chunk = chunk.duration
108
 
109
  # Si el chunk es demasiado corto, devolver sin procesar
110
  if duracion_chunk <= 18:
111
+ audio_final, temp_files = await procesar_audio(
112
  texto_tts,
113
  voz_seleccionada,
114
  duracion_chunk,
115
  audio_original
116
  )
117
+ return chunk.set_audio(audio_final), temp_files
118
 
119
+ audio_final, temp_files = await procesar_audio(
120
  texto_tts,
121
  voz_seleccionada,
122
  duracion_chunk,
 
154
 
155
  video_chunk = concatenate_videoclips(segments, method="compose")
156
  video_chunk = video_chunk.set_audio(audio_final)
157
+ return video_chunk, temp_files
158
 
159
  except Exception as e:
160
  logging.error(f"Fallo procesando fragmento: {str(e)}")
161
  raise
 
 
 
 
 
 
 
162
 
163
  async def procesar_video(video_input, texto_tts, voz_seleccionada):
164
+ temp_files = []
165
  try:
166
  logging.info("Iniciando procesamiento de video")
167
  video_original = VideoFileClip(video_input, target_resolution=(720, 1280))
 
178
  processed_clips = []
179
  for i, (start_time, chunk) in enumerate(chunks):
180
  logging.info(f"Procesando chunk {i+1}/{len(chunks)}")
181
+ processed_chunk, chunk_temp_files = await procesar_fragmento(chunk, texto_tts, voz_seleccionada, start_time)
182
  processed_clips.append(processed_chunk)
183
+ temp_files.extend(chunk_temp_files)
184
 
185
  # Combinar chunks
186
  final_video = concatenate_videoclips(processed_clips, method="compose")
 
216
  raise
217
  finally:
218
  try:
219
+ # Cerrar recursos solo después de completar todo el procesamiento
220
  video_original.close()
221
  intro.close()
222
  outro.close()
223
+ for file in temp_files:
224
+ try:
225
+ os.remove(file)
226
+ except Exception as e:
227
+ logging.warning(f"Error limpiando {file}: {e}")
228
+ except Exception as e:
229
+ logging.warning(f"Error al cerrar recursos: {str(e)}")
230
 
231
  # Interfaz Gradio
232
  with gr.Blocks() as demo: