gnosticdev commited on
Commit
6b4aac3
·
verified ·
1 Parent(s): 4b1a4d6

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +53 -43
app.py CHANGED
@@ -34,15 +34,19 @@ def upload_to_google_drive(file_path):
34
 
35
  # Ajustar música de fondo
36
  def adjust_background_music(video_duration, music_file):
37
- music = AudioFileClip(music_file)
38
- if music.duration < video_duration:
39
- repetitions = int(video_duration / music.duration) + 1
40
- music_clips = [music] * repetitions
41
- music = concatenate_audioclips(music_clips)
42
- if music.duration > video_duration:
43
- music = music.subclip(0, video_duration)
44
- music = music.volumex(0.2)
45
- return music
 
 
 
 
46
 
47
  # Concatenar múltiples videos de Pexels
48
  def concatenate_pexels_videos(text, num_videos=5, target_width=1920, target_height=1080):
@@ -61,7 +65,7 @@ def concatenate_pexels_videos(text, num_videos=5, target_width=1920, target_heig
61
  print(f"Enlace encontrado para '{sentence}': {link}")
62
 
63
  # Descargar el video desde Pexels
64
- video_response = requests.get(link)
65
  if video_response.status_code != 200:
66
  print(f"Error al descargar video desde {link}: Código de estado {video_response.status_code}")
67
  continue
@@ -100,27 +104,32 @@ def concatenate_pexels_videos(text, num_videos=5, target_width=1920, target_heig
100
 
101
  # Combinar audio, video y música
102
  def combine_audio_video(audio_file, video_clip, music_clip=None):
103
- audio_clip = AudioFileClip(audio_file)
104
- total_duration = audio_clip.duration + 5
105
- if video_clip.duration < total_duration:
106
- video_clip = video_clip.loop(duration=total_duration)
107
- video_clip = video_clip.set_duration(total_duration).fadeout(5)
108
- final_clip = video_clip.set_audio(audio_clip)
109
-
110
- if music_clip:
111
- if music_clip.duration < total_duration:
112
- repetitions = int(total_duration / music_clip.duration) + 1
113
- music_clips = [music_clip] * repetitions
114
- music_clip = concatenate_audioclips(music_clips)
115
- if music_clip.duration > total_duration:
116
- music_clip = music_clip.subclip(0, total_duration)
117
- music_clip = music_clip.audio_fadeout(5)
118
- final_clip = final_clip.set_audio(CompositeAudioClip([audio_clip, music_clip]))
119
-
120
- output_filename = f"final_video_{int(time.time())}.mp4"
121
- output_path = os.path.join(output_folder, output_filename)
122
- final_clip.write_videofile(output_path, codec="libx264", audio_codec="aac", fps=24)
123
- return output_path
 
 
 
 
 
124
 
125
  # Función principal
126
  def process_input(text, txt_file, mp3_file, selected_voice, rate, pitch):
@@ -130,34 +139,35 @@ def process_input(text, txt_file, mp3_file, selected_voice, rate, pitch):
130
  elif txt_file is not None:
131
  final_text = txt_file.decode("utf-8")
132
  else:
133
- return "No input provided"
134
 
135
  voices = asyncio.run(get_voices())
136
  if selected_voice not in voices:
137
- return f"La voz '{selected_voice}' no es válida. Por favor, seleccione una de las siguientes voces: {', '.join(voices.keys())}"
138
 
139
- try:
140
- audio_file = asyncio.run(text_to_speech(final_text, selected_voice, rate, pitch))
141
- except Exception as e:
142
- return f"Error con la voz seleccionada: {e}"
143
 
144
- try:
145
- video_clip = concatenate_pexels_videos(final_text, num_videos=5)
146
- except Exception as e:
147
- return f"Error al buscar videos en Pexels: {e}"
148
 
 
149
  if mp3_file is not None:
150
  music_clip = adjust_background_music(video_clip.duration, mp3_file.name)
151
  else:
152
  music_clip = None
153
 
 
154
  final_video_path = combine_audio_video(audio_file, video_clip, music_clip)
155
- upload_to_google_drive(final_video_path) # Sube el video final a Google Drive
 
 
 
156
  return final_video_path
157
 
158
  except Exception as e:
159
  print(f"Error durante el procesamiento: {e}")
160
- return f"Error durante el procesamiento: {e}"
161
 
162
  # Interfaz Gradio
163
  with gr.Blocks() as demo:
 
34
 
35
  # Ajustar música de fondo
36
  def adjust_background_music(video_duration, music_file):
37
+ try:
38
+ music = AudioFileClip(music_file)
39
+ if music.duration < video_duration:
40
+ repetitions = int(video_duration / music.duration) + 1
41
+ music_clips = [music] * repetitions
42
+ music = concatenate_audioclips(music_clips)
43
+ if music.duration > video_duration:
44
+ music = music.subclip(0, video_duration)
45
+ music = music.volumex(0.2)
46
+ return music
47
+ except Exception as e:
48
+ print(f"Error al ajustar música de fondo: {e}")
49
+ return None
50
 
51
  # Concatenar múltiples videos de Pexels
52
  def concatenate_pexels_videos(text, num_videos=5, target_width=1920, target_height=1080):
 
65
  print(f"Enlace encontrado para '{sentence}': {link}")
66
 
67
  # Descargar el video desde Pexels
68
+ video_response = requests.get(link, stream=True)
69
  if video_response.status_code != 200:
70
  print(f"Error al descargar video desde {link}: Código de estado {video_response.status_code}")
71
  continue
 
104
 
105
  # Combinar audio, video y música
106
  def combine_audio_video(audio_file, video_clip, music_clip=None):
107
+ try:
108
+ audio_clip = AudioFileClip(audio_file)
109
+ total_duration = audio_clip.duration + 5
110
+ if video_clip.duration < total_duration:
111
+ video_clip = video_clip.loop(duration=total_duration)
112
+ video_clip = video_clip.set_duration(total_duration).fadeout(5)
113
+ final_clip = video_clip.set_audio(audio_clip)
114
+
115
+ if music_clip:
116
+ if music_clip.duration < total_duration:
117
+ repetitions = int(total_duration / music_clip.duration) + 1
118
+ music_clips = [music_clip] * repetitions
119
+ music_clip = concatenate_audioclips(music_clips)
120
+ if music_clip.duration > total_duration:
121
+ music_clip = music_clip.subclip(0, total_duration)
122
+ music_clip = music_clip.audio_fadeout(5)
123
+ final_clip = final_clip.set_audio(CompositeAudioClip([audio_clip, music_clip]))
124
+
125
+ output_filename = f"final_video_{int(time.time())}.mp4"
126
+ output_path = os.path.join(output_folder, output_filename)
127
+ final_clip.write_videofile(output_path, codec="libx264", audio_codec="aac", fps=24)
128
+ return output_path
129
+
130
+ except Exception as e:
131
+ print(f"Error al combinar audio, video y música: {e}")
132
+ return None
133
 
134
  # Función principal
135
  def process_input(text, txt_file, mp3_file, selected_voice, rate, pitch):
 
139
  elif txt_file is not None:
140
  final_text = txt_file.decode("utf-8")
141
  else:
142
+ return None
143
 
144
  voices = asyncio.run(get_voices())
145
  if selected_voice not in voices:
146
+ return None
147
 
148
+ # Generar audio con TTS
149
+ audio_file = asyncio.run(text_to_speech(final_text, selected_voice, rate, pitch))
 
 
150
 
151
+ # Concatenar videos de Pexels
152
+ video_clip = concatenate_pexels_videos(final_text, num_videos=5)
 
 
153
 
154
+ # Ajustar música de fondo
155
  if mp3_file is not None:
156
  music_clip = adjust_background_music(video_clip.duration, mp3_file.name)
157
  else:
158
  music_clip = None
159
 
160
+ # Combinar audio, video y música
161
  final_video_path = combine_audio_video(audio_file, video_clip, music_clip)
162
+
163
+ # Subir el video final a Google Drive
164
+ upload_to_google_drive(final_video_path)
165
+
166
  return final_video_path
167
 
168
  except Exception as e:
169
  print(f"Error durante el procesamiento: {e}")
170
+ return None
171
 
172
  # Interfaz Gradio
173
  with gr.Blocks() as demo: