无法使用OpenCV和Python编写和保存视频文件

时间:2016-07-15 13:57:17

标签: python opencv

我尝试处理视频流中的帧,并将其作为新视频处理。

这就是我正在做的事情:

fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('Videos/output.mp4',fourcc, fps, (1080,1080))

我一直在:

OpenCV: FFMPEG: tag 0x44495658/'XVID' is not supported with codec id 13 and format 'mp4 / MP4 (MPEG-4 Part 14)'
OpenCV: FFMPEG: fallback to use tag 0x00000020/' ???'

我认为我使用了错误的四分之一值...我应该使用哪一个?我一直在尝试很多。

我使用的是Ubuntu 16.04,Python 2.7.11和OpenCV 3.1.0

9 个答案:

答案 0 :(得分:8)

定义编解码器并像这样创建VideoWriter对象

fourcc = cv2.VideoWriter_fourcc(*'MPEG')
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))

答案 1 :(得分:2)

适用于Windows用户

我在Windows 10上使用OpenCV 2和Python 3.6。

'XVID'编解码器以及生成.avi文件似乎是最通用的解决方案(如果不是唯一有效的解决方案)。

fourcc = cv.VideoWriter_fourcc(*'XVID')
out = cv.VideoWriter('test.avi', fourcc, 60, (320, 240))

此外,只有BGR可以使用此类VideoWriter声明直接编写。不要尝试写灰框:输出为空。

答案 2 :(得分:1)

您遇到的问题是,您尝试以XVID格式导出帧,但是输出文件的名称以.mp4结尾。您应该将导出格式更改为MP4V,或将输出文件的名称更改为.avi

fourcc = cv2.VideoWriter_fourcc(*'MP4V')
out = cv2.VideoWriter('Videos/output.mp4',fourcc, fps, (1080,1080))

替代

fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('Videos/output.avi',fourcc, fps, (1080,1080))

在这里您可以找到有关video codecs

的更多信息

答案 3 :(得分:1)

如果要通过opencv以mp4格式保存视频,请让

关注link

您应该替换:

fourcc = cv2.VideoWriter_fourcc(*'XVID')

作者:

fourcc = cv2.VideoWriter_fourcc(*'FMP4')

我尝试并成功。

答案 4 :(得分:0)

我遇到了同样的问题。对我来说,事实证明我已经切换了视频的高度和宽度,因此帧尺寸与视频规格不匹配,因此没有写入任何内容。确保它们完全匹配。

此外,如果文件扩展名与使用的编解码器不匹配,OpenCV似乎会发出相同的警告。具体来说,它需要.avi用于XVID编解码器。

答案 5 :(得分:0)

您要提供的框架的大小(宽度,高度)应与您要保存的框架的大小匹配。 所以
   fw = int(cap.get(3)) fh = int(cap.get(4)) print("w,h",fw,fh) out = cv2.VideoWriter('fb1.avi',cv2.VideoWriter_fourcc('X','V','I','D'), fps, (fw,fh))

答案 6 :(得分:0)

如果您使用的是Linux,请尝试

fourcc = 0x00000021
out = cv2.VideoWriter('Videos / output.mp4',fourcc,fps,(1080,1080))

答案 7 :(得分:0)

我想另存为.mp4,至少在Linux上使用*"mp4v"才是正确的代码。

答案 8 :(得分:0)

安装 K-Lite Mega Codec Pack:https://filehippo.com/download_klite_mega_codec/
出现此错误是因为某些编解码器在 Windows 媒体播放器中默认不可用。因此,通过安装此软件,视频可以使用相同的代码正常运行。