1littlecoder commited on
Commit
10dcfc7
·
verified ·
1 Parent(s): 564a2a6

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +20 -12
app.py CHANGED
@@ -1,6 +1,7 @@
1
  import gradio as gr
2
  import numpy as np
3
  from moviepy.editor import AudioFileClip, ImageClip, CompositeVideoClip
 
4
  import tempfile
5
  import os
6
 
@@ -8,29 +9,36 @@ def create_waveform_video(image, audio_path):
8
  # Save uploaded image temporarily
9
  image_path = tempfile.mktemp(suffix=".png")
10
  video_path = tempfile.mktemp(suffix=".mp4")
 
11
 
12
  image.save(image_path)
13
 
14
  # Load audio
15
  audio_clip = AudioFileClip(audio_path)
16
 
 
 
 
 
 
 
 
 
 
 
 
17
  # Load image and create a video clip of the same duration as the audio
18
- img_clip = ImageClip(image_path).set_duration(audio_clip.duration)
19
- img_clip = img_clip.resize(height=720) # Resize image to a suitable video height
20
-
21
- # Generate waveform effect as a video
22
- waveform = audio_clip.to_soundarray(fps=22050) # Convert audio to waveform array
23
- waveform = waveform.mean(axis=1) # Convert stereo to mono by averaging channels
24
-
25
- # Normalize waveform for overlay
26
- waveform = np.interp(waveform, (waveform.min(), waveform.max()), (-1, 1))
27
-
28
- # Combine image and audio into one video
29
- final_clip = img_clip.set_audio(audio_clip)
30
  final_clip.write_videofile(video_path, codec="libx264", fps=24)
31
 
32
  # Cleanup temporary files
33
  os.remove(image_path)
 
34
 
35
  return video_path
36
 
 
1
  import gradio as gr
2
  import numpy as np
3
  from moviepy.editor import AudioFileClip, ImageClip, CompositeVideoClip
4
+ import matplotlib.pyplot as plt
5
  import tempfile
6
  import os
7
 
 
9
  # Save uploaded image temporarily
10
  image_path = tempfile.mktemp(suffix=".png")
11
  video_path = tempfile.mktemp(suffix=".mp4")
12
+ waveform_path = tempfile.mktemp(suffix=".png")
13
 
14
  image.save(image_path)
15
 
16
  # Load audio
17
  audio_clip = AudioFileClip(audio_path)
18
 
19
+ # Generate waveform as an image
20
+ waveform = audio_clip.to_soundarray(fps=22050).mean(axis=1) # Convert stereo to mono
21
+ waveform = np.interp(waveform, (waveform.min(), waveform.max()), (-1, 1)) # Normalize
22
+
23
+ # Plot waveform using matplotlib
24
+ plt.figure(figsize=(10, 2))
25
+ plt.plot(waveform, color="blue")
26
+ plt.axis("off")
27
+ plt.savefig(waveform_path, bbox_inches="tight", pad_inches=0)
28
+ plt.close()
29
+
30
  # Load image and create a video clip of the same duration as the audio
31
+ img_clip = ImageClip(image_path).set_duration(audio_clip.duration).resize(height=720)
32
+ waveform_clip = ImageClip(waveform_path).set_duration(audio_clip.duration).resize(width=img_clip.w)
33
+ waveform_clip = waveform_clip.set_position(("center", img_clip.h - waveform_clip.h - 20))
34
+
35
+ # Combine image, waveform overlay, and audio into one video
36
+ final_clip = CompositeVideoClip([img_clip, waveform_clip.set_opacity(0.7)]).set_audio(audio_clip)
 
 
 
 
 
 
37
  final_clip.write_videofile(video_path, codec="libx264", fps=24)
38
 
39
  # Cleanup temporary files
40
  os.remove(image_path)
41
+ os.remove(waveform_path)
42
 
43
  return video_path
44