diff --git a/utils/video.py b/utils/video.py deleted file mode 100644 index a785df4..0000000 --- a/utils/video.py +++ /dev/null @@ -1,68 +0,0 @@ -from __future__ import annotations - -import re -from typing import Tuple - -from PIL import ImageFont, Image, ImageDraw, ImageEnhance -from moviepy.video.VideoClip import VideoClip, ImageClip -from moviepy.video.compositing.CompositeVideoClip import CompositeVideoClip - - -class Video: - def __init__(self, video: VideoClip, *args, **kwargs): - self.video: VideoClip = video - self.fps = self.video.fps - self.duration = self.video.duration - - @staticmethod - def _create_watermark(text, redditid, fontsize, opacity=0.5): - id = re.sub(r"[^\w\s-]", "", redditid["thread_id"]) - path = f"./assets/temp/{id}/png/watermark.png" - width = int(fontsize * len(text)) - height = int(fontsize * len(text) / 2) - white = (255, 255, 255) - transparent = (0, 0, 0, 0) - - font = ImageFont.load_default() - wm = Image.new("RGBA", (width, height), transparent) - im = Image.new("RGBA", (width, height), transparent) # Change this line too. - - draw = ImageDraw.Draw(wm) - w, h = draw.textsize(text, font) - draw.text(((width - w) / 2, (height - h) / 2), text, white, font) - en = ImageEnhance.Brightness(wm) # todo allow it to use the fontsize - mask = en.enhance(1 - opacity) - im.paste(wm, (25, 25), mask) - im.save(path) - return ImageClip(path) - - def add_watermark( - self, - text, - redditid, - opacity=0.5, - duration: int | float = 5, - position: Tuple = (0.7, 0.9), - fontsize=15, - ): - compensation = round( - ( - position[0] - / ((len(text) * (fontsize / 5) / 1.5) / 100 + position[0] * position[0]) - ), - ndigits=2, - ) - position = (compensation, position[1]) - # print(f'{compensation=}') - # print(f'{position=}') - img_clip = self._create_watermark( - text, redditid, fontsize=fontsize, opacity=opacity - ) - img_clip = img_clip.set_opacity(opacity).set_duration(duration) - img_clip = img_clip.set_position( - position, relative=True - ) # todo get dara from utils/CONSTANTS.py and adapt position accordingly - - # Overlay the img clip on the first video clip - self.video = CompositeVideoClip([self.video, img_clip]) - return self.video