|
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 |
|
|
|
|