2016-02-11 1 views
2

Я генерирую значительное количество изображений и записываю их на диск. Затем я передаю массив имен файлов ImageSequenceClip. Основным узким местом является запись изображений на диск; есть ли способ сохранить изображения в памяти, а затем передать это значение ImageSequenceClip, что позволяет избежать времени, необходимого для записи/чтения на диск?Moviepy - не записывать на диск с ImageSequenceClip?

filenames = [] 
for i in range(0, FRAMES): 
    filename = "tmp/frame_%s.png" % (i) 
    filenames.append(filename) 
    center_x = IMG_WIDTH/2 
    center_y = IMG_HEIGHT - ((IMG_HEIGHT - i * HEIGHT_INC)/2) 
    width = IMG_WIDTH - i * WIDTH_INC 
    height = IMG_HEIGHT - i * HEIGHT_INC 
    img = vfx.crop(img_w_usr_img, x_center=center_x, y_center=center_y, width=width, height=height) 
    img = img.resize((VID_WIDTH, VID_HEIGHT)) 
    img.save_frame(filename) 
    print "Proccessed: %s" % (filename) 

seq = ImageSequenceClip(filenames, fps=FPS) 

ответ

2

Посмотрите на раздел this в разделе документов.

Вот как вы щелкаете видео с moviepy

from moviepy.editor import VideoFileClip 
def flip(image): 
    """Flips an image vertically """ 
    return image[::-1] # remember that image is a numpy array 

clip = VideoFileClip("my_original_video.mp4") 
new_clip = clip.fl_image(flip) 
new_clip.write_videofile("my_new_clip", some other parameters) 

отметить, что существует также предопределенный функция FX mirror_y в moviepy, так что вы можете просто сделать:

from moviepy.editor import * 
clip = VideoFileClip("my_original_video.mp4") 
new_clip = clip.fx(vfx.mirror_y) 
new_clip.write_videofile("my_new_clip", some other parameters) 

Но если на самом деле вы хотите сначала составить список (преобразованных) массивов numpy, вот как вы могли бы сделать:

from moviepy.editor import * 
clip = VideoFileClip("original_file.mp4") 
new_frames = [ some_effect(frame) for frame in clip.iter_frames()] 
new_clip = ImageSequenceClip(new_frames, fps=clip.fps) 
new_clip.write_videofile("new_file.mp4") 
+1

Спасибо, ваш ответ вел m е к решению. Я закончил использование 'get_frame' для преобразования изображений в массивы numpy. – Michael

Смежные вопросы