Spaces:
Building
Building
Update app.py
Browse files
app.py
CHANGED
@@ -63,17 +63,33 @@ def concatenate_pexels_videos(text, num_videos=5):
|
|
63 |
tmp_video.write(video_response.content)
|
64 |
video_clips.append(VideoFileClip(tmp_video.name))
|
65 |
|
|
|
66 |
final_clip = concatenate_videoclips(video_clips, method="compose")
|
67 |
-
|
68 |
-
final_clip.write_videofile(output_path, codec="libx264", audio_codec="aac", fps=24)
|
69 |
-
return output_path
|
70 |
|
71 |
-
# Combinar audio, video y m煤sica
|
72 |
def combine_audio_video(audio_file, video_clip, music_clip=None):
|
73 |
audio_clip = AudioFileClip(audio_file)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
74 |
final_clip = video_clip.set_audio(audio_clip)
|
|
|
|
|
75 |
if music_clip:
|
76 |
final_clip = final_clip.set_audio(CompositeAudioClip([audio_clip, music_clip]))
|
|
|
|
|
77 |
output_path = tempfile.NamedTemporaryFile(delete=False, suffix=".mp4").name
|
78 |
final_clip.write_videofile(output_path, codec="libx264", audio_codec="aac", fps=24)
|
79 |
return output_path
|
@@ -101,8 +117,7 @@ def process_input(text, txt_file, mp3_file, selected_voice, rate, pitch):
|
|
101 |
|
102 |
# Concatenar m煤ltiples videos de Pexels basados en el texto
|
103 |
try:
|
104 |
-
|
105 |
-
video_clip = VideoFileClip(video_clip_path)
|
106 |
except Exception as e:
|
107 |
return f"Error al buscar videos en Pexels: {e}", None
|
108 |
|
@@ -112,7 +127,7 @@ def process_input(text, txt_file, mp3_file, selected_voice, rate, pitch):
|
|
112 |
else:
|
113 |
music_clip = None
|
114 |
|
115 |
-
# Combinar audio, video y m煤sica
|
116 |
final_video = combine_audio_video(audio_file, video_clip, music_clip)
|
117 |
return final_video
|
118 |
|
|
|
63 |
tmp_video.write(video_response.content)
|
64 |
video_clips.append(VideoFileClip(tmp_video.name))
|
65 |
|
66 |
+
# Concatenar videos y ajustar duraci贸n
|
67 |
final_clip = concatenate_videoclips(video_clips, method="compose")
|
68 |
+
return final_clip
|
|
|
|
|
69 |
|
70 |
+
# Combinar audio, video y m煤sica con fade out
|
71 |
def combine_audio_video(audio_file, video_clip, music_clip=None):
|
72 |
audio_clip = AudioFileClip(audio_file)
|
73 |
+
|
74 |
+
# Ajustar la duraci贸n del video al timeline del speech (+5 segundos para fade out)
|
75 |
+
total_duration = audio_clip.duration + 5 # 5 segundos adicionales
|
76 |
+
if video_clip.duration < total_duration:
|
77 |
+
video_clip = video_clip.fx(lambda clip: clip.set_duration(total_duration)) # Extender la duraci贸n del video
|
78 |
+
|
79 |
+
# Aplicar fade out al audio
|
80 |
+
audio_clip = audio_clip.fadeout(5)
|
81 |
+
|
82 |
+
# Aplicar fade out al video
|
83 |
+
video_clip = video_clip.fadeout(5)
|
84 |
+
|
85 |
+
# Combinar audio y video
|
86 |
final_clip = video_clip.set_audio(audio_clip)
|
87 |
+
|
88 |
+
# A帽adir m煤sica de fondo si aplica
|
89 |
if music_clip:
|
90 |
final_clip = final_clip.set_audio(CompositeAudioClip([audio_clip, music_clip]))
|
91 |
+
|
92 |
+
# Exportar el video final
|
93 |
output_path = tempfile.NamedTemporaryFile(delete=False, suffix=".mp4").name
|
94 |
final_clip.write_videofile(output_path, codec="libx264", audio_codec="aac", fps=24)
|
95 |
return output_path
|
|
|
117 |
|
118 |
# Concatenar m煤ltiples videos de Pexels basados en el texto
|
119 |
try:
|
120 |
+
video_clip = concatenate_pexels_videos(final_text, num_videos=5)
|
|
|
121 |
except Exception as e:
|
122 |
return f"Error al buscar videos en Pexels: {e}", None
|
123 |
|
|
|
127 |
else:
|
128 |
music_clip = None
|
129 |
|
130 |
+
# Combinar audio, video y m煤sica con fade out
|
131 |
final_video = combine_audio_video(audio_file, video_clip, music_clip)
|
132 |
return final_video
|
133 |
|