GAS17 commited on
Commit
c616197
1 Parent(s): 418dcc8

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +36 -68
app.py CHANGED
@@ -1,84 +1,52 @@
1
  import gradio as gr
2
- from moviepy.editor import VideoFileClip, concatenate_videoclips, AudioFileClip
3
- from moviepy.audio.fx.all import audio_fadeout
4
  import random
5
- import subprocess
6
- import os
7
 
8
- # Función para convertir MOV a MP4
9
- def convertir_mov_a_mp4(ruta_mov):
10
- ruta_mp4 = ruta_mov.replace('.MOV', '.mp4')
11
- subprocess.run(['ffmpeg', '-i', ruta_mov, '-vcodec', 'h264', '-acodec', 'aac', ruta_mp4], check=True)
12
- return ruta_mp4
13
-
14
- # Función para procesar los videos
15
- def process_videos(videos, rotations, song):
16
  clips = []
17
- errores = [] # Para almacenar los videos que no se pudieron procesar
18
-
19
- # Procesar cada video cargado
20
- for idx, video_path in enumerate(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).subclip(2) # Cortar los primeros 2 segundos
27
-
28
- # Aplicar la rotación seleccionada por el usuario para cada video
29
- if rotations[idx] == "90 grados":
30
- clip = clip.rotate(90)
31
- elif rotations[idx] == "180 grados":
32
- clip = clip.rotate(180)
33
- elif rotations[idx] == "270 grados":
34
- clip = clip.rotate(270)
35
-
36
- clips.append(clip)
37
- else:
38
- errores.append(f"Archivo no compatible: {video_path}")
39
- except Exception as e:
40
- errores.append(f"Error al procesar {video_path}: {str(e)}")
41
 
42
- # Si no se procesó ningún video, mostrar los errores
43
- if len(clips) == 0:
44
- return None, f"No se pudieron procesar los videos. Errores: {', '.join(errores)}"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
 
46
  # Mezclar los clips en orden aleatorio
47
  random.shuffle(clips)
48
 
49
- # Unir los clips
50
- try:
51
- final_clip = concatenate_videoclips(clips)
52
-
53
- # Añadir la canción y hacer que termine con un fade out
54
- if song:
55
- song_audio = AudioFileClip(song)
56
- song_audio = song_audio.subclip(0, final_clip.duration)
57
- song_audio = audio_fadeout(song_audio, 3) # Añadir fade out de 3 segundos al final de la canción
58
- final_clip = final_clip.set_audio(song_audio)
59
-
60
- # Guardar el video resultante
61
- output_path = "output_video.mp4"
62
- final_clip.write_videofile(output_path, codec="libx264", audio_codec="aac")
63
-
64
- return output_path, None # Devolver el archivo generado para la descarga y None para el error
65
- except Exception as e:
66
- return None, f"Error al concatenar los clips: {str(e)}"
67
 
68
  # Crear la interfaz de Gradio
69
- video_inputs = [gr.Video(label=f"Sube el video {i+1}") for i in range(5)] # Eliminar el argumento `type`
70
- rotation_inputs = [gr.Radio(["Sin rotación", "90 grados", "180 grados", "270 grados"], label=f"Rotar video {i+1}") for i in range(5)]
71
-
72
- demo = gr.Interface(
73
  fn=process_videos,
74
- inputs=video_inputs + rotation_inputs + [gr.Audio(label="Sube una canción")],
75
- outputs=[
76
- gr.Video(label="Previsualiza tu video procesado"), # Para mostrar el video en un reproductor
77
- gr.File(label="Descargar video procesado") # Para permitir la descarga del video final
78
  ],
79
- title="Mezclar y Unir Videos con Rotación y Música",
80
- description="Sube varios videos, corta los primeros 2 segundos, ajusta la rotación de cada uno, y añade música.",
 
81
  )
82
 
83
  # Ejecutar la interfaz
84
- demo.launch(share=True)
 
1
  import gradio as gr
2
+ from moviepy.editor import VideoFileClip, concatenate_videoclips
 
3
  import random
 
 
4
 
5
+ def process_videos(videos, rotate_option):
 
 
 
 
 
 
 
6
  clips = []
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
 
8
+ # Cargar y recortar cada video a los primeros 3 segundos
9
+ for video in videos:
10
+ clip = VideoFileClip(video.name)
11
+
12
+ # Recortar el video a los primeros 3 segundos
13
+ if clip.duration > 3:
14
+ clip = clip.subclip(0, 3)
15
+
16
+ # Aplicar la rotación seleccionada
17
+ if rotate_option == "90 grados":
18
+ clip = clip.rotate(90)
19
+ elif rotate_option == "180 grados":
20
+ clip = clip.rotate(180)
21
+ elif rotate_option == "270 grados":
22
+ clip = clip.rotate(270)
23
+
24
+ clips.append(clip)
25
 
26
  # Mezclar los clips en orden aleatorio
27
  random.shuffle(clips)
28
 
29
+ # Unir los clips mezclados
30
+ final_clip = concatenate_videoclips(clips)
31
+
32
+ # Guardar el video unido en un archivo
33
+ output_path = "output_video_rotated.mp4"
34
+ final_clip.write_videofile(output_path, codec="libx264")
35
+
36
+ # Devolver la ruta del archivo final
37
+ return output_path
 
 
 
 
 
 
 
 
 
38
 
39
  # Crear la interfaz de Gradio
40
+ iface = gr.Interface(
 
 
 
41
  fn=process_videos,
42
+ inputs=[
43
+ gr.Video(type="file", label="Sube tus videos", file_count="multiple"),
44
+ gr.Radio(["Sin rotación", "90 grados", "180 grados", "270 grados"], label="Rotar video")
 
45
  ],
46
+ outputs=gr.File(label="Video unido de salida"),
47
+ title="Mezclar y Unir Videos con Rotación",
48
+ 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."
49
  )
50
 
51
  # Ejecutar la interfaz
52
+ iface.launch()