Spaces:
Building
Building
Update app.py
Browse files
app.py
CHANGED
@@ -27,7 +27,7 @@ except ImportError:
|
|
27 |
except ImportError:
|
28 |
raise ImportError("Error cr铆tico: No se pudo instalar moviepy.editor. Verifica las dependencias.")
|
29 |
|
30 |
-
# Ajustar m煤sica de fondo
|
31 |
def adjust_background_music(video_duration, music_file):
|
32 |
music = AudioFileClip(music_file)
|
33 |
if music.duration < video_duration:
|
@@ -36,7 +36,7 @@ def adjust_background_music(video_duration, music_file):
|
|
36 |
music = concatenate_audioclips(music_clips)
|
37 |
if music.duration > video_duration:
|
38 |
music = music.subclip(0, video_duration)
|
39 |
-
music = music.volumex(0.2)
|
40 |
return music
|
41 |
|
42 |
# Combinar audio, video y m煤sica
|
@@ -46,18 +46,16 @@ def combine_audio_video(audio_file, video_clip, music_clip=None):
|
|
46 |
if music_clip:
|
47 |
final_clip = final_clip.set_audio(CompositeAudioClip([audio_clip, music_clip]))
|
48 |
output_path = tempfile.NamedTemporaryFile(delete=False, suffix=".mp4").name
|
49 |
-
final_clip.write_videofile(output_path, codec="libx264", audio_codec="aac")
|
50 |
return output_path
|
51 |
|
52 |
# Funci贸n principal
|
53 |
-
def process_input(text, txt_file, mp3_file,
|
54 |
try:
|
55 |
if text.strip():
|
56 |
final_text = text
|
57 |
elif txt_file is not None:
|
58 |
final_text = txt_file.decode("utf-8")
|
59 |
-
elif prompt.strip():
|
60 |
-
final_text = "Generated text from prompt"
|
61 |
else:
|
62 |
return "No input provided", None
|
63 |
|
@@ -108,7 +106,6 @@ with gr.Blocks() as demo:
|
|
108 |
text_input = gr.Textbox(label="Write your text here", lines=5)
|
109 |
txt_file_input = gr.File(label="Or upload a .txt file", file_types=[".txt"])
|
110 |
mp3_file_input = gr.File(label="Upload background music (.mp3)", file_types=[".mp3"])
|
111 |
-
prompt_input = gr.Textbox(label="Or enter a prompt to generate text")
|
112 |
voices = asyncio.run(get_voices()) # Obtener voces disponibles
|
113 |
voice_dropdown = gr.Dropdown(choices=list(voices.keys()), label="Select Voice")
|
114 |
rate_slider = gr.Slider(minimum=-50, maximum=50, value=0, label="Speech Rate Adjustment (%)", step=1)
|
@@ -120,7 +117,7 @@ with gr.Blocks() as demo:
|
|
120 |
btn = gr.Button("Generate Video")
|
121 |
btn.click(
|
122 |
process_input,
|
123 |
-
inputs=[text_input, txt_file_input, mp3_file_input,
|
124 |
outputs=output_video
|
125 |
)
|
126 |
|
|
|
27 |
except ImportError:
|
28 |
raise ImportError("Error cr铆tico: No se pudo instalar moviepy.editor. Verifica las dependencias.")
|
29 |
|
30 |
+
# Ajustar m煤sica de fondo (repetici贸n autom谩tica)
|
31 |
def adjust_background_music(video_duration, music_file):
|
32 |
music = AudioFileClip(music_file)
|
33 |
if music.duration < video_duration:
|
|
|
36 |
music = concatenate_audioclips(music_clips)
|
37 |
if music.duration > video_duration:
|
38 |
music = music.subclip(0, video_duration)
|
39 |
+
music = music.volumex(0.2) # Reducir volumen al 20%
|
40 |
return music
|
41 |
|
42 |
# Combinar audio, video y m煤sica
|
|
|
46 |
if music_clip:
|
47 |
final_clip = final_clip.set_audio(CompositeAudioClip([audio_clip, music_clip]))
|
48 |
output_path = tempfile.NamedTemporaryFile(delete=False, suffix=".mp4").name
|
49 |
+
final_clip.write_videofile(output_path, codec="libx264", audio_codec="aac", fps=24)
|
50 |
return output_path
|
51 |
|
52 |
# Funci贸n principal
|
53 |
+
def process_input(text, txt_file, mp3_file, selected_voice, rate, pitch):
|
54 |
try:
|
55 |
if text.strip():
|
56 |
final_text = text
|
57 |
elif txt_file is not None:
|
58 |
final_text = txt_file.decode("utf-8")
|
|
|
|
|
59 |
else:
|
60 |
return "No input provided", None
|
61 |
|
|
|
106 |
text_input = gr.Textbox(label="Write your text here", lines=5)
|
107 |
txt_file_input = gr.File(label="Or upload a .txt file", file_types=[".txt"])
|
108 |
mp3_file_input = gr.File(label="Upload background music (.mp3)", file_types=[".mp3"])
|
|
|
109 |
voices = asyncio.run(get_voices()) # Obtener voces disponibles
|
110 |
voice_dropdown = gr.Dropdown(choices=list(voices.keys()), label="Select Voice")
|
111 |
rate_slider = gr.Slider(minimum=-50, maximum=50, value=0, label="Speech Rate Adjustment (%)", step=1)
|
|
|
117 |
btn = gr.Button("Generate Video")
|
118 |
btn.click(
|
119 |
process_input,
|
120 |
+
inputs=[text_input, txt_file_input, mp3_file_input, voice_dropdown, rate_slider, pitch_slider],
|
121 |
outputs=output_video
|
122 |
)
|
123 |
|