gnosticdev commited on
Commit
e9c1d02
verified
1 Parent(s): 9b60d0a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +56 -11
app.py CHANGED
@@ -344,39 +344,83 @@ def create_video(script_text: str, generate_script: bool, music_path: str | None
344
  if not video_paths:
345
  raise RuntimeError("No se pudieron descargar videos de Pexels")
346
 
347
- # Paso 4: Procesar videos - VERSI脫N SIMPLIFICADA
348
  update_task_progress(task_id, f"Paso 4/7: Procesando {len(video_paths)} videos...")
349
  video_clips = []
350
 
351
- for path in video_paths:
352
  clip = None
353
  try:
354
- # Cargar el video
355
  clip = VideoFileClip(path)
356
  if clip is None:
 
357
  continue
358
 
359
- # Tomar m谩ximo 8 segundos de cada clip
 
 
 
 
 
 
360
  duration = min(8, clip.duration)
361
  processed_clip = clip.subclip(0, duration)
362
 
363
- # Normalizar el clip
 
 
 
 
 
364
  processed_clip = normalize_clip(processed_clip)
365
 
366
  if processed_clip is not None:
367
  video_clips.append(processed_clip)
 
 
 
 
 
368
 
369
  except Exception as e:
370
- logger.error(f"Error procesando video {path}: {e}")
371
  finally:
 
372
  if clip is not None:
373
  clip.close()
374
 
375
- if not video_clips:
376
- raise RuntimeError("No se pudieron procesar los videos")
377
 
378
- # Concatenar videos
379
- base_video = concatenate_videoclips(video_clips, method="chain")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
380
 
381
  # Extender video si es m谩s corto que el audio
382
  if base_video.duration < video_duration:
@@ -429,7 +473,8 @@ def create_video(script_text: str, generate_script: bool, music_path: str | None
429
  base_video.close()
430
  final_video.close()
431
  for clip in video_clips:
432
- clip.close()
 
433
 
434
  return output_path
435
 
 
344
  if not video_paths:
345
  raise RuntimeError("No se pudieron descargar videos de Pexels")
346
 
347
+ # Paso 4: Procesar videos - MANEJO CORRECTO DE CLIPS NULOS
348
  update_task_progress(task_id, f"Paso 4/7: Procesando {len(video_paths)} videos...")
349
  video_clips = []
350
 
351
+ for i, path in enumerate(video_paths):
352
  clip = None
353
  try:
354
+ # Cargar el video - SI FALLA, CONTINUAR CON EL SIGUIENTE
355
  clip = VideoFileClip(path)
356
  if clip is None:
357
+ logger.error(f"Video {i+1} no se pudo cargar: {path}")
358
  continue
359
 
360
+ # Verificar que el clip tenga duraci贸n
361
+ if clip.duration <= 0:
362
+ logger.error(f"Video {i+1} tiene duraci贸n inv谩lida: {path}")
363
+ clip.close()
364
+ continue
365
+
366
+ # Tomar m谩ximo 8 segundos - SI FALLA, CONTINUAR
367
  duration = min(8, clip.duration)
368
  processed_clip = clip.subclip(0, duration)
369
 
370
+ if processed_clip is None:
371
+ logger.error(f"No se pudo recortar el video {i+1}: {path}")
372
+ clip.close()
373
+ continue
374
+
375
+ # Normalizar el clip - SI FALLA, CONTINUAR
376
  processed_clip = normalize_clip(processed_clip)
377
 
378
  if processed_clip is not None:
379
  video_clips.append(processed_clip)
380
+ logger.info(f"Video {i+1} procesado exitosamente: {path}")
381
+ else:
382
+ logger.error(f"No se pudo normalizar el video {i+1}: {path}")
383
+ processed_clip.close()
384
+ clip.close()
385
 
386
  except Exception as e:
387
+ logger.error(f"Error procesando video {i+1} {path}: {e}")
388
  finally:
389
+ # Asegurarse de cerrar el clip original si existe
390
  if clip is not None:
391
  clip.close()
392
 
393
+ logger.info(f"Videos procesados exitosamente: {len(video_clips)} de {len(video_paths)}")
 
394
 
395
+ # Si no hay videos v谩lidos, crear video de respaldo
396
+ if not video_clips:
397
+ logger.warning("No se procesaron videos v谩lidos, creando video de respaldo...")
398
+ base_video = ColorClip(
399
+ size=TARGET_RESOLUTION,
400
+ color=(0, 0, 0),
401
+ duration=video_duration
402
+ )
403
+ base_video.fps = TARGET_FPS
404
+ else:
405
+ # Concatenar videos - MANEJO DE ERROR
406
+ try:
407
+ base_video = concatenate_videoclips(video_clips, method="chain")
408
+ if base_video is None:
409
+ raise RuntimeError("La concatenaci贸n devolvi贸 None")
410
+ logger.info(f"Videos concatenados exitosamente. Duraci贸n: {base_video.duration}s")
411
+ except Exception as e:
412
+ logger.error(f"Error concatenando videos: {e}")
413
+ # Cerrar todos los clips antes de crear respaldo
414
+ for clip in video_clips:
415
+ if clip is not None:
416
+ clip.close()
417
+ # Crear video de respaldo
418
+ base_video = ColorClip(
419
+ size=TARGET_RESOLUTION,
420
+ color=(0, 0, 0),
421
+ duration=video_duration
422
+ )
423
+ base_video.fps = TARGET_FPS
424
 
425
  # Extender video si es m谩s corto que el audio
426
  if base_video.duration < video_duration:
 
473
  base_video.close()
474
  final_video.close()
475
  for clip in video_clips:
476
+ if clip is not None:
477
+ clip.close()
478
 
479
  return output_path
480