无法在mac os x上使用python和opencv2编写视频
我使用mac os x 1.7.5,通过macports安装了python 2.7.5_1和opencv 2.4.4_0。我似乎拥有所有最新的从属端口 在我的代码中,成功创建并打开了无法在mac os x上使用python和opencv2编写视频,python,macos,opencv,video,Python,Macos,Opencv,Video,我使用mac os x 1.7.5,通过macports安装了python 2.7.5_1和opencv 2.4.4_0。我似乎拥有所有最新的从属端口 在我的代码中,成功创建并打开了cv2.Videowriter(),它生成了一个6kb.avi文件,但videoFile.write(img0)不会将任何内容写入该文件。我真的不明白为什么视频流没有写入文件。有什么见解吗 我的代码如下: import cv2 import cv cv2.namedWindow("Original") cap0
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()
使用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
[libx264@0x7fe423869600]检测到损坏的ffmpeg默认设置
[libx264@0x7fe423869600]使用编码预设(例如-vpre-medium)
[libx264@0x7fe423869600]预设用法:-vpre-vpre
[libx264@0x7fe423869600]速度预设在x264--帮助中列出
[libx264@0x7fe423869600]配置文件是可选的;x264默认为高
我不明白上面的错误是什么意思。我尝试将ffmpeg重新安装到最新版本(1.2.2_0+gpl2),但我的脚本仍然无法工作。所有其他编解码器都没有给出任何错误
我甚至用上面的编解码器尝试了.mpg和.mkv的文件扩展名。有时我会得到一个错误,说编解码器不适合文件扩展名,但当我没有得到错误时,我只会得到一个很小的无法读取的视频文件
非常感谢您的帮助
ps:我已经回答了以下问题,这些问题并没有解决我的问题:
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('video.avi', codec, 25, size,1)
然后我的脚本开始工作
我试过使用fourcc:IYUV、I420、PIM1、MJPG、FFV1和文件扩展名为.avi的DIVX的编解码器
上述每种编解码器的帧速率分别为16、20、25和30,但PIM1的帧速率似乎仅为20fps及以上
而且
- 使用fourcc THEO的编解码器使用文件扩展名.ogv
- XVID可以正确使用文件扩展名.mkv,尽管.mkv容器可以使用任何编码,但我在使用其他编解码器时得到了各种奇怪的结果
- 文件扩展名为.flv的FLV1不工作。它给出了错误:
[flv@0x7f8414006000]标记FLV1/0x31564c46与输出编解码器id“22”不兼容([2][0][0][0])
- 文件扩展名为.flv的FLV4未给出错误,但opencv的videowrite输出错误“无法更新视频文件”
从网络摄像头捕获时始终返回0.0。这是OpenCV2.4.3和OpenCV2.4.4中的一个bugfps=videoCapture.get(cv2.cv.cv\u CAP\u PROP\u fps)
- 我还发现ffmpeg无法像从Windows和Ubuntu那样从Mac的iSight和FacetimeHD网络摄像头中抓取图像,因为苹果的设计师禁止轻松访问Mac的摄像头。。。真可惜李>
起初,我得到的是一个0 KB的视频文件。我把编解码器从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。这是一个相当麻烦的安装,但它会得到编码器和运行
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)