繁体   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