Spaces:
Building
Building
Update app.py
Browse files
app.py
CHANGED
@@ -2,7 +2,6 @@ import gradio as gr
|
|
2 |
from tts_module import get_voices, text_to_speech # Usamos el tts_module.py actualizado
|
3 |
from pexels_api import search_pexels
|
4 |
from moviepy.editor import AudioFileClip, VideoFileClip, CompositeAudioClip, concatenate_audioclips
|
5 |
-
|
6 |
import asyncio
|
7 |
import os
|
8 |
import requests
|
@@ -39,6 +38,34 @@ def adjust_background_music(video_duration, music_file):
|
|
39 |
music = music.volumex(0.2) # Reducir volumen al 20%
|
40 |
return music
|
41 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
# Combinar audio, video y música
|
43 |
def combine_audio_video(audio_file, video_clip, music_clip=None):
|
44 |
audio_clip = AudioFileClip(audio_file)
|
@@ -70,24 +97,13 @@ def process_input(text, txt_file, mp3_file, selected_voice, rate, pitch):
|
|
70 |
except Exception as e:
|
71 |
return f"Error con la voz seleccionada: {e}", None
|
72 |
|
73 |
-
#
|
74 |
-
query = " ".join(final_text.split(".")[:2]) # Usar las dos primeras oraciones como consulta
|
75 |
-
if not query.strip():
|
76 |
-
query = "generic" # Consulta genérica si no hay suficiente texto
|
77 |
-
|
78 |
try:
|
79 |
-
|
80 |
-
|
81 |
-
return "No se encontraron videos en Pexels para la consulta proporcionada.", None
|
82 |
except Exception as e:
|
83 |
return f"Error al buscar videos en Pexels: {e}", None
|
84 |
|
85 |
-
# Descargar video de Pexels
|
86 |
-
video_response = requests.get(video_links[0])
|
87 |
-
with tempfile.NamedTemporaryFile(delete=False, suffix=".mp4") as tmp_video:
|
88 |
-
tmp_video.write(video_response.content)
|
89 |
-
video_clip = VideoFileClip(tmp_video.name)
|
90 |
-
|
91 |
# Ajustar música de fondo
|
92 |
if mp3_file is not None:
|
93 |
music_clip = adjust_background_music(video_clip.duration, mp3_file.name)
|
|
|
2 |
from tts_module import get_voices, text_to_speech # Usamos el tts_module.py actualizado
|
3 |
from pexels_api import search_pexels
|
4 |
from moviepy.editor import AudioFileClip, VideoFileClip, CompositeAudioClip, concatenate_audioclips
|
|
|
5 |
import asyncio
|
6 |
import os
|
7 |
import requests
|
|
|
38 |
music = music.volumex(0.2) # Reducir volumen al 20%
|
39 |
return music
|
40 |
|
41 |
+
# Concatenar múltiples videos de Pexels
|
42 |
+
def concatenate_pexels_videos(text, num_videos=5):
|
43 |
+
sentences = [sentence.strip() for sentence in text.split(".") if sentence.strip()]
|
44 |
+
video_links = []
|
45 |
+
|
46 |
+
for sentence in sentences:
|
47 |
+
try:
|
48 |
+
links = search_pexels(sentence, num_results=num_videos)
|
49 |
+
video_links.append(links[0]) # Usamos el primer video encontrado para cada frase
|
50 |
+
except Exception as e:
|
51 |
+
print(f"Error al buscar video para la frase '{sentence}': {e}")
|
52 |
+
continue
|
53 |
+
|
54 |
+
if not video_links:
|
55 |
+
raise Exception("No se encontraron videos relevantes para el texto proporcionado.")
|
56 |
+
|
57 |
+
video_clips = []
|
58 |
+
for link in video_links:
|
59 |
+
video_response = requests.get(link)
|
60 |
+
with tempfile.NamedTemporaryFile(delete=False, suffix=".mp4") as tmp_video:
|
61 |
+
tmp_video.write(video_response.content)
|
62 |
+
video_clips.append(VideoFileClip(tmp_video.name))
|
63 |
+
|
64 |
+
final_clip = concatenate_videoclips(video_clips, method="compose")
|
65 |
+
output_path = tempfile.NamedTemporaryFile(delete=False, suffix=".mp4").name
|
66 |
+
final_clip.write_videofile(output_path, codec="libx264", audio_codec="aac", fps=24)
|
67 |
+
return output_path
|
68 |
+
|
69 |
# Combinar audio, video y música
|
70 |
def combine_audio_video(audio_file, video_clip, music_clip=None):
|
71 |
audio_clip = AudioFileClip(audio_file)
|
|
|
97 |
except Exception as e:
|
98 |
return f"Error con la voz seleccionada: {e}", None
|
99 |
|
100 |
+
# Concatenar múltiples videos de Pexels basados en el texto
|
|
|
|
|
|
|
|
|
101 |
try:
|
102 |
+
video_clip_path = concatenate_pexels_videos(final_text, num_videos=5)
|
103 |
+
video_clip = VideoFileClip(video_clip_path)
|
|
|
104 |
except Exception as e:
|
105 |
return f"Error al buscar videos en Pexels: {e}", None
|
106 |
|
|
|
|
|
|
|
|
|
|
|
|
|
107 |
# Ajustar música de fondo
|
108 |
if mp3_file is not None:
|
109 |
music_clip = adjust_background_music(video_clip.duration, mp3_file.name)
|