在影像處理或機器學習的應用中,我們常常需要將影片逐幀擷取出來,進一步進行辨識或分析。
本篇教學將示範如何使用 Python + OpenCV 來:
✅ 讀取 MP4 影片
測試影片可由下方超連結下載,從file-examples.com下載file-examples.com 是一個 免費提供各種檔案範例的網站,用於測試、示範或教學用途。
✅ 擷取每一幀的圖像 ✅ 根據每一幀對應的「影片時間(秒數)」來命名圖片 ✅ 自動儲存到指定資料夾中
🧰 1. 環境準備
首先,你需要安裝 Python 與 OpenCV 套件。
安裝 OpenCV:
pip install opencv-python
📜 2. Python 程式碼範例
將以下程式碼儲存為 extract_frames_by_time.py
:
import cv2
import os
def extract_frames_with_timestamp(video_path, output_dir):
# 建立輸出資料夾
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 開啟影片檔案
cap = cv2.VideoCapture(video_path)
if not cap.isOpened():
print("無法開啟影片")
return
fps = cap.get(cv2.CAP_PROP_FPS) # 每秒幀數
frame_count = 0
while True:
ret, frame = cap.read()
if not ret:
break # 讀到結尾
# 計算當前幀對應的時間戳(秒)
time_in_sec = frame_count / fps
# 產生以時間為基準的檔名
filename = os.path.join(output_dir, f"frame_{time_in_sec:.2f}s.jpg")
# 儲存圖片
cv2.imwrite(filename, frame)
print(f"已儲存:{filename}")
frame_count += 1
cap.release()
print("🎉 所有幀都已成功擷取完成!")
📂 3. 執行程式
使用範例:
video_path = "sample_video.mp4" # 你的影片檔案名稱
output_dir = "output_frames_time" # 輸出資料夾
extract_frames_with_timestamp(video_path, output_dir)
影片檔名資訊

📽️ 基本影片資訊:

🖼️ 擷取圖片數量預測
你如果使用 cv2.VideoCapture
+ while
迴圈擷取 每一幀,那會得到:
📌 30 秒 × 30 幀/秒 = 900 張圖片
所以這支影片擷取出來會是 900 張 圖片
這會在 output_frames_time
資料夾中儲存如下檔名的圖片:

frame_0.00s.jpg
frame_0.03s.jpg
frame_0.07s.jpg
...
這樣的命名方式能清楚對應圖片在影片中的時間點,對於訓練模型或標記資料特別方便。