gnosticdev commited on
Commit
ee5aeee
verified
1 Parent(s): d80bdda

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +23 -15
app.py CHANGED
@@ -37,7 +37,10 @@ async def procesar_audio(texto, voz):
37
  # Calcular duraci贸n total (intro + contenido + outro)
38
  intro = VideoFileClip(INTRO_VIDEO).duration
39
  outro = VideoFileClip(OUTRO_VIDEO).duration
40
- duracion_total = intro + outro + VideoFileClip(video_input).duration
 
 
 
41
 
42
  # Preparar m煤sica de fondo en loop
43
  bg_music = AudioSegment.from_mp3(MUSIC_BG) - 10 # 10% volumen
@@ -118,7 +121,7 @@ async def procesar_video(
118
  video_final = concatenate_videoclips([intro, video_editado, outro])
119
 
120
  # Generar audio (m煤sica en loop + TTS despu茅s de intro)
121
- audio_mix_path = await procesar_audio(texto_tts, voz_seleccionada, video_input)
122
 
123
  # Combinar video y audio
124
  video_final = video_final.set_audio(AudioFileClip(audio_mix_path))
@@ -148,29 +151,34 @@ async def procesar_video(
148
  with gr.Blocks() as demo:
149
  gr.Markdown("# Video Editor IA")
150
  gr.Markdown("""
151
- **Ejemplo de timeline generado:**
152
- - 0s-3s: Intro (video + m煤sica)
153
- - 3s-23s: Contenido editado (video + m煤sica + TTS)
154
- - 23s-26s: Outro (video + m煤sica con fade-out)
155
  """)
156
-
157
  with gr.Tab("Principal"):
158
- video_input = gr.Video(label="Subir video (ej: 20s de duraci贸n)")
159
- texto_tts = gr.Textbox(label="Texto para TTS", lines=3)
160
  voz_seleccionada = gr.Dropdown(
161
  label="Voz",
162
- choices=["es-ES-AlvaroNeural", "es-MX-BeatrizNeural"]
 
163
  )
164
- procesar_btn = gr.Button("Generar Video")
165
- video_output = gr.Video(label="Resultado")
166
-
167
- with gr.Tab("Ajustes"):
168
  metodo_corte = gr.Radio(
169
  ["inteligente", "manual"],
170
  label="M茅todo de corte",
171
  value="inteligente"
172
  )
173
- duracion_corte = gr.Slider(1, 60, 10, label="Duraci贸n por corte (solo manual)")
 
 
 
 
 
 
 
 
 
174
 
175
  procesar_btn.click(
176
  procesar_video,
 
37
  # Calcular duraci贸n total (intro + contenido + outro)
38
  intro = VideoFileClip(INTRO_VIDEO).duration
39
  outro = VideoFileClip(OUTRO_VIDEO).duration
40
+
41
+ # Obtener duraci贸n del video principal
42
+ video_principal = VideoFileClip("ejemplo.mp4")
43
+ duracion_total = intro + outro + video_principal.duration
44
 
45
  # Preparar m煤sica de fondo en loop
46
  bg_music = AudioSegment.from_mp3(MUSIC_BG) - 10 # 10% volumen
 
121
  video_final = concatenate_videoclips([intro, video_editado, outro])
122
 
123
  # Generar audio (m煤sica en loop + TTS despu茅s de intro)
124
+ audio_mix_path = await procesar_audio(texto_tts, voz_seleccionada)
125
 
126
  # Combinar video y audio
127
  video_final = video_final.set_audio(AudioFileClip(audio_mix_path))
 
151
  with gr.Blocks() as demo:
152
  gr.Markdown("# Video Editor IA")
153
  gr.Markdown("""
154
+ **Ejemplo preconfigurado:**
155
+ - Video: `ejemplo.mp4` (duraci贸n aproximada: 20s)
156
+ - Texto TTS: "Este es un ejemplo de texto sintetizado usando TTS. La m煤sica suena en loop durante todo el video."
 
157
  """)
158
+
159
  with gr.Tab("Principal"):
160
+ video_input = gr.Video(label="Subir video (opcional)")
161
+ texto_tts = gr.Textbox(label="Texto para TTS", value="Este es un ejemplo de texto sintetizado usando TTS. La m煤sica suena en loop durante todo el video.")
162
  voz_seleccionada = gr.Dropdown(
163
  label="Voz",
164
+ choices=["es-ES-AlvaroNeural", "es-MX-BeatrizNeural"],
165
+ value="es-ES-AlvaroNeural"
166
  )
 
 
 
 
167
  metodo_corte = gr.Radio(
168
  ["inteligente", "manual"],
169
  label="M茅todo de corte",
170
  value="inteligente"
171
  )
172
+ duracion_corte = gr.Slider(1, 60, 10, label="Duraci贸n por corte (solo manual)", value=10)
173
+ procesar_btn = gr.Button("Generar Video")
174
+ video_output = gr.Video(label="Resultado")
175
+
176
+ # EJEMPLO PREDEFINIDO EN EL FOOTER DE GRADIO
177
+ demo.load(
178
+ lambda: "ejemplo.mp4",
179
+ inputs=None,
180
+ outputs=video_input
181
+ )
182
 
183
  procesar_btn.click(
184
  procesar_video,