Независимо от того, какой размер экземпляра EC2 я использую, MoviePy.write_videofile () работает вечно.
Я запускал его на t2.micro, c5.large и c4.2xlarge, и все они проецировали его на столько же времени (~ 7 часов).
У меня есть файл mp4 720 МБ, в который я добавляю файл mp4 30 МБ, а затем накладываю текстовое наложение на все видео (просто stati c текст с названием компании в нижнем углу).
final_video.write_videofile(
f"{FINAL_VIDEO_FILENAME}.mp4",
fps=60,
codec='libx264',
audio_codec='aac',
temp_audiofile=f'{FINAL_VIDEO_FILENAME}_temp_audio.mp4',
remove_temp=True,
threads = 8, # this was for c4.2xlarge instance
)
def __get_intro_clip(self, title, size, fps):
clip = ( VideoFileClip('ytbot/intro_video/intro_video.mp4')
.subclip(0,9.5)
.resize(size)
.set_fps(fps)
)
# make bigger then resize() so stroke works properly
text_clip1 = ( TextClip(f'{TEXTTEXT}',font='Helvetica-Narrow-Bold',fontsize=self.DEFAULT_TEXT_SIZE*self.TITLE_MULTIPLIER,color='white',stroke_color='black',stroke_width=self.DEFAULT_STROKE_SIZE*self.TITLE_MULTIPLIER).resize(self.DEFAULT_RESIZE_MULTIPLIER)
.margin(bottom=175, opacity=0)
.set_position('center')
.set_duration(4)
.set_start(1)
.fadein(0.25)
.fadeout(0.25)
)
text_clip2 = ( TextClip(f'presents',font='Helvetica-Narrow-Bold',fontsize=self.DEFAULT_TEXT_SIZE*self.TITLE_MULTIPLIER*0.7,color='white',stroke_color='black',stroke_width=self.DEFAULT_STROKE_SIZE*self.TITLE_MULTIPLIER).resize(self.DEFAULT_RESIZE_MULTIPLIER)
.set_position('center')
.set_duration(3.5)
.set_start(1.5)
.fadein(0.25)
.fadeout(0.25)
)
text_clip3 = ( TextClip(title,font='Helvetica-Narrow-Bold',fontsize=self.DEFAULT_TEXT_SIZE*self.TITLE_MULTIPLIER,color='white',stroke_color='black',stroke_width=self.DEFAULT_STROKE_SIZE*self.TITLE_MULTIPLIER).resize(self.DEFAULT_RESIZE_MULTIPLIER)
.margin(top=175, opacity=0)
.set_position('center')
.set_duration(3)
.set_start(2)
.fadein(0.25)
.fadeout(0.25)
)
return CompositeVideoClip([clip, text_clip1, text_clip2, text_clip3]).fadein(0.5)
def edit_yt_video(self, video_path, name):
video_clips = []
clip = VideoFileClip(video_path)
video_clips.append(self.__get_intro_clip(name, clip.size, clip.fps))
text_clip = ( TextClip('Company: {name}',font='Helvetica-Narrow-Bold',fontsize=self.DEFAULT_TEXT_SIZE,color='white',stroke_color='black',stroke_width=self.DEFAULT_STROKE_SIZE).resize(self.DEFAULT_RESIZE_MULTIPLIER)
.margin(bottom=15, left=15, opacity=0)
.set_position(('left', 'bottom'))
.set_duration(clip.duration)
)
video_clips.append(CompositeVideoClip([clip, text_clip]).fadeout(0.5).crossfadein(0.5))
return concatenate_videoclips(video_clips, padding=-1, method='compose')