基於Python怎麼實現合併多張圖片轉成mp4視頻

WBOY
發布: 2023-05-15 22:22:04
轉載
2737 人瀏覽過

一、需要調入的模組

1、imageio模組

Python模組imageio是用來讀取和寫入影像及視訊資料的函式庫。它支援多種格式,並且可以使用NumPy數組進行操作。

以下是一些關鍵的函數:

  • imageio.imread():從檔案中讀取影像資料並傳回一個NumPy陣列。

  • imageio.imwrite():將一個NumPy陣列寫入到檔案中。

  • imageio.mimsave():將多個影像幀組成的清單儲存為動畫檔案(例如GIF)。

  • imageio.get_reader():取得一個對象,該物件用於逐幀讀取給定檔案中的動畫圖像。

  • imageio.get_writer():取得一個對象,用於逐幀寫入動畫圖像到指定檔案。

使用這些函數,可以方便地讀取、寫入和處理各種影像及視訊資料格式。

2、Image 模組

PIL 是 Python 中常用的映像處理庫,Image 模組是其中一個重要的模組,它提供了各種映像操作和處理的函數。

以下是 Image 模組中一些主要函數及其作用:

  • open(): 開啟並傳回指定檔案路徑的影像物件。

  • fromarray(): 將 numpy 陣列或 PIL 影像物件轉換為 PIL 影像物件。

  • new(): 建立一個新的指定大小、模式和顏色的空白影像物件。

  • save(): 將影像儲存為指定格式的檔案。

  • resize(): 修改圖片的大小。

  • crop(): 裁切影像的指定區域。

  • rotate(): 旋轉影像指定角度。

  • show(): 顯示影像。

除此之外,還有很多其他常用的函數,例如調整亮度和對比度、應用濾鏡等等。這些函數可以幫助我們實現各種複雜的影像處理任務,通常也會有一些參數可用於進一步調節函數的行為,具體使用時可以參考相關文件。

二、實作合併多張圖片轉成 mp4 影片

使用 Python 中的畫圖庫 PIL(Python Imaging Library)或 OpenCV 讀取每一張圖片。

使用第三方函式庫 imageio 將多張圖片合併成一個影片檔。

配置產生影片檔案的影片幀數、影片尺寸和影片播放速度等參數。

以下是一個簡單的範例程式碼:

import os
import imageio
from PIL import Image

# 设置生成的视频文件名和路径
filename = 'output.mp4'
filepath = os.path.join(os.getcwd(), filename)

# 读取所有 PNG 图片
images = []
for file_name in sorted(os.listdir()):
    if file_name.endswith('.png'):
        images.append(Image.open(file_name))

# 将图片转换为视频
fps = 30  # 每秒钟30帧
with imageio.get_writer(filepath, fps=fps) as video:
    for image in images:
        frame = image.convert('RGB')
        video.append_data(frame)
登入後複製

實作原理,讀取所有需要合併的圖片文件,將它們儲存到一個清單中。然後使用 imageio 庫的 get_writer() 函數建立一個視訊寫入器對象,並設定視訊的播放速度(fps)。之後在循環過程中,讀取列表中的每一張圖片,在將其轉換為具有 RGB 顏色模式的格式後添加到視訊幀中。最終輸出一個合併了所有目標圖片的視訊檔案。

三、優化改進一下

將程式並行化處理,加快處理多張圖片的速度。附註:以下方法可能並非最優方法

import os
import concurrent.futures
import imageio
from PIL import Image

# 设置生成的视频文件名和路径
filename = "output.mp4"
filepath = os.path.join(os.getcwd(), filename)


def process_image(file_name):
    if file_name.endswith(".png"):
        image = Image.open(file_name)
    return image.convert("RGB")


with concurrent.futures.ThreadPoolExecutor() as executor:
    # 寻找所有 png 文件
    image_files = [file for file in os.listdir() if file.endswith(".png")]

    # 利用线程池并行处理图像
    images = list(executor.map(process_image, image_files))


# 将图片转换为视频文件
fps = 30  # 每秒钟30帧
with imageio.get_writer(filepath, fps=fps) as video:
    for image in images:
        video.append_data(image)
登入後複製

這裡使用 concurrent.futures 函式庫中的 ThreadPoolExecutor 物件進行平行處理。首先在主執行緒中尋找讀取目前工作目錄下的所有需要​​合併的 PNG 圖片,以建立任務清單。然後將任務提交給線程池中並保證能夠快速、非同步地處理目標檔案。在處理完所有 PNG 圖片之後,將其儲存到一個 images 中的清單中並最後轉換成影片。

以上是基於Python怎麼實現合併多張圖片轉成mp4視頻的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板