繁体   English   中英

使用OpenCV + Python + Mac编写视频

[英]Writing video with OpenCV + Python + Mac

当我试图将帧写入视频时,我不断收到断言错误。 我得到的错误是这样的:

Traceback (most recent call last):
  File "VideoMixer.py", line 23, in <module>
    cv.WriteFrame(writer, cv.LoadImage(fileName))
cv.error: dst.data == dst0.data

这是我的脚本:

import cv
import sys

files = sys.argv[1:]

for f in files:
    capture = cv.CaptureFromFile(f)
    height = cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_WIDTH)
    width = cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_HEIGHT)
    fps = cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FPS)
    fourcc = cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FOURCC)
    print fourcc
    writer = cv.CreateVideoWriter('ok.mov', int(fourcc),fps,(int(width),int(height)),1)
    print writer
    for i in range(30):
        frame = cv.QueryFrame(capture)
        print frame
        if frame:
            cv.WriteFrame(writer, frame)

保存帧图像工作正常,所以我知道捕获没有错。 我创作的作者错了吗? 'print fourcc'输出0.0,但我尝试了很多FOUR_CC值。

谢谢!

你的一些帧有不同的颜色空间或深度? 一些观察:

  • 您已经在代码中交换了高度和宽度,这是故意的吗?
  • 你的fourcc应该是一个大于0的整数。见下面的例子。

我没有亲自使用OpenCV生成Quicktime视频,但这对我生成了一个未压缩的AVI文件。 我使用cv.CV_FOURCC函数选择I420 fourcc:

import cv
import sys

# standard RGB png file
path = 'stack.png'
cap = cv.CaptureFromFile(path)
fps = 24
width = int(cv.GetCaptureProperty(cap, cv.CV_CAP_PROP_FRAME_WIDTH))
height = int(cv.GetCaptureProperty(cap, cv.CV_CAP_PROP_FRAME_HEIGHT))
# uncompressed YUV 4:2:0 chroma subsampled
fourcc = cv.CV_FOURCC('I','4','2','0')
writer = cv.CreateVideoWriter('out.avi', fourcc, fps, (width, height), 1)
for i in range(90):
    cv.GrabFrame(cap)
    frame = cv.RetrieveFrame(cap)
    cv.WriteFrame(writer, frame)

更新 :VLC播放的屏幕out.avi

在此输入图像描述

在Quicktime中:

在此输入图像描述

我尝试了各种编解码器,包括'MJPG'和'I420',但它们都没有在我的Mac OpenCV版本上运行。 他们制作了微小的无法查看的输出文件而没有抱怨。

然后我发现这个页面列出了一些对我有用的编解码器。 例如'mp4v'在我的Mac上工作正常,QuickTime可以播放它。

OpenCV源中的此文件意味着在第2598行 - 如果此断言失败:“dst.data == dst0.data”

这意味着目标大小或类型不正确

暂无
暂无

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

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