gnosticdev commited on
Commit
7002418
verified
1 Parent(s): 6e7fd28

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +20 -15
app.py CHANGED
@@ -6,7 +6,6 @@ from moviepy.editor import *
6
  import edge_tts
7
  import gradio as gr
8
  from pydub import AudioSegment
9
- import math # <-- M贸dulo faltante
10
 
11
  # Configuraci贸n de Logs
12
  logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")
@@ -15,10 +14,10 @@ logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(
15
  INTRO_VIDEO = "introvideo.mp4"
16
  OUTRO_VIDEO = "outrovideo.mp4"
17
  MUSIC_BG = "musicafondo.mp3"
18
- FX_GLITCH = "glitch.mp4" # Aseg煤rate que este archivo exista
19
  EJEMPLO_VIDEO = "ejemplo.mp4"
20
 
21
- # Validar existencia de archivos al inicio
22
  for file in [INTRO_VIDEO, OUTRO_VIDEO, MUSIC_BG, FX_GLITCH, EJEMPLO_VIDEO]:
23
  if not os.path.exists(file):
24
  logging.error(f"Falta archivo necesario: {file}")
@@ -58,13 +57,13 @@ async def procesar_audio(texto, voz, duracion_video):
58
 
59
  with tempfile.NamedTemporaryFile(delete=False, suffix=".mp3") as tmp_bg:
60
  bg_music.export(tmp_bg.name, format="mp3")
61
- bg_audio = AudioFileClip(tmp_bg.name).volumex(0.2)
62
  temp_files.append(tmp_bg.name)
63
 
64
  # Combinar audios
65
  audio_final = CompositeAudioClip([
66
  bg_audio.set_duration(duracion_video),
67
- tts_audio.volumex(0.8).set_start(0)
68
  ]).set_duration(duracion_video)
69
 
70
  return audio_final
@@ -80,15 +79,18 @@ async def procesar_audio(texto, voz, duracion_video):
80
  logging.warning(f"Error limpiando {file}: {e}")
81
 
82
  def agregar_glitch(video, intervalo=40):
83
- """Agrega glitch cada X segundos sin alterar el video"""
84
- duracion_total = video.duration # <-- Variable definida
85
- glitch = VideoFileClip(FX_GLITCH).set_duration(0.5)
 
86
 
87
- # Crear clips de glitch en los intervalos
88
  glitches = []
89
- for t in range(intervalo, math.ceil(duracion_total), intervalo): # <-- Usar duracion_total
90
- glitches.append(glitch.set_start(t).set_pos("center"))
 
91
 
 
92
  return CompositeVideoClip([video] + glitches)
93
 
94
  async def procesar_video(video_input, texto_tts, voz_seleccionada):
@@ -98,7 +100,7 @@ async def procesar_video(video_input, texto_tts, voz_seleccionada):
98
  outro = VideoFileClip(OUTRO_VIDEO)
99
  video_original = VideoFileClip(video_input)
100
 
101
- # Duraci贸n total del video editado
102
  duracion_video = video_original.duration
103
 
104
  # Procesar audio
@@ -107,10 +109,13 @@ async def procesar_video(video_input, texto_tts, voz_seleccionada):
107
  # Agregar glitch al video original
108
  video_con_glitch = agregar_glitch(video_original, intervalo=40)
109
 
110
- # Combinar con intro/outro
 
 
 
111
  video_final = concatenate_videoclips(
112
  [intro, video_con_glitch, outro],
113
- method="chain"
114
  )
115
 
116
  # Renderizar video final
@@ -119,7 +124,7 @@ async def procesar_video(video_input, texto_tts, voz_seleccionada):
119
  tmp.name,
120
  codec="libx264",
121
  audio_codec="aac",
122
- fps=24,
123
  threads=4,
124
  verbose=False
125
  )
 
6
  import edge_tts
7
  import gradio as gr
8
  from pydub import AudioSegment
 
9
 
10
  # Configuraci贸n de Logs
11
  logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")
 
14
  INTRO_VIDEO = "introvideo.mp4"
15
  OUTRO_VIDEO = "outrovideo.mp4"
16
  MUSIC_BG = "musicafondo.mp3"
17
+ FX_GLITCH = "glitch.mp4" # Glitch con su duraci贸n original
18
  EJEMPLO_VIDEO = "ejemplo.mp4"
19
 
20
+ # Validar existencia de archivos
21
  for file in [INTRO_VIDEO, OUTRO_VIDEO, MUSIC_BG, FX_GLITCH, EJEMPLO_VIDEO]:
22
  if not os.path.exists(file):
23
  logging.error(f"Falta archivo necesario: {file}")
 
57
 
58
  with tempfile.NamedTemporaryFile(delete=False, suffix=".mp3") as tmp_bg:
59
  bg_music.export(tmp_bg.name, format="mp3")
60
+ bg_audio = AudioFileClip(tmp_bg.name).volumex(0.15)
61
  temp_files.append(tmp_bg.name)
62
 
63
  # Combinar audios
64
  audio_final = CompositeAudioClip([
65
  bg_audio.set_duration(duracion_video),
66
+ tts_audio.volumex(0.85).set_start(0)
67
  ]).set_duration(duracion_video)
68
 
69
  return audio_final
 
79
  logging.warning(f"Error limpiando {file}: {e}")
80
 
81
  def agregar_glitch(video, intervalo=40):
82
+ """Agrega glitch cada X segundos SIN modificar el video original"""
83
+ glitch = VideoFileClip(FX_GLITCH) # Usar duraci贸n real del glitch
84
+ duracion_glitch = glitch.duration
85
+ duracion_video = video.duration
86
 
87
+ # Crear glitches en intervalos
88
  glitches = []
89
+ for t in range(intervalo, math.ceil(duracion_video), intervalo):
90
+ glitch_clip = glitch.set_start(t).set_pos("center")
91
+ glitches.append(glitch_clip)
92
 
93
+ # Superponer glitches al video original
94
  return CompositeVideoClip([video] + glitches)
95
 
96
  async def procesar_video(video_input, texto_tts, voz_seleccionada):
 
100
  outro = VideoFileClip(OUTRO_VIDEO)
101
  video_original = VideoFileClip(video_input)
102
 
103
+ # Duraci贸n del video editado (sin intro/outro)
104
  duracion_video = video_original.duration
105
 
106
  # Procesar audio
 
109
  # Agregar glitch al video original
110
  video_con_glitch = agregar_glitch(video_original, intervalo=40)
111
 
112
+ # Combinar video con glitch y audio
113
+ video_con_glitch = video_con_glitch.set_audio(audio_final)
114
+
115
+ # Concatenar intro + video + outro
116
  video_final = concatenate_videoclips(
117
  [intro, video_con_glitch, outro],
118
+ method="chain" # Concatenaci贸n secuencial
119
  )
120
 
121
  # Renderizar video final
 
124
  tmp.name,
125
  codec="libx264",
126
  audio_codec="aac",
127
+ fps=video_original.fps, # Mantener FPS original
128
  threads=4,
129
  verbose=False
130
  )