В этом посте есть 2 разные части для создания кадров из видео, и из нескольких изображений мы можем создавать видео в любом формате.

Преобразование видео в изображения (кадры)

Для этого потребуется установить библиотеку CV2. Если вы не установили его, просто установите его, используя следующую команду.

>>> pip install opencv-python #For python 2.x
>>> pip3 install opencv-python #For python 3.x
>>> conda install opencv-python #If you directly install in anaconda with all dependencies.

Код:

import cv2
vidcap = cv2.VideoCapture('video.mp4')
def getFrame(sec):
    vidcap.set(cv2.CAP_PROP_POS_MSEC,sec*1000)
    hasFrames,image = vidcap.read()
    if hasFrames:
        cv2.imwrite("image"+str(count)+".jpg", image)     # save frame as JPG file
    return hasFrames
sec = 0
frameRate = 0.5 #//it will capture image in each 0.5 second
count=1
success = getFrame(sec)
while success:
    count = count + 1
    sec = sec + frameRate
    sec = round(sec, 2)
    success = getFrame(sec)

Объяснение :

В cv2.VideoCapture (‘video.mp4’) нам просто нужно указать название видео с его расширением. Здесь мое видео называется «video.mp4». Вы можете установить частоту кадров, которая широко известна как fps (количество кадров в секунду). Здесь я установил 0,5, поэтому он будет захватывать кадр каждые 0,5 секунды, что означает 2 кадра (изображения) в каждую секунду.

Он будет сохранять изображения с именами как image1.jpg, image2.jpg и так далее.

Изображения (кадры) в видео

Код:

import cv2
import numpy as np
import os
from os.path import isfile, join
pathIn= './images/testing/'
pathOut = 'video.avi'
fps = 0.5
frame_array = []
files = [f for f in os.listdir(pathIn) if isfile(join(pathIn, f))]
#for sorting the file names properly
files.sort(key = lambda x: x[5:-4])
files.sort()
frame_array = []
files = [f for f in os.listdir(pathIn) if isfile(join(pathIn, f))]
#for sorting the file names properly
files.sort(key = lambda x: x[5:-4])
for i in range(len(files)):
    filename=pathIn + files[i]
    #reading each files
    img = cv2.imread(filename)
    height, width, layers = img.shape
    size = (width,height)
    
    #inserting the frames into an image array
    frame_array.append(img)
out = cv2.VideoWriter(pathOut,cv2.VideoWriter_fourcc(*'DIVX'), fps, size)
for i in range(len(frame_array)):
    # writing to a image array
    out.write(frame_array[i])
out.release()

Объяснение:

Используя этот код, мы можем генерировать видео из изображений (кадров). Нам нужно добавить pathIn (путь к папке, содержащей все изображения). Я установил частоту кадров 0,5, поэтому в течение 1 секунды потребуется 2 изображения.)

Он будет генерировать выходное видео в любом формате. (например: .avi, .mp4 и т. д.)

!!! Позаботьтесь о том, чтобы все изображения располагались последовательно, например image1.jpg, image2.jpg и так далее.

Если вы хотите узнать обо мне больше, загляните на мой сайт. Нажмите здесь.