From 94bf8ef1b47662623c810d389f4dd5b333b7a38e Mon Sep 17 00:00:00 2001 From: Lewis Menelaws Date: Wed, 1 Jun 2022 12:06:57 -0400 Subject: [PATCH] Updated --- .DS_Store | Bin 0 -> 10244 bytes .env.template | 4 +- main.py | 6 +-- video_creation/background.py | 24 ++++++--- video_creation/final_video.py | 92 +++++++++++++++++----------------- video_creation/test.py | 0 6 files changed, 69 insertions(+), 57 deletions(-) create mode 100644 .DS_Store delete mode 100644 video_creation/test.py diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..821f58e1be1b34b178ffb79cadf8eeab10f09ea9 GIT binary patch literal 10244 zcmeHMU2GLa6h3F$(%o%Km;Y|%;>Ge;C~$3|6cN1iNB)FjTiQ~P%ig;ytZaA7-MzP9 zQ*De7iYP{nZ~ozf4;T|kOeErqiP88X(Z-)B8XrtdeDOsiYNBUm_CmR>KJZX5*}2&{ zGiT=P?D^(9J9lOQ09$kBod9tFkm+JltE6m-#M;?4DM_J5C5dDY5P+W^_J`7rm!8x+ zQbY(u2t)`(2t)`(2;2$?(3;JXTp?tXM+ig+L<(QEC)j=8G0+1{v zHBVHgeE_$KhcX$;F(J7r-BauyFf_$*i-E$N+T*M{$z&+UgcRn0!W=Lh8N(e4^3lmI z&btF9g^cnDfe3-g2(Z2T3^2f_pH;MfzmOhsY(GdOzCfv@v}{JXTrOA04|E^(hPwkJ z$oZ{C_5iE(c%G9kl#O(+Z4IZixow^s7`AI=xq)q3)a78G?V8?jtCw?4pWAke23e7n zl%|i2G&Z(0H^iIPZy0Tek8DgN8sh7knnyw=@ew{9M z%JK7U;!vWbyx`PV1*a6XLhtSCS5w;TJUw~mP+)tm-)m)kk}0j)Cl7aIJa=!_V(ony z&&dtCeoC8_F`P`!F#>C=<8<2(TYi6Fod{TI!1uC28}Ha}lP%MwG%e>_T^1SGd8?hw zd<~ViD(A)SShgy${;qr4x9`4xylQ5(HcOqO4iGMGU_WSE+5Lu}v0T%3kL(+^&ERNX z-uCUZWA(Vkpry>h<;wW{1vOQAt-i3(BsyL*l(jm!KbN+T=j`C*xHhx8O4Z|w6_4<`$VD$Lpi@1flX04)Ve$O$QRAH(%t& z*SE>?e%7+pG)Y;tpl1G#ow`2YA2qU8=P(gX`%IR(eh=yS%ux%wPlss-UN&s(;*FZ^ z=51mz&9NY}EX#Gt6@p0|*}7yx)D&8qbXY?x(RMgUQ8EN4;WRu0XW(Uc1J1)m_y9hE zPvH`L4&!hceuSUlSNIKnhbt&y1y*7eR^vikipy|0HsRg48Mj~(J8%zn;$G~+K0J&D zrqRTQ(8mCCIE;_t6Zj;a!l&^?d<9>{*YI^bkMH3{d>=o;OZW|5#_#ZZ{0aZSKk+ZA zOsbJ|saCp8S|Zg;jpEUzLWm5AdLfsZsB~T2Q;3A;cG97#LL}C4@3xy1B41bXpqM>p z?z}~HD^@pBs9fcZU|NA(6G_W?dL6qtPx;hNK`^~mT^QR(M7B;`3!CfXO)F=Vl^GrN z+ttM}t&FHHs!P;mF>MCXTvY30t74i&(Iu*DVhL3%q1fSpsw=Tosw|4lYKy9sQVc2M zI`LUmH*Zl`L~FoDNyb`Z8jFY<;O1F42XDg#_>j2yC437%z%OtG{ziqkxBzvm#TYIk zKGx$(Y{1pnj4ikkHxWBKa2syNowy5ou$Q>G9|tf)+_cceAw13*I*N}FLm$J(iJxci zS$qzk#~1J=Jd5Xwn75($v##U0M@Y}uDpQ1=pcQG5;>@A)#1rNJ^@=pf zu_DLIAV&+ZO-@gA`Q1V=PTL|}GcvMaJ*~S<39$w@PPqo33a7L1f+=2u*&02;qat5t zLY_P|X?i_KK?br^GPw61xD!4h+)VGA`9F{w_x?Y9EW$&88RZcI5dskc5dskc(||yU z7$eTk|2zKu`~NgNNi;-+K!m`}LI6wKyW3l7^umAn;s;@8?Qyye)5Q|&Hzp)Ep^P8L wljO(oRAI;Q{4j-d;V}xgOOl@1j|oX7O4I%^Alm;&`~UFZdHPPIZ>|0RKiWt)DF6Tf literal 0 HcmV?d00001 diff --git a/.env.template b/.env.template index e00c242..d36db0c 100644 --- a/.env.template +++ b/.env.template @@ -1,4 +1,6 @@ REDDIT_CLIENT_ID="" REDDIT_CLIENT_SECRET="" REDDIT_USERNAME="" -REDDIT_PASSWORD="" \ No newline at end of file +REDDIT_PASSWORD="" + +GOOGLE_APPLICATION_CREDENTIALS="" \ No newline at end of file diff --git a/main.py b/main.py index e1e5017..1a4dc4f 100644 --- a/main.py +++ b/main.py @@ -18,10 +18,10 @@ reddit_object = get_askreddit_threads() length, number_of_comments = save_text_to_mp3(reddit_object) download_screenshots_of_reddit_posts(reddit_object, number_of_comments) -download_background() -chop_background_video(length) +video_id = download_background() +chop_background_video(length, video_id) final_video = make_final_video(number_of_comments) -cleanup() +# cleanup() print_markdown( "### File saved at assets/final_video.mp4 🎉. If you enjoyed this, make sure to give us a star on GitHub! 🌟" diff --git a/video_creation/background.py b/video_creation/background.py index a796136..689fb2a 100644 --- a/video_creation/background.py +++ b/video_creation/background.py @@ -1,9 +1,10 @@ -from random import randrange +from random import randrange, choice from pytube import YouTube from pathlib import Path from moviepy.video.io.ffmpeg_tools import ffmpeg_extract_subclip from moviepy.editor import VideoFileClip from utils.console import print_step, print_substep +from urllib import parse def get_start_and_end_times(video_length, length_of_clip): @@ -18,29 +19,36 @@ def download_background(): Shoutout to: bbswitzer (https://www.youtube.com/watch?v=n_Dv4JMiwK8) """ # List of choices for the background video - background_choices = ["https://www.youtube.com/watch?v=n_Dv4JMiwK8"] + background_choices = [ + "https://www.youtube.com/watch?v=n_Dv4JMiwK8", + "https://www.youtube.com/watch?v=oCtokDlLbCU", + ] - if not Path("assets/mp4/background.mp4").is_file(): + video_id = parse.parse_qs(parse.urlsplit(choice(background_choices)).query)["v"][0] + + if not Path(f"assets/mp4/{video_id}.mp4").is_file(): print_step( "We need to download the Minecraft background video. This is fairly large but it's only done once. 😎" ) print_substep("Downloading the background video... please be patient 🙏") - YouTube("https://www.youtube.com/watch?v=n_Dv4JMiwK8").streams.filter( + YouTube(f"https://www.youtube.com/watch?v={video_id}").streams.filter( res="720p" ).first().download( "assets/mp4", - filename="background.mp4", + filename=f"{video_id}.mp4", ) print_substep("Background video downloaded successfully! 🎉", style="bold green") + return video_id + -def chop_background_video(video_length): +def chop_background_video(video_length, video_id): print_step("Finding a spot in the background video to chop...✂️") - background = VideoFileClip("assets/mp4/background.mp4") + background = VideoFileClip(f"assets/mp4/{video_id}.mp4") start_time, end_time = get_start_and_end_times(video_length, background.duration) ffmpeg_extract_subclip( - "assets/mp4/background.mp4", + f"assets/mp4/{video_id}.mp4", start_time, end_time, targetname="assets/mp4/clip.mp4", diff --git a/video_creation/final_video.py b/video_creation/final_video.py index 806568c..99a6612 100644 --- a/video_creation/final_video.py +++ b/video_creation/final_video.py @@ -14,50 +14,52 @@ W, H = 1080, 1920 def make_final_video(number_of_clips): - print_step("Creating the final video 🎥") - VideoFileClip.reW = lambda clip: clip.resize(width=W) - VideoFileClip.reH = lambda clip: clip.resize(width=H) - - background_clip = ( - VideoFileClip("assets/mp4/clip.mp4") - .without_audio() - .resize(height=H) - .crop(x1=1166.6, y1=0, x2=2246.6, y2=1920) - ) - # Gather all audio clips - audio_clips = [] - for i in range(0, number_of_clips): - audio_clips.append(AudioFileClip(f"assets/mp3/{i}.mp3")) - audio_clips.insert(0, AudioFileClip(f"assets/mp3/title.mp3")) - audio_concat = concatenate_audioclips(audio_clips) - audio_composite = CompositeAudioClip([audio_concat]) - - # Gather all images - image_clips = [] - for i in range(0, number_of_clips): - image_clips.append( - ImageClip(f"assets/png/comment_{i}.png") - .set_duration(audio_clips[i + 1].duration) + try: + print_step("Creating the final video 🎥") + VideoFileClip.reW = lambda clip: clip.resize(width=W) + VideoFileClip.reH = lambda clip: clip.resize(width=H) + + background_clip = VideoFileClip("assets/mp4/clip.mp4").without_audio() + + if background_clip.w > background_clip.h: + background_clip.resize(height=H).crop(x1=1166.6, y1=0, x2=2246.6, y2=1920) + + # Gather all audio clips + audio_clips = [] + for i in range(0, number_of_clips): + audio_clips.append(AudioFileClip(f"assets/mp3/{i}.mp3")) + audio_clips.insert(0, AudioFileClip(f"assets/mp3/title.mp3")) + audio_concat = concatenate_audioclips(audio_clips) + audio_composite = CompositeAudioClip([audio_concat]) + + # Gather all images + image_clips = [] + for i in range(0, number_of_clips): + image_clips.append( + ImageClip(f"assets/png/comment_{i}.png") + .set_duration(audio_clips[i + 1].duration) + .set_position("center") + .resize(width=background_clip.w - (background_clip.w * 0.05)), + ) + image_clips.insert( + 0, + ImageClip(f"assets/png/title.png") + .set_duration(audio_clips[0].duration) .set_position("center") - .resize(width=W - 100), + .resize(width=background_clip.w - (background_clip.w * 0.05)), + ) + image_concat = concatenate_videoclips( + image_clips, method="compose" + ).set_position(("center", 0.3), relative=True) + image_concat.audio = audio_composite + final = CompositeVideoClip([background_clip, image_concat]) + final.write_videofile( + "assets/final_video.mp4", + fps=30, + audio_codec="aac", + audio_bitrate="192k", + preset="ultrafast", ) - image_clips.insert( - 0, - ImageClip(f"assets/png/title.png") - .set_duration(audio_clips[0].duration) - .set_position("center") - .resize(width=W - 100), - ) - image_concat = concatenate_videoclips(image_clips, method="compose").set_position( - ("center", 0.3), relative=True - ) - image_concat.audio = audio_composite - final = CompositeVideoClip([background_clip, image_concat]) - final.write_videofile( - "assets/final_video.mp4", - fps=30, - audio_codec="aac", - audio_bitrate="192k", - preset="ultrafast", - ) - print_substep("WOOHOO! Video is saved at assets/final_video.mp4 🎉") + print_substep("WOOHOO! Video is saved at assets/final_video.mp4 🎉") + except Exception as e: + print(e) diff --git a/video_creation/test.py b/video_creation/test.py deleted file mode 100644 index e69de29..0000000