gnosticdev commited on
Commit
511d2ce
·
verified ·
1 Parent(s): 5662f62

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +34 -23
app.py CHANGED
@@ -14,11 +14,10 @@ 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"
18
  EJEMPLO_VIDEO = "ejemplo.mp4"
19
 
20
  # Validar existencia de archivos
21
- for file in [INTRO_VIDEO, OUTRO_VIDEO, MUSIC_BG, FX_GLITCH, EJEMPLO_VIDEO]:
22
  if not os.path.exists(file):
23
  logging.error(f"Falta archivo necesario: {file}")
24
  raise FileNotFoundError(f"Falta: {file}")
@@ -79,19 +78,6 @@ async def procesar_audio(texto, voz, duracion_video, audio_original):
79
  except Exception as e:
80
  logging.warning(f"Error limpiando {file}: {e}")
81
 
82
- def agregar_glitch(video, intervalo=40):
83
- """Agrega glitch cada X segundos SIN afectar el video principal"""
84
- glitch = VideoFileClip(FX_GLITCH)
85
- duracion_video = video.duration
86
-
87
- glitches = []
88
- for t in range(intervalo, math.ceil(duracion_video), intervalo):
89
- glitch_clip = glitch.set_start(t).set_pos("center")
90
- glitches.append(glitch_clip)
91
-
92
- # Superponer glitches al video original (sin alterarlo)
93
- return CompositeVideoClip([video] + glitches)
94
-
95
  async def procesar_video(video_input, texto_tts, voz_seleccionada):
96
  try:
97
  # Cargar componentes
@@ -111,16 +97,17 @@ async def procesar_video(video_input, texto_tts, voz_seleccionada):
111
  audio_original
112
  )
113
 
114
- # Agregar glitch al video original
115
- video_con_glitch = agregar_glitch(video_original, intervalo=40)
116
 
117
- # Combinar video con glitch y audio
118
- video_con_glitch = video_con_glitch.set_audio(audio_final)
119
 
120
- # Concatenar intro + video + outro SIN alteraciones
121
  video_final = concatenate_videoclips(
122
- [intro, video_con_glitch, outro],
123
- method="compose" # Usar "compose" para evitar problemas de grid
 
124
  )
125
 
126
  # Renderizar video final
@@ -148,4 +135,28 @@ with gr.Blocks() as demo:
148
  texto_tts = gr.Textbox(
149
  label="Texto para TTS",
150
  lines=3,
151
- placeholder="Escribe aquí tu
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  INTRO_VIDEO = "introvideo.mp4"
15
  OUTRO_VIDEO = "outrovideo.mp4"
16
  MUSIC_BG = "musicafondo.mp3"
 
17
  EJEMPLO_VIDEO = "ejemplo.mp4"
18
 
19
  # Validar existencia de archivos
20
+ for file in [INTRO_VIDEO, OUTRO_VIDEO, MUSIC_BG, EJEMPLO_VIDEO]:
21
  if not os.path.exists(file):
22
  logging.error(f"Falta archivo necesario: {file}")
23
  raise FileNotFoundError(f"Falta: {file}")
 
78
  except Exception as e:
79
  logging.warning(f"Error limpiando {file}: {e}")
80
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81
  async def procesar_video(video_input, texto_tts, voz_seleccionada):
82
  try:
83
  # Cargar componentes
 
97
  audio_original
98
  )
99
 
100
+ # Asegurar que el video original mantenga su velocidad
101
+ video_original = video_original.fx(vfx.speedx, 1.0) # Velocidad normal
102
 
103
+ # Combinar video con audio
104
+ video_con_audio = video_original.set_audio(audio_final)
105
 
106
+ # Concatenar intro + video + outro SIN redimensionar
107
  video_final = concatenate_videoclips(
108
+ [intro, video_con_audio, outro],
109
+ method="compose", # Evitar problemas de grid
110
+ padding=0 # Sin espacio entre clips
111
  )
112
 
113
  # Renderizar video final
 
135
  texto_tts = gr.Textbox(
136
  label="Texto para TTS",
137
  lines=3,
138
+ placeholder="Escribe aquí tu texto..."
139
+ )
140
+ voz_seleccionada = gr.Dropdown(
141
+ label="Voz",
142
+ choices=["es-ES-AlvaroNeural", "es-MX-BeatrizNeural"],
143
+ value="es-ES-AlvaroNeural"
144
+ )
145
+ procesar_btn = gr.Button("Generar Video")
146
+ video_output = gr.Video(label="Video Procesado")
147
+
148
+ with gr.Accordion("Ejemplos de Uso", open=False):
149
+ gr.Examples(
150
+ examples=[[EJEMPLO_VIDEO, "¡Hola! Esto es una prueba. Suscríbete al canal."]],
151
+ inputs=[video_input, texto_tts],
152
+ label="Ejemplos"
153
+ )
154
+
155
+ procesar_btn.click(
156
+ procesar_video,
157
+ inputs=[video_input, texto_tts, voz_seleccionada],
158
+ outputs=video_output
159
+ )
160
+
161
+ if __name__ == "__main__":
162
+ demo.queue().launch()