python - 无法在opencv中保存视频

标签 python opencv video

我正在尝试使用 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()

最佳答案

问题是视频编解码器 和视频容器 格式不匹配。

在执行您的代码时,我收到一条错误消息(在控制台窗口中):

OpenCV: FFMPEG: tag 0x3234504d/'MP42' is not supported with codec id 15 and format 'mp4 / MP4 (MPEG-4 Part 14)'
[mp4 @ 00000155e95dcec0] Could not find tag for codec msmpeg4v2 in stream #0, codec not currently supported in container

  • 您正在使用 fourcc = cv2.VideoWriter_fourcc(*'MP42') , 和 M420应用视频编解码器 MPEG-4v2
  • 视频输出文件名为'output.mp4' .
    .mp4扩展适用 MP4 容器格式。

显然 .mp4视频文件不能包含使用 MPEG-4v2 编码的视频编解码器。

您可以更改编解码器或更改文件格式。

示例:

  • 将输出文件名更改为 'output.avi''output.wmv'作品。
  • 将编解码器更改为 MPEG-4 : fourcc = cv2.VideoWriter_fourcc(*'mp4v') (并保留文件名 'output.mp4' )也有效。

还有一个问题:

ret, frame = cap.read()之后添加以下代码:

if not ret:
    break;

关于python - 无法在opencv中保存视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60689660/

相关文章:

python - 使用 Python Paramiko 的嵌套 SSH

opencv - 消除特征描述符中的误报

java - 使用 FFMPEG 连接两个视频文件时出现问题

python - wxPython 网络拓扑工具 - 需要一些帮助 - 请看看 :)

python - tensorflow 张量板错误: you must feed a value for placeholder tensor

opencv - 无法在 mac osx 上使用brew或make安装opencv

java - 如何将opencv +java打包到jar中

javascript - YouTube视频响应与章节停止

ios - `PHAssetChangeRequest.creationRequestForAssetFromVideo(url:)` 无法在 iPhone SE 上播放高 FPS 视频

python - python有原子CompareAndSet操作吗?