python OpenCV VideoWriter 視訊格式及大小

咻哈發表於2020-10-26

問題:1、VideoWriter不能寫MP4或是其他格式視訊;

           2、VideoWriter寫入儲存的視訊大小為0kb;

           3、VideoCapture讀取開啟不了MP4格式的視訊。

解決:將OpenCV中的opencv_ffmpeg330_64.dll(在OpenCV\build\bin資料夾下,注意這是我的opencv版本)檔案拷貝到Python的Lib\site-packages資料夾下(與cv2.pyd檔案放在一起解碼用)。

編碼格式(('M', 'P', '4', '2') 視訊大小最小):

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

通過攝像頭錄製了長約5分鐘的視訊,在D盤下生成的檔案如下:


生成檔案佔用空間最小的編碼方式是 MPEG-4.2 codec,約為19MB。用紅線段標識,對應在VideoWriter類的建構函式引數為CV_FOURCC('M', 'P', '4', '2') 。

最大的是MPEG-1 codec,用藍線段標識,約為111MB。對應在VideoWriter類的建構函式引數為CV_FOURCC('P','I','M','1') ,所佔磁碟空間是前者的5.7倍。所以如果需要24小時全天候錄製監控,基於磁碟空間的考慮,可以優先使用MPEG-4.2的編解碼方式。

def composeVideo():
    fourcc = cv2.VideoWriter_fourcc('M', 'P', '4', '2')
    # cv2.VideoWriter(path,fourcc,fps,size) path是生成視訊路徑,fourcc是視訊格式,fps表示一秒放多少張圖片,size表示大小,一般是視訊影像大小
    videoWriter = cv2.VideoWriter('out-video\\snake2.avi', fourcc, 10, (1920,1080))
    # 我的圖片編號是3,6,9,12,...,627,寫自己的圖片編號就行
    for i in range(3,630,3):
        image_number = i
        print(i)
        img12 = cv2.imread('out-video\\out-pic\\' + str(image_number) + '.jpg')
        videoWriter.write(img12)
    videoWriter.release()

 

相關文章