Как создать видео из изображений?

У меня есть алгоритм, который после каждой итерации создает матрицу. После некоторых операций с матрицей она отображается пользователю. если я запущу программу 6 раз, то получу:

куча изображений

Моя цель - динамически менять изображение, как в кино.

Понятия не имею, с какой стороны начать. Я нашел несколько способов создания видео из изображений в python, а затем обернуть его в видеоплеер. Но это кажется немного сложным и увидеть изменения во время работы алгоритма невозможно. Есть какие-нибудь предложения, как это сделать?


person Sergey Vladimirovich    schedule 08.11.2018    source источник
comment
возможно, вы захотите взглянуть на этот вопрос   -  person Kevin He    schedule 08.11.2018


Ответы (2)


Вы можете использовать FFMPEG

def convert():
    os.system("ffmpeg -r 1 -i img%01d.png -vcodec mpeg4 -y movie.mp4")

Кроме того, вы можете использовать ImageIO для создания GIF. Вы можете установить параметры продолжительности каждого кадра.

import imageio
with imageio.get_writer('/path_to_video.gif', mode='I') as writer:
    for filename in filenames:
        image = imageio.imread(filename)
        writer.append_data(image)

Прочтите руководство на веб-сайте для получения более подробных инструкций.

Или с cv2,

import cv2

img1 = cv2.imread('1.jpg')
img2 = cv2.imread('2.jpg')
img3 = cv2.imread('3.jpg')

height , width , layers =  img1.shape

video = cv2.VideoWriter('video.avi',-1,1,(width,height))

video.write(img1)
video.write(img2)
video.write(img3)

cv2.destroyAllWindows()
video.release()
person Aravind Voggu    schedule 08.11.2018
comment
Спасибо! Я также нашел другой способ динамического представления изображений: matplotlib.org/2.1.2 /gallery/animation/image_slices_viewer.html - person Sergey Vladimirovich; 09.11.2018

Код генерации видеоданных с нуля на Python (используйте Jupyter):

import numpy as np
import skvideo.io as sk
# creating sample video data
num_vids = 5
num_imgs = 100
img_size = 50
min_object_size = 1
max_object_size = 5
 
for i_vid in range(num_vids):
 imgs = np.zeros((num_imgs, img_size, img_size)) # set background to 0
 vid_name = ‘vid’ + str(i_vid) + ‘.mp4’
 w, h = np.random.randint(min_object_size, max_object_size, size=2)
 x = np.random.randint(0, img_size — w)
 y = np.random.randint(0, img_size — h)
 i_img = 0
 while x>0:
 imgs[i_img, y:y+h, x:x+w] = 255 # set rectangle as foreground
 x = x-1
 i_img = i_img+1
 sk.vwrite(vid_name, imgs.astype(np.uint8))
# play a video
from IPython.display import Video
Video(“vid3.mp4”) # the script & video should be in same folder
person SKG    schedule 21.11.2020