MoviePy на EC2 Экземпляр супер медленный - PullRequest
0 голосов
/ 27 января 2020

Независимо от того, какой размер экземпляра 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')
...