Source code for moviepy.video.fx.MasksOr
from dataclasses import dataclass
from typing import Union
import numpy as np
from moviepy.Clip import Clip
from moviepy.Effect import Effect
from moviepy.video.VideoClip import ImageClip
[docs]
@dataclass
class MasksOr(Effect):
"""Returns the logical 'or' (maximum pixel color values) between two masks.
The result has the duration of the clip to which has been applied, if it has any.
Parameters
----------
other_clip ImageClip or np.ndarray
Clip used to mask the original clip.
Examples
--------
.. code:: python
clip = ColorClip(color=(255, 0, 0), size=(1, 1)) # red
mask = ColorClip(color=(0, 255, 0), size=(1, 1)) # green
masked_clip = clip.with_effects([vfx.MasksOr(mask)]) # yellow
masked_clip.get_frame(0)
[[[255 255 0]]]
"""
other_clip: Union[Clip, np.ndarray]
[docs]
def apply(self, clip: Clip) -> Clip:
"""Apply the effect to the clip."""
# to ensure that 'or' of two ImageClips will be an ImageClip
if isinstance(self.other_clip, ImageClip):
self.other_clip = self.other_clip.img
if isinstance(self.other_clip, np.ndarray):
return clip.image_transform(
lambda frame: np.maximum(frame, self.other_clip)
)
else:
return clip.transform(
lambda get_frame, t: np.maximum(
get_frame(t), self.other_clip.get_frame(t)
)
)