checks off the custom background todo

pull/171/head
reoccurcat 3 years ago
parent 6fc5d2a737
commit d4bdad4d0f

@ -6,5 +6,4 @@ REDDIT_PASSWORD=""
# Valid options are "yes" and "no" for the variable below # Valid options are "yes" and "no" for the variable below
REDDIT_2FA="" REDDIT_2FA=""
SUBREDDIT="" SUBREDDIT=""

2
.gitignore vendored

@ -1,4 +1,4 @@
assets/ assets/
.env .env
reddit-bot-351418-5560ebc49cac.json reddit-bot-351418-5560ebc49cac.json
__pycache__ __pycache__/

@ -45,7 +45,7 @@ In its current state, this bot does exactly what it needs to do. However, lots o
I have tried to simplify the code so anyone can read it and start contributing at any skill level. Don't be shy :) contribute! I have tried to simplify the code so anyone can read it and start contributing at any skill level. Don't be shy :) contribute!
- [ ] Allowing users to choose a reddit thread instead of being randomized. - [ ] Allowing users to choose a reddit thread instead of being randomized.
- [ ] Allowing users to choose a background that is picked instead of the Minecraft one. - [x] Allowing users to choose a background that is picked instead of the Minecraft one.
- [x] Allowing users to choose between any subreddit. - [x] Allowing users to choose between any subreddit.
- [ ] Allowing users to change voice. - [ ] Allowing users to change voice.
- [ ] Creating better documentation and adding a command line interface. - [ ] Creating better documentation and adding a command line interface.

@ -18,6 +18,9 @@ reddit_object = get_subreddit_threads()
length, number_of_comments = save_text_to_mp3(reddit_object) length, number_of_comments = save_text_to_mp3(reddit_object)
download_screenshots_of_reddit_posts(reddit_object, number_of_comments) download_screenshots_of_reddit_posts(reddit_object, number_of_comments)
download_background() while True:
chop_background_video(length) vidpath = download_background(length)
noerror = chop_background_video(length, vidpath)
if noerror is True:
break
final_video = make_final_video(number_of_comments) final_video = make_final_video(number_of_comments)

@ -8,12 +8,12 @@ import os
def get_subreddit_threads(): def get_subreddit_threads():
""" """
Returns a list of threads from the AskReddit subreddit. Returns a list of threads from the provided subreddit.
""" """
load_dotenv() load_dotenv()
print_step("Getting AskReddit threads...") print_step("Getting subbreddit threads...")
if os.getenv("REDDIT_2FA").lower() == "yes": if os.getenv("REDDIT_2FA").lower() == "yes":
print( print(
@ -50,7 +50,7 @@ def get_subreddit_threads():
threads = subreddit.hot(limit=25) threads = subreddit.hot(limit=25)
submission = list(threads)[random.randrange(0, 25)] submission = list(threads)[random.randrange(0, 25)]
print_substep(f"Video will be: {submission.title} :thumbsup:") print_substep(f"Video will be: {submission.title}")
try: try:
content["thread_url"] = submission.url content["thread_url"] = submission.url

@ -7,45 +7,67 @@ from moviepy.video.io.ffmpeg_tools import ffmpeg_extract_subclip
from moviepy.editor import VideoFileClip from moviepy.editor import VideoFileClip
from utils.console import print_step, print_substep from utils.console import print_step, print_substep
import datetime
def get_start_and_end_times(video_length, length_of_clip): def get_start_and_end_times(video_length, length_of_clip):
random_time = randrange(180, int(length_of_clip) - int(video_length)) random_time = randrange(180, int(length_of_clip) - int(video_length))
return random_time, random_time + video_length return random_time, random_time + video_length
def download_background(): def download_background(video_length):
"""Downloads the background video from youtube. """Downloads the background video from youtube.
Shoutout to: bbswitzer (https://www.youtube.com/watch?v=n_Dv4JMiwK8) Shoutout to: bbswitzer (https://www.youtube.com/watch?v=n_Dv4JMiwK8)
""" """
if not Path("assets/mp4/background.mp4").is_file(): print_substep("\nPut the URL of the video you want in the background.\nThe default video is a Minecraft parkour video.\n"
"Leave the input field blank to use the default.")
print_substep(f"Make sure the video is longer than {str(datetime.timedelta(seconds=round(video_length + 180)))}!\n", style="red")
inp = input("URL: ")
if not inp:
vidurl = "https://www.youtube.com/watch?v=n_Dv4JMiwK8"
else:
vidurl = inp
vidpath = vidurl.split("v=")[1]
if not Path(f"assets/mp4/{vidpath}.mp4").is_file():
print_step( print_step(
"We need to download the Minecraft background video. This is fairly large but it's only done once." "We need to download the background video. This may be fairly large but it's only done once per background."
) )
print_substep("Downloading the background video... please be patient.") print_substep("Downloading the background video... please be patient.")
ydl_opts = { ydl_opts = {
"outtmpl": "assets/mp4/background.mp4", "outtmpl": f"assets/mp4/{vidpath}.mp4",
"merge_output_format": "mp4", "merge_output_format": "mp4",
} }
with YoutubeDL(ydl_opts) as ydl: with YoutubeDL(ydl_opts) as ydl:
ydl.download("https://www.youtube.com/watch?v=n_Dv4JMiwK8") ydl.download(vidurl)
print_substep("Background video downloaded successfully!", style="bold green") print_substep("Background video downloaded successfully!", style="bold green")
return vidpath
def chop_background_video(video_length):
print_step("Finding a spot in the background video to chop...")
background = VideoFileClip("assets/mp4/background.mp4")
def chop_background_video(video_length, vidpath):
print_step("Finding a spot in the background video to chop...")
background = VideoFileClip(f"assets/mp4/{vidpath}.mp4")
if background.duration < video_length + 180:
print_substep("This video is too short.", style="red")
noerror = False
return noerror
start_time, end_time = get_start_and_end_times(video_length, background.duration) start_time, end_time = get_start_and_end_times(video_length, background.duration)
ffmpeg_extract_subclip( ffmpeg_extract_subclip(
"assets/mp4/background.mp4", f"assets/mp4/{vidpath}.mp4",
start_time, start_time,
end_time, end_time,
targetname="assets/mp4/clip.mp4", targetname="assets/mp4/clip.mp4",
) )
print_substep("Background video chopped successfully!", style="bold green") print_substep("Background video chopped successfully!", style="bold green")
noerror = True
return noerror

@ -11,7 +11,7 @@ def download_screenshots_of_reddit_posts(reddit_object, screenshot_num):
reddit_object: The Reddit Object you received in askreddit.py reddit_object: The Reddit Object you received in askreddit.py
screenshot_num: The number of screenshots you want to download. screenshot_num: The number of screenshots you want to download.
""" """
print_step("Downloading Screenshots of Reddit Posts 📷") print_step("Downloading screenshots of reddit posts...")
# ! Make sure the reddit screenshots folder exists # ! Make sure the reddit screenshots folder exists
Path("assets/png").mkdir(parents=True, exist_ok=True) Path("assets/png").mkdir(parents=True, exist_ok=True)

Loading…
Cancel
Save