Create Video from Images or NumPy Array using Python OpenCV | OpenCV Tutorial

In this Python OpenCV Tutorial, explain how to create a video using NumPy array and images.

Video From NumPy Array

import numpy as np
import cv2
import os

width = 1280
hieght = 720
channel = 3

fps = 30
sec = 5

# Syntax: VideoWriter_fourcc(c1, c2, c3, c4) # Concatenates 4 chars to a fourcc code
#  cv2.VideoWriter_fourcc('M','J','P','G') or cv2.VideoWriter_fourcc(*'MJPG)

fourcc = cv2.VideoWriter_fourcc(*'MP42') # FourCC is a 4-byte code used to specify the video codec.
# A video codec is software or hardware that compresses and decompresses digital video. 
# In the context of video compression, codec is a portmanteau of encoder and decoder, 
# while a device that only compresses is typically called an encoder, and one that only 
# decompresses is a decoder. Source - Wikipedia

#Syntax: cv2.VideoWriter( filename, fourcc, fps, frameSize )
video = cv2.VideoWriter('test.mp4', fourcc, float(fps), (width, hieght))

for frame_count in range(fps*sec):
    img = np.random.randint(0,255, (hieght, width, channel), dtype = np.uint8)
    video.write(img)

video.release()

Video from Images

import numpy as np
import cv2
import os

width = 1280
hieght = 720
channel = 3

fps = 10
sec = 5

fourcc = cv2.VideoWriter_fourcc(*'MP42')

video = cv2.VideoWriter('image_to_video.avi', fourcc, float(fps), (width, hieght))

directry = r'C:\Users\kashz\AI Life\AI Projects - IAIP, PTs (Web + Channel)\02 OpenCV\000 opencv tutorial\data\images'

img_name_list = os.listdir(directry)

for frame_count in range(fps*sec):
   
    img_name = np.random.choice(img_name_list)
    img_path = os.path.join(directry, img_name)
    img = cv2.imread(img_path)
    img_resize = cv2.resize(img, (width, hieght))
    
    video.write(img_resize)
    
video.release()

1 thought on “Create Video from Images or NumPy Array using Python OpenCV | OpenCV Tutorial”

  1. Funktioniert nicht. Als Anfänger keine Ahnung was man da noch amchen soll. Float was? Wo wie warum? Was wird verlangt?

    for frame_count in range(fps*sec):
    TypeError: ‘float’ object cannot be interpreted as an integer

    Schade sah viel versprechend aus, da auf anderem Wege die FPS nicht richtig behandelt werden, dachte ich das dies eine gute alternative wäre aber nö. Leider soll es wohl nicht sein.

    Fehler kommt wenn ich den
    “Video From NumPy Array”
    verwende.

Leave a Reply