ishworrsubedii's picture
add: font, transition list
0ed501e
# import secrets
#
# import numpy as np
# from PIL import Image
# from moviepy.audio.io.AudioFileClip import AudioFileClip
# from moviepy.video.VideoClip import ImageClip, ColorClip, TextClip
# from moviepy.video.compositing.CompositeVideoClip import CompositeVideoClip
# from moviepy.video.compositing.concatenate import concatenate_videoclips
# from moviepy.video.fx.all import resize
# from moviepy.video.io.VideoFileClip import VideoFileClip
#
#
# class VideoCreator:
# def __init__(self):
# self.current_date = secrets.token_hex(40)
# self.config = {
# "intro_video_url": "",
# "outro_video_url": "",
# "output_video_path": f"/home/ishwor/Desktop/TCP/Virtual_Makeup/images_to_video/resourcesssss/output/{self.current_date}_jewelmirror_cjm.mp4",
# "font_path": "/home/ishwor/Desktop/TCP/Virtual_Makeup/images_to_video/resourcesssss/font/PlayfairDisplay-VariableFont.ttf",
# "audio_url": "",
# "transition_duration": 1.0,
# "image_display_duration": 2.5,
# "text_color": "white",
# "box_color": (131, 42, 48),
# "box_opacity": 0.8,
# "font_size": 28,
# "category_font_size": 70,
#
# }
#
# def create_image_clip(self, image_path, text, duration):
# """Create a temp_video clip from an image with text overlay"""
# # Create image clip and resize using the resize function
# print("Image path",image_path)
#
# img_clip = ImageClip(image_path)
# img_clip = resize(img_clip, (1080, 1080)) # Using resize from fx.all
# img_clip = img_clip.set_duration(duration)
#
# # Create text overlay
# txt_overlay = self.create_text_overlay(text, (1080, 80), duration)
# txt_overlay = txt_overlay.set_position(('center', 'bottom'))
#
# # Combine image and text
# final_clip = CompositeVideoClip([img_clip, txt_overlay])
#
# return final_clip
#
# def create_necklace_clips(self, necklace_image_path, backgrounds=None):
# if backgrounds is None:
# backgrounds = [
#
# # Add to your configurations
# (245, 245, 245), # Soft White (Perfect for Gold)
# (220, 245, 245), # Rich Black (Premium look)
# (230, 230, 235), # Pearl Gray (Elegant)
# # Alternative premium colors:
# # (25, 25, 112), # Midnight Blue
# # (44, 49, 51), # Charcoal
# # (189, 172, 152), # Champagne
# # (241, 235, 218), # Ivory
# ]
#
# necklace_clips = []
#
# for bg_color in backgrounds:
# # Create background
# bg_clip = ColorClip((1080, 1080), col=bg_color)
# bg_clip = bg_clip.set_duration(self.config["image_display_duration"])
#
# # Create necklace clip
# necklace = ImageClip(necklace_image_path)
# necklace = resize(necklace, (800, 800)) # Adjust size as needed
# necklace = necklace.set_duration(self.config["image_display_duration"])
#
# # Center the necklace
# necklace = necklace.set_position('center')
#
# final_clip = CompositeVideoClip([bg_clip, necklace])
#
# txt_overlay = self.create_text_overlay("Necklace Preview", (1080, 80),
# self.config["image_display_duration"],
# is_category=True)
# txt_overlay = txt_overlay.set_position(('center', 'bottom'))
#
# final_clip = CompositeVideoClip([final_clip, txt_overlay])
# necklace_clips.append(final_clip)
#
# return necklace_clips
#
# def create_text_overlay(self, text, size, duration, is_category=False):
# box_height = 120 if is_category else 80
# box = ColorClip((1080, box_height), col=self.config["box_color"]).set_opacity(
# self.config["box_opacity"]).set_duration(duration)
# txt = TextClip(
# text,
# font=self.config["font_path"],
# fontsize=self.config["category_font_size"] if is_category else self.config["font_size"],
# color=self.config["text_color"],
# size=(1080, box_height),
# method='label'
# ).set_position('center').set_duration(duration)
#
# return CompositeVideoClip([box, txt])
#
# def process_images(self, image_paths, duration, category_name):
# clips = []
# print("Image path")
# print(image_paths)
#
# text = category_name
#
# img_clip = self.create_image_clip(image_paths, text=text, duration=duration)
# clips.append(img_clip)
#
# return clips
#
# def create_final_video(self, necklace_image, nto_image, cto_images, makeup_images):
# print("Loading and processing main videos...")
# intro_clip = resize(VideoFileClip(self.config["intro_video_url"]), (1080, 1080))
# outro_clip = resize(VideoFileClip(self.config["outro_video_url"]), (1080, 1080))
# necklace_clips = self.create_necklace_clips(necklace_image)
#
# print("Processing image arrays...")
# nto_image_clips = self.process_images(nto_image, self.config["image_display_duration"], "Necklace Try-On")
# cto_image_clips = self.process_images(cto_images, self.config["image_display_duration"], "Clothing Try-On")
# makeup_image_clips = self.process_images(makeup_images, self.config["image_display_duration"], "Makeup Try-On")
#
# all_clips = [intro_clip] + necklace_clips + nto_image_clips + cto_image_clips + makeup_image_clips + [
# outro_clip]
#
# final_video = concatenate_videoclips(all_clips, method="compose")
#
# try:
# print("Adding audio...")
# audio = AudioFileClip(self.config["audio_url"])
# if audio.duration > final_video.duration:
# audio = audio.subclip(0, final_video.duration)
# final_video = final_video.set_audio(audio)
# except Exception as e:
# print(f"Error adding audio: {e}")
#
# print("Rendering final temp_video...")
# final_video.write_videofile(
# self.config["output_video_path"],
# fps=1,
# codec="libx264",
# audio_codec="aac",
# bitrate="400k",
# threads=4,
# preset='ultrafast'
# )
#
# print(f"Video saved to: {self.config['output_video_path']}")
#
#
# if __name__ == "__main__":
# sample_nto_images = [np.random.randint(0, 255, (1080, 1080, 3), dtype=np.uint8) for _ in range(5)]
# sample_cto_images = [np.random.randint(0, 255, (1080, 1080, 3), dtype=np.uint8) for _ in range(5)]
# sample_makeup_images = [np.random.randint(0, 255, (1080, 1080, 3), dtype=np.uint8) for _ in range(5)]
#
# creator = VideoCreator()
# creator.create_final_video(sample_nto_images, sample_cto_images, sample_makeup_images)