Update app.py
Browse files
app.py
CHANGED
@@ -12,25 +12,29 @@ def convertir_mov_a_mp4(ruta_mov):
|
|
12 |
return ruta_mp4
|
13 |
|
14 |
# Funci贸n para procesar los videos
|
15 |
-
def process_videos(videos,
|
16 |
clips = []
|
17 |
errores = [] # Para almacenar los videos que no se pudieron procesar
|
18 |
|
19 |
# Procesar cada video cargado
|
20 |
-
for
|
21 |
try:
|
22 |
if video_path.endswith('.MOV'):
|
23 |
# Convertir MOV a MP4
|
24 |
video_path = convertir_mov_a_mp4(video_path)
|
25 |
if video_path.endswith(('.mp4')):
|
26 |
-
clip = VideoFileClip(video_path).
|
27 |
|
28 |
-
#
|
29 |
-
if
|
|
|
|
|
|
|
|
|
30 |
clip = clip.rotate(90)
|
31 |
-
elif
|
32 |
clip = clip.rotate(180)
|
33 |
-
elif
|
34 |
clip = clip.rotate(270)
|
35 |
|
36 |
clips.append(clip)
|
@@ -41,7 +45,7 @@ def process_videos(videos, rotations, song):
|
|
41 |
|
42 |
# Si no se proces贸 ning煤n video, mostrar los errores
|
43 |
if len(clips) == 0:
|
44 |
-
return None,
|
45 |
|
46 |
# Mezclar los clips en orden aleatorio
|
47 |
random.shuffle(clips)
|
@@ -61,26 +65,25 @@ def process_videos(videos, rotations, song):
|
|
61 |
output_path = "output_video.mp4"
|
62 |
final_clip.write_videofile(output_path, codec="libx264", audio_codec="aac")
|
63 |
|
64 |
-
|
|
|
65 |
except Exception as e:
|
66 |
-
return None,
|
67 |
|
68 |
# Crear la interfaz de Gradio
|
69 |
-
def process_individual_video(video):
|
70 |
-
return video
|
71 |
-
|
72 |
-
video_inputs = [gr.Video(label=f"Sube el video {i+1}", type="filepath") for i in range(5)]
|
73 |
-
rotation_inputs = [gr.Radio(["Sin rotaci贸n", "90 grados", "180 grados", "270 grados"], label=f"Rotar video {i+1}") for i in range(5)]
|
74 |
-
|
75 |
demo = gr.Interface(
|
76 |
fn=process_videos,
|
77 |
-
inputs=
|
|
|
|
|
|
|
|
|
78 |
outputs=[
|
79 |
gr.Video(label="Previsualiza tu video procesado"), # Para mostrar el video en un reproductor
|
80 |
gr.File(label="Descargar video procesado") # Para permitir la descarga del video final
|
81 |
],
|
82 |
title="Mezclar y Unir Videos con Rotaci贸n y M煤sica",
|
83 |
-
description="Sube varios videos,
|
84 |
)
|
85 |
|
86 |
# Ejecutar la interfaz
|
|
|
12 |
return ruta_mp4
|
13 |
|
14 |
# Funci贸n para procesar los videos
|
15 |
+
def process_videos(videos, rotate_option, song):
|
16 |
clips = []
|
17 |
errores = [] # Para almacenar los videos que no se pudieron procesar
|
18 |
|
19 |
# Procesar cada video cargado
|
20 |
+
for video_path in videos:
|
21 |
try:
|
22 |
if video_path.endswith('.MOV'):
|
23 |
# Convertir MOV a MP4
|
24 |
video_path = convertir_mov_a_mp4(video_path)
|
25 |
if video_path.endswith(('.mp4')):
|
26 |
+
clip = VideoFileClip(video_path).without_audio() # Eliminar el audio original del video
|
27 |
|
28 |
+
# Recortar el video a los primeros 3 segundos
|
29 |
+
if clip.duration > 3:
|
30 |
+
clip = clip.subclip(0, 3)
|
31 |
+
|
32 |
+
# Aplicar la rotaci贸n seg煤n la opci贸n seleccionada
|
33 |
+
if rotate_option == "90 grados":
|
34 |
clip = clip.rotate(90)
|
35 |
+
elif rotate_option == "180 grados":
|
36 |
clip = clip.rotate(180)
|
37 |
+
elif rotate_option == "270 grados":
|
38 |
clip = clip.rotate(270)
|
39 |
|
40 |
clips.append(clip)
|
|
|
45 |
|
46 |
# Si no se proces贸 ning煤n video, mostrar los errores
|
47 |
if len(clips) == 0:
|
48 |
+
return None, None # Devolver None para ambas salidas si hay errores
|
49 |
|
50 |
# Mezclar los clips en orden aleatorio
|
51 |
random.shuffle(clips)
|
|
|
65 |
output_path = "output_video.mp4"
|
66 |
final_clip.write_videofile(output_path, codec="libx264", audio_codec="aac")
|
67 |
|
68 |
+
# Devolver la ruta del video para previsualizaci贸n y descarga
|
69 |
+
return output_path, output_path
|
70 |
except Exception as e:
|
71 |
+
return None, None # Devolver None en caso de errores
|
72 |
|
73 |
# Crear la interfaz de Gradio
|
|
|
|
|
|
|
|
|
|
|
|
|
74 |
demo = gr.Interface(
|
75 |
fn=process_videos,
|
76 |
+
inputs=[
|
77 |
+
gr.Files(label="Sube tus videos (MP4, MOV)", file_count="multiple", type="filepath"),
|
78 |
+
gr.Radio(["Sin rotaci贸n", "90 grados", "180 grados", "270 grados"], label="Rotar video"),
|
79 |
+
gr.Audio(label="Sube una canci贸n", type="filepath") # A帽adir un campo para subir la canci贸n
|
80 |
+
],
|
81 |
outputs=[
|
82 |
gr.Video(label="Previsualiza tu video procesado"), # Para mostrar el video en un reproductor
|
83 |
gr.File(label="Descargar video procesado") # Para permitir la descarga del video final
|
84 |
],
|
85 |
title="Mezclar y Unir Videos con Rotaci贸n y M煤sica",
|
86 |
+
description="Sube varios videos, rec贸rtalos, m茅zclalos, reemplaza el audio con una canci贸n y aplica una rotaci贸n.",
|
87 |
)
|
88 |
|
89 |
# Ejecutar la interfaz
|