Create app.py
Browse files
app.py
ADDED
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import gradio as gr
|
2 |
+
from moviepy.editor import VideoFileClip, concatenate_videoclips
|
3 |
+
import random
|
4 |
+
|
5 |
+
# Función para procesar los videos
|
6 |
+
def process_videos(videos, rotate_option):
|
7 |
+
clips = []
|
8 |
+
|
9 |
+
# Cargar y recortar cada video a los primeros 3 segundos
|
10 |
+
for video in videos:
|
11 |
+
clip = VideoFileClip(video.name)
|
12 |
+
|
13 |
+
# Recortar el video a los primeros 3 segundos
|
14 |
+
if clip.duration > 3:
|
15 |
+
clip = clip.subclip(0, 3)
|
16 |
+
|
17 |
+
# Aplicar la rotación seleccionada
|
18 |
+
if rotate_option == "90 grados":
|
19 |
+
clip = clip.rotate(90)
|
20 |
+
elif rotate_option == "180 grados":
|
21 |
+
clip = clip.rotate(180)
|
22 |
+
elif rotate_option == "270 grados":
|
23 |
+
clip = clip.rotate(270)
|
24 |
+
|
25 |
+
clips.append(clip)
|
26 |
+
|
27 |
+
# Mezclar los clips en orden aleatorio
|
28 |
+
random.shuffle(clips)
|
29 |
+
|
30 |
+
# Unir los clips mezclados
|
31 |
+
final_clip = concatenate_videoclips(clips)
|
32 |
+
|
33 |
+
# Guardar el video unido en un archivo
|
34 |
+
output_path = "output_video.mp4"
|
35 |
+
final_clip.write_videofile(output_path, codec="libx264")
|
36 |
+
|
37 |
+
# Devolver la ruta del archivo final
|
38 |
+
return output_path
|
39 |
+
|
40 |
+
# Crear la interfaz de Gradio
|
41 |
+
iface = gr.Interface(
|
42 |
+
fn=process_videos,
|
43 |
+
inputs=[
|
44 |
+
gr.Video(type="file", label="Sube tus videos", file_count="multiple"),
|
45 |
+
gr.Radio(["Sin rotación", "90 grados", "180 grados", "270 grados"], label="Rotar video")
|
46 |
+
],
|
47 |
+
outputs=gr.File(label="Video unido de salida"),
|
48 |
+
title="Mezclar y Unir Videos con Rotación",
|
49 |
+
description="Sube varios videos en formato 9:16. El sistema cortará los primeros 3 segundos de cada video, los mezclará en un orden aleatorio, aplicará la rotación seleccionada y generará un nuevo archivo de video.",
|
50 |
+
button_text="Procesar Video"
|
51 |
+
)
|
52 |
+
|
53 |
+
# Ejecutar la interfaz
|
54 |
+
iface.launch()
|