Spaces:
Build error
Build error
File size: 1,211 Bytes
375c12f |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
import numpy as np
from PIL import Image
import tempfile
from moviepy.editor import ImageClip, AudioArrayClip
import scipy
def create_video(image: "PIL.Image", audio: tuple, duration: float) -> str:
# Convert image to numpy array
img_array = np.array(image)
# Unpack audio data
sample_rate, audio_data = audio
# Ensure audio is the correct duration
target_samples = int(duration * sample_rate)
if audio_data.shape[1] > target_samples:
audio_data = audio_data[:, :target_samples]
else:
# Pad audio if too short
padding = target_samples - audio_data.shape[1]
audio_data = np.pad(audio_data, ((0, 0), (0, padding)), mode='constant')
# Create video clip
img_clip = ImageClip(img_array, duration=duration)
# Create audio clip
audio_clip = AudioArrayClip(audio_data.T, fps=sample_rate)
img_clip = img_clip.set_audio(audio_clip)
# Save to temporary file
with tempfile.NamedTemporaryFile(suffix=".mp4", delete=False) as tmpfile:
img_clip.write_videofile(
tmpfile.name,
fps=24,
audio_codec="aac",
logger=None
)
return tmpfile.name |