В этом посте есть 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 и так далее.
Если вы хотите узнать обо мне больше, загляните на мой сайт. Нажмите здесь.