everything works except for changes the location

pull/984/head
Jason 2 years ago
parent 3b5ab95720
commit 78ff605c42

@ -13,7 +13,7 @@ from utils.console import print_step, print_substep
from utils.voice import sanitize_text from utils.voice import sanitize_text
from utils import settings from utils import settings
DEFAULT_MAX_LENGTH: int = 50 # video length variable DEFAULT_MAX_LENGTH: int = 10 # video length variable
class TTSEngine: class TTSEngine:

@ -9,3 +9,5 @@ requests==2.28.1
rich==12.5.1 rich==12.5.1
toml==0.10.2 toml==0.10.2
translators==5.3.1 translators==5.3.1
Pillow~=9.1.1

@ -2,26 +2,44 @@ from __future__ import annotations
from typing import Tuple from typing import Tuple
from moviepy.video.VideoClip import VideoClip, TextClip from PIL import ImageFont, Image, ImageDraw, ImageEnhance
from moviepy.video.io.VideoFileClip import VideoFileClip from moviepy.video.VideoClip import VideoClip, ImageClip
from moviepy.video.compositing.CompositeVideoClip import CompositeVideoClip from moviepy.video.compositing.CompositeVideoClip import CompositeVideoClip
class Video: class Video:
def __init__(self, video: VideoClip | VideoFileClip, *args, **kwargs): def __init__(self, video: VideoClip, *args, **kwargs):
self.video: VideoClip = video self.video: VideoClip = video
self.fps = self.video.fps self.fps = self.video.fps
self.duration = self.video.duration self.duration = self.video.duration
@staticmethod @staticmethod
def _create_watermark(text, fontsize, opacity=0.5): def _create_watermark(text, fontsize, opacity=0.5):
txt_clip = TextClip(text, fontsize=fontsize, color='black').set_opacity(opacity) path = "./assets/temp/png/watermark.png"
return txt_clip 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): white = (255, 255, 255)
txt_clip = self._create_watermark(text, opacity=opacity, fontsize=fontsize) transparent = (0, 0, 0, 0)
txt_clip = txt_clip.set_pos(position).set_duration(10)
# Overlay the text clip on the first video clip font = ImageFont.load_default()
self.video = CompositeVideoClip([self.video, txt_clip]) 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 return self.video

Loading…
Cancel
Save