gnosticdev commited on
Commit
5accea7
verified
1 Parent(s): 7002418

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +18 -12
app.py CHANGED
@@ -2,6 +2,7 @@ import tempfile
2
  import logging
3
  import os
4
  import asyncio
 
5
  from moviepy.editor import *
6
  import edge_tts
7
  import gradio as gr
@@ -14,7 +15,7 @@ logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(
14
  INTRO_VIDEO = "introvideo.mp4"
15
  OUTRO_VIDEO = "outrovideo.mp4"
16
  MUSIC_BG = "musicafondo.mp3"
17
- FX_GLITCH = "glitch.mp4" # Glitch con su duraci贸n original
18
  EJEMPLO_VIDEO = "ejemplo.mp4"
19
 
20
  # Validar existencia de archivos
@@ -34,7 +35,7 @@ def eliminar_archivo_tiempo(ruta, delay=1800):
34
  from threading import Timer
35
  Timer(delay, eliminar).start()
36
 
37
- async def procesar_audio(texto, voz, duracion_video):
38
  temp_files = []
39
  try:
40
  # Generar TTS
@@ -61,11 +62,12 @@ async def procesar_audio(texto, voz, duracion_video):
61
  temp_files.append(tmp_bg.name)
62
 
63
  # Combinar audios
64
- audio_final = CompositeAudioClip([
65
- bg_audio.set_duration(duracion_video),
66
- tts_audio.volumex(0.85).set_start(0)
67
- ]).set_duration(duracion_video)
68
 
 
69
  return audio_final
70
 
71
  except Exception as e:
@@ -79,9 +81,8 @@ async def procesar_audio(texto, voz, duracion_video):
79
  logging.warning(f"Error limpiando {file}: {e}")
80
 
81
  def agregar_glitch(video, intervalo=40):
82
- """Agrega glitch cada X segundos SIN modificar el video original"""
83
- glitch = VideoFileClip(FX_GLITCH) # Usar duraci贸n real del glitch
84
- duracion_glitch = glitch.duration
85
  duracion_video = video.duration
86
 
87
  # Crear glitches en intervalos
@@ -90,7 +91,6 @@ def agregar_glitch(video, intervalo=40):
90
  glitch_clip = glitch.set_start(t).set_pos("center")
91
  glitches.append(glitch_clip)
92
 
93
- # Superponer glitches al video original
94
  return CompositeVideoClip([video] + glitches)
95
 
96
  async def procesar_video(video_input, texto_tts, voz_seleccionada):
@@ -99,12 +99,18 @@ async def procesar_video(video_input, texto_tts, voz_seleccionada):
99
  intro = VideoFileClip(INTRO_VIDEO)
100
  outro = VideoFileClip(OUTRO_VIDEO)
101
  video_original = VideoFileClip(video_input)
 
102
 
103
  # Duraci贸n del video editado (sin intro/outro)
104
  duracion_video = video_original.duration
105
 
106
  # Procesar audio
107
- audio_final = await procesar_audio(texto_tts, voz_seleccionada, duracion_video)
 
 
 
 
 
108
 
109
  # Agregar glitch al video original
110
  video_con_glitch = agregar_glitch(video_original, intervalo=40)
@@ -124,7 +130,7 @@ async def procesar_video(video_input, texto_tts, voz_seleccionada):
124
  tmp.name,
125
  codec="libx264",
126
  audio_codec="aac",
127
- fps=video_original.fps, # Mantener FPS original
128
  threads=4,
129
  verbose=False
130
  )
 
2
  import logging
3
  import os
4
  import asyncio
5
+ import math # <-- M贸dulo a帽adido
6
  from moviepy.editor import *
7
  import edge_tts
8
  import gradio as gr
 
15
  INTRO_VIDEO = "introvideo.mp4"
16
  OUTRO_VIDEO = "outrovideo.mp4"
17
  MUSIC_BG = "musicafondo.mp3"
18
+ FX_GLITCH = "glitch.mp4"
19
  EJEMPLO_VIDEO = "ejemplo.mp4"
20
 
21
  # Validar existencia de archivos
 
35
  from threading import Timer
36
  Timer(delay, eliminar).start()
37
 
38
+ async def procesar_audio(texto, voz, duracion_video, audio_original):
39
  temp_files = []
40
  try:
41
  # Generar TTS
 
62
  temp_files.append(tmp_bg.name)
63
 
64
  # Combinar audios
65
+ audios = [bg_audio.set_duration(duracion_video)]
66
+ if audio_original:
67
+ audios.append(audio_original.volumex(0.7)) # Audio original al 70%
68
+ audios.append(tts_audio.volumex(0.85).set_start(0)) # TTS al 85%
69
 
70
+ audio_final = CompositeAudioClip(audios).set_duration(duracion_video)
71
  return audio_final
72
 
73
  except Exception as e:
 
81
  logging.warning(f"Error limpiando {file}: {e}")
82
 
83
  def agregar_glitch(video, intervalo=40):
84
+ """Agrega glitch cada X segundos SIN alterar velocidad"""
85
+ glitch = VideoFileClip(FX_GLITCH)
 
86
  duracion_video = video.duration
87
 
88
  # Crear glitches en intervalos
 
91
  glitch_clip = glitch.set_start(t).set_pos("center")
92
  glitches.append(glitch_clip)
93
 
 
94
  return CompositeVideoClip([video] + glitches)
95
 
96
  async def procesar_video(video_input, texto_tts, voz_seleccionada):
 
99
  intro = VideoFileClip(INTRO_VIDEO)
100
  outro = VideoFileClip(OUTRO_VIDEO)
101
  video_original = VideoFileClip(video_input)
102
+ audio_original = video_original.audio
103
 
104
  # Duraci贸n del video editado (sin intro/outro)
105
  duracion_video = video_original.duration
106
 
107
  # Procesar audio
108
+ audio_final = await procesar_audio(
109
+ texto_tts,
110
+ voz_seleccionada,
111
+ duracion_video,
112
+ audio_original
113
+ )
114
 
115
  # Agregar glitch al video original
116
  video_con_glitch = agregar_glitch(video_original, intervalo=40)
 
130
  tmp.name,
131
  codec="libx264",
132
  audio_codec="aac",
133
+ fps=video_original.fps,
134
  threads=4,
135
  verbose=False
136
  )