簡體   English   中英

無法在mac os x上使用python和opencv2編寫視頻

[英]Unable to write video using python and opencv2 on mac os x

我使用mac os x 1.7.5與python 2.7.5_1和opencv 2.4.4_0通過macports安裝。 我似乎擁有所有最新的依賴端口。

在我的代碼中,成功創建並打開了cv2.Videowriter() ,它生成了一個6kb的.avi文件,但是videoFile.write(img0)沒有在該文件中寫入任何內容。 我真的無法弄清楚為什么視頻流沒有寫入文件。 任何見解?

我的代碼如下:

import cv2
import cv

cv2.namedWindow("Original")

cap0 = cv2.VideoCapture(0) 

codec = cv.CV_FOURCC('D','I','V','X')
print codec

videoFile = cv2.VideoWriter();
videoFile.open('video.avi', codec, 25, (640, 480),1)

key = -1
while(key < 0):
    success0, img0 = cap0.read()

    cv2.imshow("Original", img0)

    videoFile.write(img0)

    key = cv2.waitKey(1)
cv2.destroyAllWindows()

我嘗試過這些編解碼器,但沒有一個工作:I420,AVC1,YUV1,PIM1,MJPG,MP42,MP4V,DIV3,DIVX,XVID,IUYV,FFV1,FLV1,U263,H264,ZLIB

我也經歷了這里提到的所有快速編解碼器

使用ZLIB編解碼器我收到錯誤:

[zlib @ 0x7fb0d130a000] Specified pixel format yuv420p is invalid or not supported

使用H264編解碼器我收到一個錯誤:

[libx264 @ 0x7fe423869600] broken ffmpeg default settings detected
[libx264 @ 0x7fe423869600] use an encoding preset (e.g. -vpre medium)
[libx264 @ 0x7fe423869600] preset usage: -vpre <speed> -vpre <profile>
[libx264 @ 0x7fe423869600] speed presets are listed in x264 --help
[libx264 @ 0x7fe423869600] profile is optional; x264 defaults to high

我不明白上述錯誤的含義。 我嘗試將ffmpeg重新安裝到最新版本(1.2.2_0 + gpl2),但我的腳本仍無效。 所有其他編解碼器都沒有給出任何錯誤。

我甚至嘗試過使用上述編解碼器的.mpg和.mkv文件擴展名。 有時候我會得到一個錯誤,說編解碼器不適合文件擴展名,但是當我沒有得到錯誤時,我只會得到一個小尺寸的不可讀視頻文件。

任何幫助深表感謝。

ps:我已經完成了以下SO問題但沒有解決我的問題:

問題似乎與函數videoFile.open('video.avi', codec, 25, (640, 480),1)的圖像大小有關。

所以我更新了我的腳本以包含

size = (int(cap0.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)),
        int(cap0.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT)))

然后相應地將videoFile.open更改為

videoFile.open('video.avi', codec, 25, size,1)

然后我的腳本開始工作了。

我嘗試過使用fourcc的編解碼器:IYUV,I420,PIM1,MJPG,FFV1和DIVX,文件擴展名為.avi

上述編解碼器中的每一個都使用幀速率16,20,25和30,除了PIM1,它似乎只能在20fps及以上工作。

也,

  • 帶有fourcc的編解碼器THEO使用文件擴展名.ogv
  • XVID與文件擴展名.mkv一起正常工作,雖然.mkv容器應該可以使用任何編碼,但是我用其他編解碼器得到了各種奇怪的結果。
  • 文件擴展名為.flv的FLV1無效。 它給出了錯誤:

    [flv @ 0x7f8414006000] Tag FLV1/0x31564c46 incompatible with output codec id '22' ([2][0][0][0])

  • 文件擴展名為.flv的FLV4沒有出錯,但opencv的錄像帶輸出錯誤“無法更新視頻文件”

在使用.avi文件容器的編解碼器中,DIVX生成了最小的視頻文件(4秒視頻約4Mb),IYUV生成了最大的文件(約為160Mb,4秒視頻)

注意:

  • 從網絡攝像頭捕獲時, fps = videoCapture.get(cv2.cv.CV_CAP_PROP_FPS)始終返回0.0。 這是OpenCV2.4.3和OpenCV2.4.4中的一個錯誤
  • 我還發現ffmpeg無法從Windows和Ubuntu中獲取來自Mac的iSight和FacetimeHD網絡攝像頭的圖像,因為Apple的設計人員禁止輕松訪問Mac的攝像頭......真可惜!

參考文獻:

http://en.wikipedia.org/wiki/Comparison_of_container_formats

最初我得到了一個0kb的視頻文件。 我將Codec從MJPG改為iYUV。 它對我有用。 Python 2.7和openCV 2.4.5。

cap = cv2.VideoCapture(0)
fourCC = cv2.cv.CV_FOURCC('i','Y','U', 'V'); # Important to notice cv2.cv.CV_FOURCC
size = (int(cap.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)),   int(cap.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT)))
out = cv2.VideoWriter("Test.avi", fourCC, 15.0, size, True)

要使h264正常工作,請從以下鏈接安裝ffmpeg。 這是一個非常麻煩的安裝,但它將使編碼器啟動和運行。

https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM