VideoStory/video.py
2025-04-20 11:41:31 +02:00

68 lines
2.3 KiB
Python

import os
from moviepy import *
def create_video(image_folder, audio_folder, output_video):
# Get sorted lists of images and audio files
images = []
audio_files = []
for i in range(len([name for name in os.listdir('./images')])):
images.append(f"./images/{i}.png")
audio_files.append(f"./audios/{i}.wav")
clips = []
for img, audio in zip(images, audio_files):
# Create an ImageClip
img_path = os.path.join(image_folder, img)
image_clip = ImageClip(img_path)
# Create an AudioFileClip
audio_path = os.path.join(audio_folder, audio)
audio_clip = AudioFileClip(audio_path)
audio_clip = CompositeAudioClip([audio_clip])
# Set the duration of the image clip to the duration of the audio clip
image_clip = image_clip.with_duration(audio_clip.duration)
# Set the audio of the image clip
image_clip.audio = audio_clip
# Append the image clip to the list of clips
clips.append(image_clip)
# Concatenate all the clips into a single video
final_video = concatenate_videoclips(clips, method="compose")
# Write the result to a file
final_video.write_videofile(output_video, codec='libx264', audio_codec='aac', fps=24)
"""
import os
from moviepy import *
def create_video_from_images_and_audio(image_folder, audio_folder, output_video):
video_files = []
audio_files = []
for i in range(len([name for name in os.listdir('./images')])):
video_files.append(f"./videos/{i}.mp4")
audio_files.append(f"./audios/{i}.wav")
audio_clip = AudioFileClip(audio_file)
audio_duration = audio_clip.duration
clips = []
for video, audio in zip(video_files, audio_files):
video_clip = VideoFileClip(video_path)
audio_clip = AudioFileClip(audio_path)
if video_clip.duration < audio_clip.duration:
loops_needed = int(audio_clip.duration // video_clip.duration) + 1
video_clip = video_clip.loop(loops=loops_needed)
video_clip = video_clip.subclip(0, audio_clip.duration)
video_clip = video_clip.set_audio(audio_clip)
clips.append(video_clip)
final_video = concatenate_videoclips(clips, method="compose")
final_video.write_videofile(output_video, codec='libx264', audio_codec='aac', fps=24)
"""