I keep getting an assertion error when I\'m trying to write frames to video. The error I\'m getting is this:
Traceback (most recent call last):
File \"Vide
I tried various codecs including 'MJPG' and 'I420' and none of them worked on my Mac OpenCV build. They produced tiny unviewable output files without complaining.
Then I found this page which lists some codecs that worked for me. E.g. 'mp4v' works fine on my Mac and QuickTime is able to play it.
Do some of your frames have different colorspaces or depths? A few observations:
fourcc should be an integer > 0. See my example below.I haven't personally generated Quicktime video using OpenCV, but this worked for me generating an uncompressed AVI file. I choose the I420 fourcc using the cv.CV_FOURCC function:
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)
Update: Screencapture of VLC playing out.avi:

In Quicktime:

This file in the OpenCV source implies on line #2598 - if this assert fails: "dst.data == dst0.data"
it means that the destination size or type was incorrect