我正在尝试使用 opencv 写入方法保存视频,但视频保存为 0 kb。我的代码出了什么问题。
import cv2
cap = cv2.VideoCapture("k1.mp4")
# assert cap.isOpened()
fgbg = cv2.bgsegm.createBackgroundSubtractorMOG()
fourcc = cv2.VideoWriter_fourcc(*'MP42')
out = cv2.VideoWriter('output.mp4', fourcc, 20.0, (640,480))
# assert out.isOpened()
while cap.isOpened():
ret, frame = cap.read()
# if not ret: break
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
fgmask = fgbg.apply(gray)
thresh = 2
maxValue = 255
ret, th1 = cv2.threshold(fgmask, thresh, maxValue, cv2.THRESH_BINARY)
color_space = cv2.applyColorMap(th1, cv2.COLORMAP_JET)
result_vid = cv2.addWeighted(frame, 0.7, color_space, 0.7, 0)
out.write(result_vid)
cv2.imshow("vid", result_vid)
if cv2.waitKey(20) == ord('q'):
break
cap.release()
out.release()
cv2.destroyAllWindows()
问题是视频codec和视频容器格式不匹配。
执行代码时,我收到一条错误消息(在控制台窗口中):
OpenCV:FFMPEG:编解码器 ID 15 和格式“mp4 / MP4(MPEG-4 第 14 部分)”不支持标签 0x3234504d/“MP42”
[mp4 @ 00000155e95dcec0] 在流 #0 中找不到编解码器 msmpeg4v2 的标签,容器当前不支持编解码器
- 您正在使用
fourcc = cv2.VideoWriter_fourcc(*'MP42')
, and M420
应用视频编解码器MPEG-4v2.
- 视频输出文件名为
'output.mp4'
.
The .mp4
扩展应用 MP4 容器格式。
显然.mp4
视频文件不能包含编码为的视频MPEG-4v2
编解码器。
您可以更改编解码器或更改文件格式。
例子:
- 将输出文件名更改为
'output.avi'
or 'output.wmv'
作品。
- 将编解码器更改为
MPEG-4
: fourcc = cv2.VideoWriter_fourcc(*'mp4v')
(并保留文件名'output.mp4'
)也有效。
还有一个问题:
之后添加以下代码ret, frame = cap.read()
:
if not ret:
break;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)