@ -8,46 +8,68 @@ 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 ( video_length ) :
def download_background ( ) :
""" 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 ( " \n Put the URL of the video you want in the background. \n The 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 ):
def chop_background_video ( video_length , vidpath ):
print_step ( " Finding a spot in the background video to chop... " )
print_step ( " Finding a spot in the background video to chop... " )
background = VideoFileClip ( " assets/mp4/background.mp4 " )
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