From 78ff605c42ce058d71304710822b481ee1afd61c Mon Sep 17 00:00:00 2001 From: Jason Date: Wed, 13 Jul 2022 22:20:17 -0400 Subject: [PATCH] everything works except for changes the location --- TTS/engine_wrapper.py | 2 +- requirements.txt | 2 ++ utils/video.py | 38 ++++++++++++++++++++++++++++---------- 3 files changed, 31 insertions(+), 11 deletions(-) diff --git a/TTS/engine_wrapper.py b/TTS/engine_wrapper.py index 213defb..93da092 100644 --- a/TTS/engine_wrapper.py +++ b/TTS/engine_wrapper.py @@ -13,7 +13,7 @@ from utils.console import print_step, print_substep from utils.voice import sanitize_text from utils import settings -DEFAULT_MAX_LENGTH: int = 50 # video length variable +DEFAULT_MAX_LENGTH: int = 10 # video length variable class TTSEngine: diff --git a/requirements.txt b/requirements.txt index e57a37d..7bccd0d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,3 +9,5 @@ requests==2.28.1 rich==12.5.1 toml==0.10.2 translators==5.3.1 + +Pillow~=9.1.1 diff --git a/utils/video.py b/utils/video.py index 2cceae1..61dc41c 100644 --- a/utils/video.py +++ b/utils/video.py @@ -2,26 +2,44 @@ from __future__ import annotations from typing import Tuple -from moviepy.video.VideoClip import VideoClip, TextClip -from moviepy.video.io.VideoFileClip import VideoFileClip +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 | VideoFileClip, *args, **kwargs): + 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, fontsize, opacity=0.5): - txt_clip = TextClip(text, fontsize=fontsize, color='black').set_opacity(opacity) - return txt_clip + path = "./assets/temp/png/watermark.png" + width = int(fontsize * len(text)) + height = int(fontsize * len(text) / 2) - def add_watermark(self, text, opacity=0.5, position: Tuple = (0.95, 0.95), fontsize=15): - txt_clip = self._create_watermark(text, opacity=opacity, fontsize=fontsize) - txt_clip = txt_clip.set_pos(position).set_duration(10) + white = (255, 255, 255) + transparent = (0, 0, 0, 0) - # Overlay the text clip on the first video clip - self.video = CompositeVideoClip([self.video, txt_clip]) + 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, opacity=0.5, duration: int | float = 5, position: Tuple = (1, 100), fontsize=15): + img_clip = self._create_watermark(text, opacity=opacity, fontsize=fontsize) + img_clip = img_clip.set_opacity(opacity).set_duration(duration) + img_clip = img_clip.set_position(("center","bottom")) # set position doesn't work for some reason # todo fix + + # Overlay the img clip on the first video clip + self.video = CompositeVideoClip([self.video, img_clip]) return self.video