Source code for moviepy.video.fx.BlackAndWhite

from dataclasses import dataclass

import numpy as np

from moviepy.Effect import Effect


[docs] @dataclass class BlackAndWhite(Effect): """Desaturates the picture, makes it black and white. Parameter RGB allows to set weights for the different color channels. If RBG is 'CRT_phosphor' a special set of values is used. preserve_luminosity maintains the sum of RGB to 1. """ RGB: str = None preserve_luminosity: bool = True
[docs] def apply(self, clip): """Apply the effect to the clip.""" if self.RGB is None: self.RGB = [1, 1, 1] if self.RGB == "CRT_phosphor": self.RGB = [0.2125, 0.7154, 0.0721] R, G, B = ( 1.0 * np.array(self.RGB) / (sum(self.RGB) if self.preserve_luminosity else 1) ) def filter(im): im = R * im[:, :, 0] + G * im[:, :, 1] + B * im[:, :, 2] return np.dstack(3 * [im]).astype("uint8") return clip.image_transform(filter)