13

I am trying to create a video using OpenCV 2.4.0 in python 2.7.2. But the avi file size is 0.

My code:

from cv2 import *

im1 = cv.LoadImage("1.jpg")

fps = 20
frame_size = cv.GetSize(im1)

#writer = cv.CreateVideoWriter("out.avi", CV_FOURCC('M', 'J', 'P', 'G'), fps, frame_size, True)

v = VideoWriter()

v.open("out.avi", cv.CV_FOURCC('F', 'M', 'P', '4'), fps, (800,600), True)
print v.isOpened()

isOpened() is always returning false.

Another try:

#!/usr/bin/env python
import sys

from cv2 import *

im1 = cv.LoadImage("1.jpg")

if not im1:
    print "Error loading image"

im2 = cv.LoadImage("2.jpg")

if not im1:
    print "Error loading image"

fps = 20
frame_size = cv.GetSize(im1)

writer = cv.CreateVideoWriter("out.avi", cv.CV_FOURCC('M', 'J', 'P', 'G'), fps, frame_size, True)

if not writer:
    print "Error in creating video writer"
    sys.exit(1)
else:
    cv.WriteFrame(writer, im1)
    cv.WriteFrame(writer, im2)

del writer

No errors, but the output is empty.

What am I missing?

ATOzTOA
  • 34,814
  • 22
  • 96
  • 117
  • I haven't used OpenCV before but I guess You need to call python's equivalent of [this function](http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html#releasevideowriter) when the writing is done. – Ashwini Chaudhary Jan 21 '13 at 14:21
  • related : http://stackoverflow.com/questions/6918995/opencv-error-on-python – Ashwini Chaudhary Jan 21 '13 at 14:27
  • @AshwiniChaudhary I have checked all of the questions in SO, nothing works. Also, I tried `del writer`, still nothing. Seems like I am missing some codecs, maybe. – ATOzTOA Jan 21 '13 at 15:04
  • I'm hitting similar issues, I'm guessing there may be a bug in the writer. – Aron Ahmadia Mar 15 '13 at 13:29

3 Answers3

42
import cv2

img1 = cv2.imread('1.jpg')
img2 = cv2.imread('2.jpg')
img3 = cv2.imread('3.jpg')

height , width , layers =  img1.shape

video = cv2.VideoWriter('video.avi',-1,1,(width,height))

video.write(img1)
video.write(img2)
video.write(img3)

cv2.destroyAllWindows()
video.release()

A simple code for what you want to do. for details here

Ayub Khan
  • 896
  • 2
  • 14
  • 17
7

Found this code, which works for me (generating colored noise):

writer = cv2.VideoWriter("output.avi", cv2.VideoWriter_fourcc(*"MJPG"), 30,(640,480))
for frame in range(1000):
    writer.write(np.random.randint(0, 255, (480,640,3)).astype('uint8'))
writer.release()

Source: https://github.com/ContinuumIO/anaconda-issues/issues/223#issuecomment-285523938

kungfooman
  • 4,473
  • 1
  • 44
  • 33
1
height, width, layers = img.shape
out = cv2.VideoWriter("output.avi", cv2.VideoWriter_fourcc(*"XVID"), 30,(width,height))
out.write(img)
out.release()
YakovK
  • 337
  • 2
  • 10