From b595b6e1cae9885caf930698562c72f9ae39442f Mon Sep 17 00:00:00 2001 From: alperen cantez Date: Mon, 13 Jun 2022 22:36:18 +0300 Subject: [PATCH] add translation feature --- main.py | 17 ++++++++--- video_creation/screenshot_downloader.py | 39 +++++++++++++++++++++++-- video_creation/voices.py | 13 +++++---- 3 files changed, 58 insertions(+), 11 deletions(-) diff --git a/main.py b/main.py index 9aabe78..076d188 100644 --- a/main.py +++ b/main.py @@ -91,10 +91,19 @@ console.log("[bold green]Enviroment Variables are set! Continuing...") if configured: reddit_object = get_subreddit_threads() - length, number_of_comments = save_text_to_mp3(reddit_object) - download_screenshots_of_reddit_posts( - reddit_object, number_of_comments, os.getenv("THEME", "light") - ) + get_language = input("Choose a target language to translate the post to (e.g. 'es' for Spanish): ") + + try: + length, number_of_comments = save_text_to_mp3(reddit_object, get_language) + download_screenshots_of_reddit_posts( + reddit_object, number_of_comments, os.getenv("THEME", "light"), get_language + ) + except: + print_markdown("## Unfortunately, we don't have a support for that language yet so this thread will not be translated.") + + length, number_of_comments = save_text_to_mp3(reddit_object, "en") + download_screenshots_of_reddit_posts(reddit_object, number_of_comments, "en") + download_background() chop_background_video(length) final_video = make_final_video(number_of_comments) diff --git a/video_creation/screenshot_downloader.py b/video_creation/screenshot_downloader.py index d3d32ef..9b93b42 100644 --- a/video_creation/screenshot_downloader.py +++ b/video_creation/screenshot_downloader.py @@ -3,9 +3,11 @@ from pathlib import Path from rich.progress import track from utils.console import print_step, print_substep import json +import translators as ts +from PIL import Image, ImageDraw, ImageFont +import textwrap - -def download_screenshots_of_reddit_posts(reddit_object, screenshot_num, theme): +def download_screenshots_of_reddit_posts(reddit_object, screenshot_num, theme, target_lang): """Downloads screenshots of reddit posts as they are seen on the web. Args: @@ -38,10 +40,26 @@ def download_screenshots_of_reddit_posts(reddit_object, screenshot_num, theme): print_substep("Post is NSFW. You are spicy...") page.locator('[data-testid="content-gate"] button').click() + texts_in_tl = ts.bing(reddit_object["title"], to_language=target_lang) + page.locator('[data-test-id="post-content"]').screenshot( path="assets/png/title.png" ) + # rewrite the title in target language + img = Image.open("assets/png/title.png") + + width = img.size[0] + height = img.size[1] + + d1 = ImageDraw.Draw(img) + font = ImageFont.truetype("arial.ttf", 22) + + w, h = font.getsize(new_str) + d1.rectangle((9, 25, 20 + width, 55 + h), fill='white') + d1.text((10, 25), f"{new_str}", font=font, fill=(0, 0, 0)) + img.save("assets/png/title.png") + for idx, comment in track( enumerate(reddit_object["comments"]), "Downloading screenshots..." ): @@ -58,5 +76,22 @@ def download_screenshots_of_reddit_posts(reddit_object, screenshot_num, theme): path=f"assets/png/comment_{idx}.png" ) + # translating the comments + img_comment = Image.open(f"assets/png/comment_{idx}.png") + width = img_comment.size[0] + height = img_comment.size[1] + + comment_tl = ts.bing(comment["comment_body"], to_language=target_lang) + + wrapper = textwrap.TextWrapper(width=78) + wrapped_str = wrapper.fill(text=comment_tl) + + d2 = ImageDraw.Draw(img_comment) + font_comment = ImageFont.truetype("arial.ttf", 16) + + d2.rectangle((9, 45, width - 10, height - 35), fill='#F5F6F6') + d2.text((10, 48), f"{wrapped_str}", font=font_comment, fill=(0, 0, 0)) + img_comment.save(f"assets/png/comment_{idx}.png") + print_substep("Screenshots downloaded Successfully.", style="bold green") diff --git a/video_creation/voices.py b/video_creation/voices.py index c0df8b7..06a1d49 100644 --- a/video_creation/voices.py +++ b/video_creation/voices.py @@ -3,9 +3,9 @@ from pathlib import Path from mutagen.mp3 import MP3 from utils.console import print_step, print_substep from rich.progress import track +import translators as ts - -def save_text_to_mp3(reddit_obj): +def save_text_to_mp3(reddit_obj, target_lang): """Saves Text to MP3 files. Args: @@ -16,8 +16,9 @@ def save_text_to_mp3(reddit_obj): # Create a folder for the mp3 files. Path("assets/mp3").mkdir(parents=True, exist_ok=True) + tl_title = ts.bing(reddit_obj["thread_title"], to_language=target_lang) - tts = gTTS(text=reddit_obj["thread_title"], lang="en", slow=False) + tts = gTTS(text=tl_title, lang=target_lang, slow=False) tts.save(f"assets/mp3/title.mp3") length += MP3(f"assets/mp3/title.mp3").info.length @@ -27,7 +28,7 @@ def save_text_to_mp3(reddit_obj): pass if reddit_obj["thread_post"] != "": - tts = gTTS(text=reddit_obj["thread_post"], lang="en", slow=False) + tts = gTTS(text=reddit_obj["thread_post"], lang=target_lang, slow=False) tts.save(f"assets/mp3/posttext.mp3") length += MP3(f"assets/mp3/posttext.mp3").info.length @@ -35,7 +36,9 @@ def save_text_to_mp3(reddit_obj): # ! Stop creating mp3 files if the length is greater than 50 seconds. This can be longer, but this is just a good starting point if length > 50: break - tts = gTTS(text=comment["comment_body"], lang="en", slow=False) + tl_comment = ts.bing(comment["comment_body"], to_language=target_lang) + + tts = gTTS(text=tl_comment, lang=target_lang, slow=False) tts.save(f"assets/mp3/{idx}.mp3") length += MP3(f"assets/mp3/{idx}.mp3").info.length