繁体   English   中英

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

[英]Can't write and save a video file using OpenCV and Python

我正在尝试处理来自视频 stream 的帧,并将其作为新视频处理。

这就是我正在做的事情:

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/' ???'

我想我使用了错误的fourcc值......我应该使用哪一个? 我已经尝试了很多。

我正在使用 Ubuntu 16.04、Python 2.7.11 和 OpenCV 3.1.0

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

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

对于 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声明来写。 不要尝试写入灰色帧:输出将为空。

您遇到的问题是您试图以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))

在这里您可以找到有关视频编解码器的更多信息

您提供的框架(宽度,高度)的大小应与您要保存的框架的大小相匹配。 所以
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))

如果你想通过opencv以mp4格式保存视频,让

按照这个链接

你应该更换:

fourcc = cv2.VideoWriter_fourcc(*'XVID')

通过:

fourcc = cv2.VideoWriter_fourcc(*'FMP4')

我尝试并成功了。

我有同样的问题。 对我来说,原来是我切换了视频的高宽,所以帧尺寸不符合视频规格,结果什么也没写。 确保它们完全匹配。

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

如果您使用的是 linux 试试这个

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

我想保存为 .mp4,结果证明使用*"mp4v"是正确的代码,至少在 Linux 上是这样。

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

我尝试使用不同的 cv2.VideoWriter_fourcc 类型,我在答案中找到了。 我的系统响应:

OpenCV:FFMPEG:标签 0x34504d46/'FMP4' 不受编解码器 ID 12 和格式'mp4 / MP4(MPEG-4 Part 14)'的支持 OpenCV:FFMPEG:回退使用标签 0x7634706d/'mp4v'

所以我使用了 FFMPEG 在错误消息中建议的内容。 我设置了fourcc = 0x7634706d并且它起作用了。 多谢你们 :)

在 Mac 上

writer = cv2.VideoWriter('mysupervideo.mp4', cv2.VideoWriter.fourcc(*'mp4v'), 20, (width, height))

效果更好

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM