Spaces:
Running
on
L40S
Running
on
L40S
from moviepy.editor import VideoFileClip, VideoClip, ImageClip, CompositeVideoClip, ImageSequenceClip | |
from moviepy.editor import VideoFileClip, clips_array | |
import os | |
import argparse | |
def write_video(vclip, fps=25, save_path='res.mp4'): | |
if isinstance(vclip, list): | |
vclip = ImageSequenceClip(vclip, fps=fps) | |
vclip.write_videofile(save_path, codec="libx264") | |
def load_video(vpath): | |
return VideoFileClip(vpath) | |
def concat_video_clips(clips, videos_per_row=3): | |
if isinstance(clips[0], str): | |
clips = [VideoFileClip(v) for v in clips] | |
elif not isinstance(clips[0], VideoFileClip): | |
print(f'Find {len(clips)} clips') | |
min_duration = min(clip.duration for clip in clips) | |
clips = [clip.subclip(0, min_duration) for clip in clips] | |
rows = [clips[i:i + videos_per_row] for i in range(0, len(clips), videos_per_row)] | |
final_clip = clips_array(rows) | |
return final_clip | |
def concat_video_and_frames(vpath, frames): | |
vclip1 = VideoClip(vpath) | |
vclip2 = ImageSequenceClip(frames, fps=25) | |
clips = concat_video_clips([vclip1, vclip2]) | |
return clips | |
def concat_img_video(vclip, img): | |
if isinstance(vclip, str): | |
vclip = VideoFileClip(vclip) | |
image_clip = ImageClip(img).set_duration(vclip.duration) | |
image_clip = image_clip.resize(height=vclip.size[1]) | |
total_width = vclip.size[0] + image_clip.size[0] | |
total_height = max(vclip.size[1], image_clip.size[1]) | |
composite_clip = CompositeVideoClip([ | |
image_clip.set_position('left'), vclip.set_position((image_clip.size[0], 0)), ], | |
size=(total_width, total_height)) | |
return composite_clip | |