From c776e41d6dfbcef7e8a1390f8b952072cb6eecef Mon Sep 17 00:00:00 2001 From: Omer Bhatti Date: Mon, 10 Oct 2022 17:41:48 +0500 Subject: [PATCH 1/2] Added text_to_video This script convert input.txt conetent to images and then those images to video --- text_to_video/.gitignore | 3 ++ text_to_video/Readme.md | 9 ++++ text_to_video/input.txt | 3 ++ text_to_video/main.py | 81 ++++++++++++++++++++++++++++ text_to_video/requirements.txt | 2 + text_to_video/resource/Urbanist.ttf | Bin 0 -> 64436 bytes text_to_video/resource/tmp/.empty | 0 7 files changed, 98 insertions(+) create mode 100644 text_to_video/.gitignore create mode 100644 text_to_video/Readme.md create mode 100644 text_to_video/input.txt create mode 100644 text_to_video/main.py create mode 100644 text_to_video/requirements.txt create mode 100644 text_to_video/resource/Urbanist.ttf create mode 100644 text_to_video/resource/tmp/.empty diff --git a/text_to_video/.gitignore b/text_to_video/.gitignore new file mode 100644 index 000000000..f4a182796 --- /dev/null +++ b/text_to_video/.gitignore @@ -0,0 +1,3 @@ +*.avi +*.mp4 +*.webp \ No newline at end of file diff --git a/text_to_video/Readme.md b/text_to_video/Readme.md new file mode 100644 index 000000000..b794ccc1a --- /dev/null +++ b/text_to_video/Readme.md @@ -0,0 +1,9 @@ +### Text-To-Video + +This Program Converts Text File to Images and then those images to Video + +### How To Run?? + + pip install -r requirements.txt + change content in input.txt + python main.py diff --git a/text_to_video/input.txt b/text_to_video/input.txt new file mode 100644 index 000000000..32e386185 --- /dev/null +++ b/text_to_video/input.txt @@ -0,0 +1,3 @@ +Hello! +How Are You! +This is sample input file \ No newline at end of file diff --git a/text_to_video/main.py b/text_to_video/main.py new file mode 100644 index 000000000..299c62841 --- /dev/null +++ b/text_to_video/main.py @@ -0,0 +1,81 @@ +import os +import textwrap + +import cv2 +from PIL import Image, ImageDraw, ImageFont + + +def create_image(text, font, index=0, image_size=(1920, 1080), + bg_color=(255, 255, 255), font_color=(0, 0, 0), + save_location="./resource/tmp"): + font_size = font.size + # text treatment + text = textwrap.wrap(text, width=font_size) + # drawing text on image + MAX_W, MAX_H = image_size + img = Image.new('RGB', image_size, bg_color) + draw = ImageDraw.Draw(img) + # drawing lines in text with padding + current_h, pad = MAX_H/2 - ((len(text)*font_size/2)), 10 + for line in text: + w, h = draw.textsize(line, font=font) + draw.text(((MAX_W - w) / 2, current_h), + line, font=font, fill=font_color) + current_h += h + pad + # saving image + path = f"{save_location}/{index}.png" + img.save(path) + return path + + +def get_file_content(file_name): + try: + file = open(file_name, 'r') + lines = file.read().split('\n') + return lines + except Exception as e: + print(e) + + +def create_frames(images, fps=10, duration_per_frame=3): + img_array = [] + for filename in images: + img = cv2.imread(filename) + for i in range(fps*duration_per_frame): + img_array.append(img) + return img_array + + +def create_video_from_frames(frames, dimensions, output_file, fps=10): + try: + video = cv2.VideoWriter( + output_file, cv2.VideoWriter_fourcc(*'DIVX'), fps, dimensions) + for frame in frames: + video.write(frame) + video.release() + + except Exception as e: + print(e) + + +def remove_temp_files(files): + for file in files: + os.unlink(file) + + +if __name__ == "__main__": + # create images from text + dimensions = (1920, 1080) + fps = 1 + font_size = 50 + font = ImageFont.truetype('./resource/Urbanist.ttf', font_size) + sentences = get_file_content("input.txt") + images = [] + for idx, sentence in enumerate(sentences): + imagePath = create_image( + sentence, font, idx+1, image_size=dimensions) + images.append(imagePath) + # read all images + frames = create_frames(images, fps=fps, duration_per_frame=1) + create_video_from_frames(frames, dimensions, "output.mp4", fps=fps) + remove_temp_files(images) diff --git a/text_to_video/requirements.txt b/text_to_video/requirements.txt new file mode 100644 index 000000000..99430acee --- /dev/null +++ b/text_to_video/requirements.txt @@ -0,0 +1,2 @@ +opencv_python==4.5.2.54 +Pillow==8.3.2 diff --git a/text_to_video/resource/Urbanist.ttf b/text_to_video/resource/Urbanist.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6396899b1cbfd8b2f0eab20eb386c95c58ef8dab GIT binary patch literal 64436 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 Date: Mon, 10 Oct 2022 17:51:46 +0500 Subject: [PATCH 2/2] Fixed linting --- text_to_video/main.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/text_to_video/main.py b/text_to_video/main.py index 299c62841..fab850fcd 100644 --- a/text_to_video/main.py +++ b/text_to_video/main.py @@ -5,9 +5,9 @@ from PIL import Image, ImageDraw, ImageFont -def create_image(text, font, index=0, image_size=(1920, 1080), - bg_color=(255, 255, 255), font_color=(0, 0, 0), - save_location="./resource/tmp"): +def create_image(text, font, index=0, image_size=(1920, 1080), + bg_color=(255, 255, 255), font_color=(0, 0, 0), + save_location="./resource/tmp"): font_size = font.size # text treatment text = textwrap.wrap(text, width=font_size) @@ -16,7 +16,7 @@ def create_image(text, font, index=0, image_size=(1920, 1080), img = Image.new('RGB', image_size, bg_color) draw = ImageDraw.Draw(img) # drawing lines in text with padding - current_h, pad = MAX_H/2 - ((len(text)*font_size/2)), 10 + current_h, pad = MAX_H / 2 - ((len(text) * font_size / 2)), 10 for line in text: w, h = draw.textsize(line, font=font) draw.text(((MAX_W - w) / 2, current_h), @@ -41,7 +41,7 @@ def create_frames(images, fps=10, duration_per_frame=3): img_array = [] for filename in images: img = cv2.imread(filename) - for i in range(fps*duration_per_frame): + for i in range(fps * duration_per_frame): img_array.append(img) return img_array @@ -73,7 +73,7 @@ def remove_temp_files(files): images = [] for idx, sentence in enumerate(sentences): imagePath = create_image( - sentence, font, idx+1, image_size=dimensions) + sentence, font, idx + 1, image_size=dimensions) images.append(imagePath) # read all images frames = create_frames(images, fps=fps, duration_per_frame=1)