繁体   English   中英

OpenCV VideoWriter 写入损坏的视频文件

[英]OpenCV VideoWriter writes corrupted video files

我正在尝试使用如下所示的 Python 脚本从我的网络摄像头流式传输和保存视频,但由于某种原因,“myvideo.mp4”文件非常小,无法使用 QuickTime(或其他播放器)打开 - 它似乎是空的。 但是,视频流完美运行。

正如其他主题中所建议的那样,我尝试了不同的文件格式和编解码器,并传递了网络摄像头返回的精确 fps、宽度和高度。 也许有人知道这里的问题是什么? 提前致谢!

import cv2

cap = cv2.VideoCapture(0)

width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
fps = cap.get(cv2.CAP_PROP_FPS)

writer = cv2.VideoWriter('myvideo.mp4',cv2.VideoWriter_fourcc(*'mp4v'),fps,(width,height))

while True:

    ret,frame = cap.read()

    # OPERATIONS (DRAWING)
    writer.write(frame)    
    cv2.imshow('frame',frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
writer.release()
cv2.destroyAllWindows()

我也尝试以超级用户身份运行脚本,但没有帮助。 我正在使用 Mac。

QuickTime 错误:

无法打开文件“myvideo.mp4”。 该文件与 QuickTime Player 不兼容。

尝试更改fourcc(用于压缩帧的编解码器的4个字符代码。)

writer = cv2.VideoWriter('myvideo.mp4',cv2.VideoWriter_fourcc(*'mp4v'),fps,(width,height))

将其替换为

writer = cv2.VideoWriter('myvideo.mp4',cv2.VideoWriter_fourcc(*'XVID'),fps,(width,height))

简单地修正错字

改变

height = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))

height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

您服用了CAP_PROP_FRAME_WIDTH两次。

如果问题仍然存在...

如果这仍然没有帮助,请尝试交换它们。 这看起来很愚蠢,但对我有帮助。 我猜想get方法以某种方式考虑了方向,但是读取帧会忽略视频的方向(或者相反,没关系,它们只是不一致)。 我遇到了完全相同的问题,用高度交换了宽度并解决了它。

额外的

在 mac 上测试的一些旧的编解码器列表

暂无
暂无

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

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