python opencv videowrite不写视频
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python opencv videowrite不写视频相关的知识,希望对你有一定的参考价值。
我刚开始使用opencv编写python。我使用了opencv 3.0.0教程中的以下页面
当我尝试使用保存视频的示例时,它不起作用。它显示来自网络摄像头的内容,并且还创建一个名为output.avi的文件,但是当我检查ouput.avi的大小时,它是零字节。我也尝试使用不同的编解码器,如YUY2
我使用python 2.7.8和opencv 3.0.0和Windows 8.1
我有同样的问题,我通过指定视频输出分辨率与输入完全相同来解决它:
cap = cv2.VideoCapture('vtest.avi')
...
out = cv2.VideoWriter('output.avi',fourcc, 20.0,(int(cap.get(3)),int(cap.get(4))))
当然要确保你安装了ffmpeg并正常工作。
更换:
fourcc = cv2.VideoWriter_fourcc(*'XVID')
附:
fourcc = cv2.VideoWriter_fourcc('M','J','P','G')
为我工作......
更普遍:
查找here之后的视频压缩格式的fourcc代码,无论代码是什么 - 例如FFMpeg的'FMP4' - 以下列方式插入:
cv2.VideoWriter_fourcc('F','M','P','4')
确保使用正确的fourcc 4字节代码。本教程的示例包括:
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))
这个'XVID'代码可能只适用于linux。示例上方的文档说明(在教程中):“在Windows中:DIVX(更多要测试和添加)。”所以如果你还没有,尝试用以下方法替换上面的fourcc线:
fourcc = cv2.VideoWriter_fourcc(*'DIVX')
我经常在linux上使用cv2.VideoWriter,它总能工作。因此,如果上述方法不起作用,您可以随时在linux vm上进行尝试。
在我的情况下,我认为编解码器是一个障碍,但事实并非如此。相反,调整videoWriter()消耗的维度就可以了:
(ok, frame) = cv2.VideoCapture(videoPath).read()
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter(output, fourcc, 10.0, (1280, 720))
使用(1280,720)是因为我的视频输出中的frame.shape(1280,720,3)。它使avi成为mp4,反之亦然。不必担心协调编解码器。
这应该是您正在使用的编解码器的问题。
你有没有尝试过:
cv.CV_FOURCC('i', 'Y', 'U', 'V')
这个对我有用。
在Windows 7上,使用Python 2.7和OpenCV 2.4.8,我经历了如果文件NAME是"output.mpg"
不会写的事实。
我通过改为"output.avi"
解决了这个问题。
我将视频编写器大小更改为我的屏幕分辨率大小,它工作正常。
这是解决方案。
out = cv2.VideoWriter("output.avi", fourcc, 5.0, (1920, 1080))
我有完全相同的问题。我在C ++中使用OpenCV,但我相信你仍然可以通过-1
而不是选择编解码器,所以即使在python中你也可以拥有可用编解码器的下拉菜单。从那里我尝试了所有不同的编解码器,就像Leonard Zhou一样,IYUV
编解码器是适合我的编解码器。还要注意,它是唯一一个有效的,即使我可以在具有相同代码和相同编解码器安装程序的另一台机器上使用XVID。
编辑:我建议作为一个补丁,主要问题是在我的最终通过在可执行文件夹中添加opencv_ffmpeg
DLL解决。
检查图像的分辨率!我尝试使用奇形图像(1284x709)并最终得到1k大小的不可读视频。将我的图像调整为最接近的'共同'分辨率:image = cv2.resize(image, (1280,720))
后,它工作得很好。
以上是关于python opencv videowrite不写视频的主要内容,如果未能解决你的问题,请参考以下文章