Like Share Discussion Bookmark Smile

J.J. Huang   2026-02-12   Python OpenCV 06.視訊與互動篇   瀏覽次數:次   DMCA.com Protection Status

Python | OpenCV 視訊檔案處理與剪輯

📚 前言

在前一篇我們學會了 攝影機即時圖片讀取
這一篇要介紹如何使用 OpenCV 處理與剪輯視訊檔案
這是電腦視覺與多媒體應用的重要基礎,常用於影片分析、監控錄影、資料集製作等場景。

🔎 原理說明

  • 視訊檔案讀取:透過 cv2.VideoCapture() 讀取影片檔。
  • 視訊檔案儲存:透過 cv2.VideoWriter() 將影格寫入新影片。
  • 剪輯與處理:可在迴圈中對每個影格進行操作,例如裁切、灰階化、加文字。

🧠 函式與參數說明

📌 cv2.VideoCapture()

用途:讀取影片檔或串流。

1
cap = cv2.VideoCapture("video.mp4")
  • “video.mp4”:影片檔路徑。
  • cap:影片物件。

📌 cap.get()

用途:取得影片屬性。

1
2
3
fps = cap.get(cv2.CAP_PROP_FPS)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
  • CAP_PROP_FPS:每秒影格數。
  • CAP_PROP_FRAME_WIDTH:影格寬度。
  • CAP_PROP_FRAME_HEIGHT:影格高度。

📌 cv2.VideoWriter()

用途:建立影片輸出物件。

1
2
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter("output.avi", fourcc, fps, (width, height))
  • fourcc:編碼格式,例如 'XVID''MJPG'
  • fps:每秒影格數。
  • (width, height):影格大小。
  • out:影片輸出物件。

💻 範例程式 — 讀取並顯示影片

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import cv2

cap = cv2.VideoCapture("video.mp4")

while True:
ret, frame = cap.read()
if not ret:
print("影片結束或無法讀取")
break

cv2.imshow("Video", frame)

if cv2.waitKey(30) & 0xFF == ord('q'):
break

cap.release()
cv2.destroyAllWindows()


圖:逐格讀取並顯示影片

💻 範例程式 — 儲存影片檔

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import cv2

cap = cv2.VideoCapture("video.mp4")

# 取得影片屬性
fps = cap.get(cv2.CAP_PROP_FPS)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

# 建立輸出物件
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter("output.avi", fourcc, fps, (width, height))

while True:
ret, frame = cap.read()
if not ret:
break

# 在影格上加文字
cv2.putText(frame, "OpenCV Demo", (50, 50),
cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)

# 寫入輸出影片
out.write(frame)

cv2.imshow("Output", frame)
if cv2.waitKey(30) & 0xFF == ord('q'):
break

cap.release()
out.release()
cv2.destroyAllWindows()


圖:將影片加上文字並輸出

💻 範例程式 — 剪輯影片 (裁切區域)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import cv2

cap = cv2.VideoCapture("video.mp4")

while True:
ret, frame = cap.read()
if not ret:
break

# 裁切區域 (y:100~400, x:200~600)
cropped = frame[100:400, 200:600]

cv2.imshow("Cropped", cropped)

if cv2.waitKey(30) & 0xFF == ord('q'):
break

cap.release()
cv2.destroyAllWindows()


圖:裁切影片區域並顯示

⚠️ 注意事項

  • VideoWriter 的編碼格式需安裝對應的編碼器,否則可能無法輸出。
  • FPS 與影格大小需與輸入影片一致,否則可能出現錯誤。
  • 剪輯操作需注意效能,建議只處理必要的區域。

📊 應用場景

  • 影片分析:逐格處理影片,提取特徵。
  • 監控錄影:儲存即時影像成影片檔。
  • 資料集製作:裁切或標註影片,建立訓練資料。
  • 影片剪輯:加文字、裁切、合併影片。

🎯 結語

本篇我們學會了如何使用 OpenCV 讀取、儲存與剪輯視訊檔案,並能在迴圈中對影格進行處理。
這些技術是電腦視覺與多媒體應用的基礎,後續可以結合特徵偵測、物件追蹤等功能,打造更完整的影片分析系統。

📖 如在學習過程中遇到疑問,或是想了解更多相關主題,建議回顧一下 Python | OpenCV 系列導讀,掌握完整的章節目錄,方便快速找到你需要的內容。

註:以上參考了
OpenCV Tutorials
OpenCV-Python Tutorials