本文將介紹如何使用 Python 和 OpenCV 將一組圖像文件合成為一個視頻文件。你將學會:
-
使用
os
模塊遍歷文件夾中的圖像 -
使用
cv2.VideoWriter
寫入視頻 -
設置分辨率與幀率參數
-
對圖像尺寸進行統一處理
-
簡單的視頻生成應用開發
1. 所需模塊與安裝
本章需要以下 Python 模塊:
-
opencv-python
:圖像處理和視頻寫入 -
os
:文件路徑和文件遍歷
安裝指令(在 Anaconda Prompt 中執行):
pip install opencv-python
2. 合成視頻的基本原理
視頻本質上是由一幀幀的靜態圖像按照一定的時間間隔播放形成的。在 OpenCV 中,我們可以通過 cv2.VideoWriter
類將圖像寫入為一個視頻文件。
常見參數說明:
參數 | 含義 |
---|---|
output.avi | 輸出文件名,格式可為 .avi 或 .mp4 |
fps | 幀率,決定每秒顯示幾張圖 |
frame_size | 每幀的分辨率(寬,高) |
fourcc | 編碼方式,如 'XVID' 、'mp4v' |
3. 示例代碼:將圖片生成視頻
以下是完整的 Python 示例代碼:
import cv2
import os# 配置參數
image_folder = 'image_test/' # 圖片目錄路徑 :ml-citation{ref="3,5" data="citationList"}
output_video = 'output.avi' # 輸出視頻文件名
fps = 1 # 幀率 :ml-citation{ref="5" data="citationList"}
frame_size = (1280, 720) # 視頻分辨率(需與圖片尺寸一致):ml-citation{ref="3" data="citationList"}# 獲取排序后的圖片列表 :ml-citation{ref="5" data="citationList"}
images = [img for img in os.listdir(image_folder) if img.endswith((".jpg", ".png"))]
images.sort() # 按文件名排序 :ml-citation{ref="5" data="citationList"}# 創建視頻寫入器
fourcc = cv2.VideoWriter_fourcc(*'XVID') # 編碼格式
video = cv2.VideoWriter(output_video, fourcc, fps, frame_size)# 逐幀寫入 :ml-citation{ref="3" data="citationList"}
for image in images:img_path = os.path.join(image_folder, image)frame = cv2.imread(img_path)frame = cv2.resize(frame, frame_size) # 統一尺寸 :ml-citation{ref="3" data="citationList"}video.write(frame)video.release() # 釋放資源 :ml-citation{ref="3" data="citationList"}
4. 注意事項
-
圖片尺寸必須與
frame_size
一致,否則視頻播放時會出現問題。可以使用cv2.resize
調整圖像尺寸。 -
fps
越高,視頻播放越快。根據圖片數量和期望總時長靈活設定。 -
輸出文件格式與編碼器要匹配,如
.avi
配XVID
,.mp4
配mp4v
。
6. 練習題
-
修改代碼,使視頻播放時每張圖停留 2 秒。
-
修改輸出格式為
output.mp4
,并使用合適的編碼器。 -
添加異常處理邏輯,跳過無法讀取的圖片。
7. 拓展閱讀
-
OpenCV 官方文檔:https://docs.opencv.org
-
視頻編碼格式:
XVID
,MJPG
,H264
,mp4v
-
Python 圖像處理擴展庫:
PIL
,imageio