Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -23,7 +23,6 @@ MUSIC_BG = "musicafondo.mp3"
|
|
23 |
FX_SOUND = "fxsound.mp3"
|
24 |
WATERMARK = "watermark.png"
|
25 |
EJEMPLO_VIDEO = "ejemplo.mp4" # Video de ejemplo en el root
|
26 |
-
OUTPUT_DIR = "output_videos" # Carpeta para videos finales
|
27 |
|
28 |
# Validar existencia de archivos obligatorios
|
29 |
for file in [INTRO_VIDEO, OUTRO_VIDEO, MUSIC_BG, FX_SOUND, WATERMARK, EJEMPLO_VIDEO]:
|
@@ -31,9 +30,6 @@ for file in [INTRO_VIDEO, OUTRO_VIDEO, MUSIC_BG, FX_SOUND, WATERMARK, EJEMPLO_VI
|
|
31 |
logging.error(f"Falta archivo necesario: {file}")
|
32 |
raise FileNotFoundError(f"Falta archivo necesario: {file}")
|
33 |
|
34 |
-
# Crear carpeta de salida si no existe
|
35 |
-
os.makedirs(OUTPUT_DIR, exist_ok=True)
|
36 |
-
|
37 |
def eliminar_archivo_tiempo(ruta, delay=1800):
|
38 |
"""Elimina un archivo despu茅s de 'delay' segundos (30 minutos por defecto)."""
|
39 |
def eliminar():
|
@@ -162,16 +158,21 @@ async def procesar_video(video_input, texto_tts, voz_seleccionada, metodo_corte,
|
|
162 |
# Procesar audio
|
163 |
audio_final = await procesar_audio(texto_tts, voz_seleccionada, duracion_total, duracion_intro, duracion_video_editado)
|
164 |
|
165 |
-
# Renderizar video final
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
|
|
|
|
|
|
|
|
|
|
171 |
|
172 |
# Programar eliminaci贸n del video en 30 minutos
|
173 |
eliminar_archivo_tiempo(output_path, delay=1800)
|
174 |
-
logging.info(f"Video
|
175 |
return output_path
|
176 |
except Exception as e:
|
177 |
logging.error(f"Error durante el procesamiento: {e}")
|
|
|
23 |
FX_SOUND = "fxsound.mp3"
|
24 |
WATERMARK = "watermark.png"
|
25 |
EJEMPLO_VIDEO = "ejemplo.mp4" # Video de ejemplo en el root
|
|
|
26 |
|
27 |
# Validar existencia de archivos obligatorios
|
28 |
for file in [INTRO_VIDEO, OUTRO_VIDEO, MUSIC_BG, FX_SOUND, WATERMARK, EJEMPLO_VIDEO]:
|
|
|
30 |
logging.error(f"Falta archivo necesario: {file}")
|
31 |
raise FileNotFoundError(f"Falta archivo necesario: {file}")
|
32 |
|
|
|
|
|
|
|
33 |
def eliminar_archivo_tiempo(ruta, delay=1800):
|
34 |
"""Elimina un archivo despu茅s de 'delay' segundos (30 minutos por defecto)."""
|
35 |
def eliminar():
|
|
|
158 |
# Procesar audio
|
159 |
audio_final = await procesar_audio(texto_tts, voz_seleccionada, duracion_total, duracion_intro, duracion_video_editado)
|
160 |
|
161 |
+
# Renderizar video final como archivo temporal accesible para Gradio
|
162 |
+
with tempfile.NamedTemporaryFile(suffix=".mp4", delete=False) as tmp:
|
163 |
+
video_final.set_audio(audio_final).write_videofile(
|
164 |
+
tmp.name,
|
165 |
+
codec="libx264",
|
166 |
+
audio_codec="aac",
|
167 |
+
temp_audiofile="temp-audio.m4a",
|
168 |
+
remove_temp=True,
|
169 |
+
fps=24
|
170 |
+
)
|
171 |
+
output_path = tmp.name
|
172 |
|
173 |
# Programar eliminaci贸n del video en 30 minutos
|
174 |
eliminar_archivo_tiempo(output_path, delay=1800)
|
175 |
+
logging.info(f"Video temporal listo para Gradio: {output_path}")
|
176 |
return output_path
|
177 |
except Exception as e:
|
178 |
logging.error(f"Error durante el procesamiento: {e}")
|