Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在mac os x上使用python和opencv2编写视频_Python_Macos_Opencv_Video - Fatal编程技术网

无法在mac os x上使用python和opencv2编写视频

无法在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

我使用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.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输出错误“无法更新视频文件”

在使用.avi文件容器的编解码器中,DIVX生成的视频文件最小(4秒视频约4Mb),IYUV生成的文件最大(4秒视频约160Mb)

注:

  • fps=videoCapture.get(cv2.cv.cv\u CAP\u PROP\u fps)
    从网络摄像头捕获时始终返回0.0。这是OpenCV2.4.3和OpenCV2.4.4中的一个bug
  • 我还发现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)