Source code for moviepy.video.fx.SlideOut

from dataclasses import dataclass

from moviepy.Clip import Clip
from moviepy.Effect import Effect


[docs] @dataclass class SlideOut(Effect): """Makes the clip goes away by one side of the screen. Only works when the clip is included in a CompositeVideoClip, and if the clip has the same size as the whole composition. Parameters ---------- clip : moviepy.Clip.Clip A video clip. duration : float Time taken for the clip to be fully visible side : str Side of the screen where the clip goes. One of 'top', 'bottom', 'left' or 'right'. Examples -------- .. code:: python from moviepy import * clips = [... make a list of clips] slided_clips = [ CompositeVideoClip([clip.with_effects([vfx.SlideOut(1, "left")])]) for clip in clips ] final_clip = concatenate_videoclips(slided_clips, padding=-1) clip = ColorClip( color=(255, 0, 0), duration=1, size=(300, 300) ).with_fps(60) final_clip = CompositeVideoClip([clip.with_effects([vfx.SlideOut(1, "right")])]) """ duration: float side: str
[docs] def apply(self, clip: Clip) -> Clip: """Apply the effect to the clip.""" if clip.duration is None: raise ValueError("Attribute 'duration' not set") w, h = clip.size ts = clip.duration - self.duration # start time of the effect. pos_dict = { "left": lambda t: (min(0, w * (-(t - ts) / self.duration)), "center"), "right": lambda t: (max(0, w * ((t - ts) / self.duration)), "center"), "top": lambda t: ("center", min(0, h * (-(t - ts) / self.duration))), "bottom": lambda t: ("center", max(0, h * ((t - ts) / self.duration))), } return clip.with_position(pos_dict[self.side])