WebCam Save Video

      在〈WebCam Save Video〉中尚無留言

使用Python撰寫儲存影片格式實在是再簡單不過了. 要儲存成video影片, 一樣使用OpenCV即可. 首先取得要儲存的編號格式.

video_code = cv2.VideoWriter_fourcc(*'XVID')

上述格式有如下幾種, 以mp42檔案最小

cv2.VideoWriter_fourcc('M','J','P','G') = motion-jpeg codec
cv2.VideoWriter_fourcc('P','I','M','1') = MPEG-1 codec
cv2.VideoWriter_fourcc('M', 'P', '4', '2') = MPEG-4.2 codec
cv2.VideoWriter_fourcc('D', 'I', 'V', '3') = MPEG-4.3 codec
cv2.VideoWriter_fourcc('D', 'I', 'V', 'X') = MPEG-4 codec
cv2.VideoWriter_fourcc('U', '2', '6', '3') = H263 codec
cv2.VideoWriter_fourcc('I', '2', '6', '3') = H263I codec
cv2.VideoWriter_fourcc('F', 'L', 'V', '1') = FLV1 codec

請注意, ubuntu目前能用的是 *’mp4v’ , 而且請注意, 只能用小寫, 不能用大寫

再來使用 cv2.VideoWriter()設定輸出格式
1. 儲存的路徑 : videos/cam_1.mp4
2. fps(Frame per second) : 此處設定為20, 此數可為小數, 比如 29.97. 經測試, 20即足夠
3. 解析度使用tuple (1920,1080)

output = cv2.VideoWriter('videos/cam_1.mp4', video_code, 20.0, (1920,1080))

最後將每一幅圖片寫入output即可

output.write(frame)

完整代碼

import cv2
import os
cam = cv2.VideoCapture(0)
cam.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
cam.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)
video_code = cv2.VideoWriter_fourcc(*'XVID')
video_path='videos'
if not os.path.isdir(video_path):
     os.mkdir(video_path)
output = cv2.VideoWriter(f"{video_path}/cam_1.mp4", video_code, 7.0, (1920,1080))
while(True):
     ret,frame = cam.read()
     cv2.imshow("Mahal WebCam video", frame)
     output.write(frame)
     if 0xFF & cv2.waitKey(5) == 27:
         break
cam.release()
output.release()
cv2.destroyAllWindows()

坑洞

fps : 是告知播放器一秒要放映幾張的意思, 比如30fps, 是告知播放器一秒要放映30張. 但如果檔案裏並沒有這麼多張, 播放器還是拼命抓取, 就會造成影片快速播放的現像.

所以fps是要以實際sdcard存放的時間為主, 樹莓派每秒約7張

聲音錄製

目前尚未有單一library可以同時錄製影像及聲音. OpenCV只能錄製Video, 沒有Audio的錄製功能. 若要錄製聲音, 必需使用 pyaudio套件完成.
而且這二者必需使用不同執行緒完成
錄製完後, 再使用ffmpeg套件將二個檔合併成一個影像檔

todo

參考
https://stackoverflow.com/questions/14140495/how-to-capture-a-video-and-audio-in-python-from-a-camera-or-webcam

車輛偵測

a-chien.blogspot.com/2017/02/pythonopencv.html

motion 縮時攝影
blog.gtwang.org/iot/raspberry-pi/raspberry-pi-time-lapse-using-motion-and-webcam/

todo

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *