ساخت ویدئو با استفاده از تصاویر در پایتون — راهنمای کاربردی

«اُپن‌سی‌وی» (OpenCV) یک کتابخانه بسیار پر کاربرد برای «پردازش تصویر» (Picture Processing) است. این کتابخانه، گستره وسیعی از قابلیت‌ها برای انجام پردازش تصویر را فراهم می‌کند. در ادامه، چگونگی ساخت یک ویدئو با استفاده از چندین تصویر در «زبان برنامه‌نویسی پایتون» (Python Programming Language) و با استفاده از کتابخانه OpenCV آموزش داده شده است. ابتدا باید کتابخانه‌های PIL و cv2 را نصب کرد. همچنین، باید مسیر را پیش از اجرای کد بررسی کرد، در غیر این صورت، ضمن انجام کار، کاربر با خطاهای بسیار زیادی مواجه می‌شود.

روش کار

با استفاده از کتابخانه PIL، تصاویر باز می‌شوند و سایز آن‌ها به mean_height و mean_width تغییر داده می‌شود، زیرا ویدئو با کتابخانه cv2 ساخته خواهد شد که نیاز به تصاویر ورودی با ارتفاع و عرض مشابه دارد. تصاویر تغییر سایز داده شده در آرایه قرار داده می‌شوند و قاب ویدئو روی mean_height و mean_width تنظیم می‌شود. سپس، با استفاده از حلقه زدن، هر تصویر به آن قاب الحاق می‌شود. در زیر، پیاده‌سازی این روش ارائه شده است.

# importing libraries 
import os 
import cv2  
from PIL import Image  
  
# Checking the current directory path 
print(os.getcwd())  
  
# Folder which contains all the images 
# from which video is to be generated 
os.chdir("C:\\Python\\Geekfolder2")   
path = "C:\\Python\\Geekfolder2"
  
mean_height = 0
mean_width = 0
  
num_of_images = len(os.listdir('.')) 
# print(num_of_images) 
  
for file in os.listdir('.'): 
    im = Image.open(os.path.join(path, file)) 
    width, height = im.size 
    mean_width += width 
    mean_height += height 
    # im.show()   # uncomment this for displaying the image 
  
# Finding the mean height and width of all images. 
# This is required because the video frame needs 
# to be set with same width and height. Otherwise 
# images not equal to that width height will not get  
# embedded into the video 
mean_width = int(mean_width / num_of_images) 
mean_height = int(mean_height / num_of_images) 
  
# print(mean_height) 
# print(mean_width) 
  
# Resizing of the images to give 
# them same width and height  
for file in os.listdir('.'): 
    if file.endswith(".jpg") or file.endswith(".jpeg") or file.endswith("png"): 
        # opening image using PIL Image 
        im = Image.open(os.path.join(path, file))  
   
        # im.size includes the height and width of image 
        width, height = im.size    
        print(width, height) 
  
        # resizing  
        imResize = im.resize((mean_width, mean_height), Image.ANTIALIAS)  
        imResize.save( file, 'JPEG', quality = 95) # setting quality 
        # printing each resized image name 
        print(im.filename.split('\\')[-1], " is resized")  
  
  
# Video Generating function 
def generate_video(): 
    image_folder = '.' # make sure to use your folder 
    video_name = 'mygeneratedvideo.avi'
    os.chdir("C:\\Python\\Geekfolder2") 
      
    images = [img for img in os.listdir(image_folder) 
              if img.endswith(".jpg") or
                 img.endswith(".jpeg") or
                 img.endswith("png")] 
     
    # Array images should only consider 
    # the image files ignoring others if any 
    print(images)  
  
    frame = cv2.imread(os.path.join(image_folder, images[0])) 
  
    # setting the frame width, height width 
    # the width, height of first image 
    height, width, layers = frame.shape   
  
    video = cv2.VideoWriter(video_name, 0, 1, (width, height))  
  
    # Appending the images to the video one by one 
    for image in images:  
        video.write(cv2.imread(os.path.join(image_folder, image)))  
      
    # Deallocating memories taken for window creation 
    cv2.destroyAllWindows()  
    video.release()  # releasing the video generated 
  
  
# Calling the generate_video function 
generate_video()

تصاویر ورودی استفاده شده به همراه خروجی، از این مسیر قابل دانلود هستند. به افرادی که تمایل به استفاده از جلوه‌های بصری بیشتر و صدا همراه با ویدئو دارند، استفاده از ffmpeg python library توصیه می‌شود که این نوع کارکردها را امکان‌پذیر می‌سازد. برای دانلود تصاویر ورودی و ویدئوهای خروجی، اینجا [+] را کلیک کنید.

منبع [+]

اگر نوشته بالا برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

 

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *