tsi-org commited on
Commit
e164aea
·
verified ·
1 Parent(s): ea79407

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +20 -11
app.py CHANGED
@@ -1,4 +1,5 @@
1
  from moviepy.editor import VideoFileClip, concatenate_videoclips, AudioFileClip, CompositeAudioClip
 
2
  import streamlit as st
3
  import cv2
4
  import base64
@@ -92,18 +93,21 @@ def merge_audio_video(video_filename, audio_filename, output_filename, overlay_a
92
  video_clip = VideoFileClip(video_filename)
93
  audio_clip = AudioFileClip(audio_filename)
94
 
 
 
 
95
  if overlay_audio_path:
96
  overlay_clip = AudioFileClip(overlay_audio_path).volumex(0.2)
97
- audio_clip = CompositeAudioClip([audio_clip, overlay_clip.set_duration(audio_clip.duration)])
98
-
99
- # Continue with the rest of your function...
100
 
 
101
 
102
- if audio_clip.duration > video_clip.duration:
103
- last_frame = video_clip.to_ImageClip(t=video_clip.duration-1).set_duration(audio_clip.duration - video_clip.duration)
 
104
  video_clip = concatenate_videoclips([video_clip, last_frame])
105
 
106
- final_clip = video_clip.set_audio(audio_clip)
107
  final_clip.write_videofile(output_filename, codec='libx264', audio_codec="aac")
108
  video_clip.close()
109
  audio_clip.close()
@@ -130,11 +134,16 @@ overlay_audio_file = st.file_uploader("Upload overlay audio (optional)", type=["
130
 
131
  # After uploading, write it to a temporary file
132
  if overlay_audio_file is not None:
133
- overlay_audio_path = tempfile.NamedTemporaryFile(delete=False, suffix=".mp3").name
134
- with open(overlay_audio_path, 'wb') as f:
135
- f.write(overlay_audio_file.getvalue())
136
- # Now overlay_audio_path can be safely used with MoviePy
137
-
 
 
 
 
 
138
 
139
  voice_options = {'Echo (Male)': 'echo', 'Fable (Male)': 'fable', 'Onyx (Male)': 'onyx', 'Nova (Female)': 'nova', 'Shimmer (Female)': 'shimmer', 'Alloy (Female)': 'alloy'}
140
  option = st.selectbox('Choose the voice you want', list(voice_options.keys()))
 
1
  from moviepy.editor import VideoFileClip, concatenate_videoclips, AudioFileClip, CompositeAudioClip
2
+ import tempfile
3
  import streamlit as st
4
  import cv2
5
  import base64
 
93
  video_clip = VideoFileClip(video_filename)
94
  audio_clip = AudioFileClip(audio_filename)
95
 
96
+ audio_clips = [audio_clip] # Start with the main audio clip
97
+
98
+ # If there's an overlay audio file, add it to the composite
99
  if overlay_audio_path:
100
  overlay_clip = AudioFileClip(overlay_audio_path).volumex(0.2)
101
+ audio_clips.append(overlay_clip.set_duration(audio_clip.duration))
 
 
102
 
103
+ composite_audio_clip = CompositeAudioClip(audio_clips)
104
 
105
+ if composite_audio_clip.duration > video_clip.duration:
106
+ # Extend video with the last frame if audio is longer
107
+ last_frame = video_clip.to_ImageClip(t=video_clip.duration-1).set_duration(composite_audio_clip.duration - video_clip.duration)
108
  video_clip = concatenate_videoclips([video_clip, last_frame])
109
 
110
+ final_clip = video_clip.set_audio(composite_audio_clip)
111
  final_clip.write_videofile(output_filename, codec='libx264', audio_codec="aac")
112
  video_clip.close()
113
  audio_clip.close()
 
134
 
135
  # After uploading, write it to a temporary file
136
  if overlay_audio_file is not None:
137
+ # Create a temporary file
138
+ with tempfile.NamedTemporaryFile(delete=False, suffix=".mp3") as temp_file:
139
+ overlay_audio_path = temp_file.name
140
+ # Read content from the uploaded file
141
+ content = overlay_audio_file.read()
142
+ # Write content to the temporary file
143
+ temp_file.write(content)
144
+
145
+ # Now overlay_audio_path contains the path to the temporary file
146
+ # and can be safely used with MoviePy
147
 
148
  voice_options = {'Echo (Male)': 'echo', 'Fable (Male)': 'fable', 'Onyx (Male)': 'onyx', 'Nova (Female)': 'nova', 'Shimmer (Female)': 'shimmer', 'Alloy (Female)': 'alloy'}
149
  option = st.selectbox('Choose the voice you want', list(voice_options.keys()))