Python | OpenCV 影片輸出與編碼
📚 前言
在前一章我們學會了如何讀取與播放影片。
這一篇要進一步學習 影片輸出與編碼,理解如何將影格序列寫成影片檔案。
範例影片
- 載點:video.zip
- 來源:此影片取自 Pexels,屬於無版權影片,可自由下載與使用。
- 內容:影片呈現一個程式編輯畫面,長度約 2 秒,適合作為 OpenCV 測試範例。
💾 使用 VideoWriter 輸出影片
OpenCV 提供 cv2.VideoWriter() 來輸出影片。官方文件
語法:
1 | out = cv2.VideoWriter(filename, fourcc, fps, frame_size, isColor) |
- filename:輸出檔案名稱與路徑。
- fourcc:編碼器代碼,例如
cv2.VideoWriter_fourcc(*'XVID')。 - fps:每秒影格數。
- frame_size:影片解析度 (寬, 高)。
- isColor:布林值,True 表示彩色,False 表示灰階。
🔑 常見編碼器 (fourcc)
| 編碼器 | 代碼 | 常見格式 | 建議用途 |
|---|---|---|---|
| XVID | cv2.VideoWriter_fourcc(*'XVID') |
AVI | 舊版 AVI,兼容性一般,適合基本測試 |
| MP4V | cv2.VideoWriter_fourcc(*'MP4V') |
MP4 | 跨平台常用,適合一般影片輸出 |
| MJPG | cv2.VideoWriter_fourcc(*'MJPG') |
Motion JPEG | 支援度高,適合快速測試與除錯 |
👉 不同平台支援度不同,需測試。
🛠️ 範例一:讀取影片並輸出灰階影片
1 | import cv2 |

圖:將彩色影片轉換為灰階並輸出
⚠️ 常見問題與排查
在使用 cv2.VideoWriter() 時,常見的問題點如下:
- frame size 不一致:初始化
VideoWriter時指定的(width, height)必須和輸入影格大小完全一致,否則會寫入失敗。 - 灰階 vs 彩色:若
isColor=False,必須傳入單通道灰階影格;若傳入彩色影格會造成錯誤。 - 編碼器支援度:不同平台對編碼器支援度不同,例如
XVID在部分環境下可能無法正確輸出灰階影片,建議改用MJPG或MP4V。 - FFmpeg/codec 缺失:部分環境可能缺少對應的編碼器,導致輸出檔案損壞或無法播放。
- 播放問題:即使成功輸出,若播放器不支援對應編碼器,影片仍可能無法播放。若仍遇到問題,建議嘗試不同編碼器並確認播放器支援度。
👉 建議先測試 MJPG 編碼器,並確認 frame size 與輸入影格一致,通常能解決大部分問題。
🛠️ 範例二:用 NumPy 生成動畫影片
1 | import cv2 |
👉 這樣就能生成一段「紅色方塊水平移動」的動畫影片。

圖:使用 NumPy 生成動畫影片
⚠️ 注意事項
- FPS 與 frame_size:必須和輸入影格一致,否則影片可能無法正確播放。
- 顏色通道:OpenCV 預設是 BGR。
- 資源釋放:記得呼叫
out.release(),避免檔案損壞。 - 編碼器支援度:不同平台支援度不同,需測試。
- 跨平台差異:Windows、macOS、Linux 對編碼器支援度不同,需測試。
結語 🎯
這一篇我們學會了如何使用 cv2.VideoWriter() 輸出影片,並理解了編碼器、FPS、解析度等關鍵參數。
下一篇將進一步學習 圖片屬性與資訊查詢,掌握圖片處理的更多技巧。
