generated from thinkode/modelRepository
28 lines
686 B
Python
28 lines
686 B
Python
|
|
from dataclasses import dataclass
|
||
|
|
|
||
|
|
from moviepy.Effect import Effect
|
||
|
|
|
||
|
|
|
||
|
|
@dataclass
|
||
|
|
class Blink(Effect):
|
||
|
|
"""
|
||
|
|
Makes the clip blink. At each blink it will be displayed ``duration_on``
|
||
|
|
seconds and disappear ``duration_off`` seconds. Will only work in
|
||
|
|
composite clips.
|
||
|
|
"""
|
||
|
|
|
||
|
|
duration_on: float
|
||
|
|
duration_off: float
|
||
|
|
|
||
|
|
def apply(self, clip):
|
||
|
|
"""Apply the effect to the clip."""
|
||
|
|
if clip.mask is None:
|
||
|
|
clip = clip.with_mask()
|
||
|
|
|
||
|
|
duration = self.duration_on + self.duration_off
|
||
|
|
clip.mask = clip.mask.transform(
|
||
|
|
lambda get_frame, t: get_frame(t) * ((t % duration) < self.duration_on)
|
||
|
|
)
|
||
|
|
|
||
|
|
return clip
|