7

I can't seem to capture frames from a file using OpenCV -- I've compiled from source on Ubuntu with all the necessary prereqs according to: http://opencv.willowgarage.com/wiki/InstallGuide%20%3A%20Debian

#!/usr/bin/env python

import cv
import sys

files = sys.argv[1:]

for f in files:
    capture = cv.CaptureFromFile(f)
    print capture

    print cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_WIDTH)
    print cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_HEIGHT)

    for i in xrange(10000):
        frame = cv.QueryFrame(capture)
        if frame:
            print frame

Output:

ubuntu@local:~/opencv$ ./test.py bbb.avi 
<Capture 0xa37b130>
0.0
0.0

The frames are always None...

I've transcoded a video file to i420 format using:

mencoder $1 -nosound -ovc raw -vf format=i420 -o $2

Any ideas?

mpenkov
  • 21,621
  • 10
  • 84
  • 126
Matt Billenstein
  • 678
  • 1
  • 4
  • 7
  • This is exactly what I was searching for. This worked perfectly for me on Ubuntu 10.04 using Opencv's 2.1 packages. Thanks! – Cerin Sep 27 '11 at 23:40

2 Answers2

5

You don't have the gstreamer-ffmpeg or gsteamer-python or gsteamer-python-devel packages installed. I installed all three of them. and the exact same problem was resolved.

talonmies
  • 70,661
  • 34
  • 192
  • 269
eric
  • 51
  • 1
  • 1
  • It's a typo, but those who are copy/pasting, make sure you actually get "gstreamer-python" and "gstreamer-python-devel". Don't forget the R. – billmalarky Jun 01 '14 at 06:30
4

I'm using OpenCV 2.2.0, compiled on Ubuntu from source. I can confirm that the source code you provided works as expected. So the problem is somewhere else.

I couldn't reproduce your problem using mencoder (installing it is a bit of a problem on my machine) so I used ffmpeg to wrap a raw video in the AVI container:

ffmpeg -s cif -i ~/local/sample-video/foreman.yuv -vcodec copy foreman.avi

(foreman.yuv is a standard CIF image sequence you can find on the net if you look around).

Running the AVI from ffmpeg through your source gives this:

misha@misha-desktop:~/Desktop/stackoverflow$ python ocv_video.py foreman.avi
<Capture 0xa71120>
352.0
288.0
<iplimage(nChannels=3 width=352 height=288 widthStep=1056 )>
<iplimage(nChannels=3 width=352 height=288 widthStep=1056 )>
...

So things work as expected. What you should check:

  • Do you get any errors on standard output/standard error? OpenCV uses ffmpeg libraries to read video files, so be on the lookout for informative messages. Here's what happens if you try to play a RAW video file without a container (sounds similar to your problem):

error:

misha@misha-desktop:~/Desktop/stackoverflow$ python ocv_video.py foreman.yuv 
[IMGUTILS @ 0x7fff37c8d040] Picture size 0x0 is invalid
[IMGUTILS @ 0x7fff37c8cf20] Picture size 0x0 is invalid
[rawvideo @ 0x19e65c0] Could not find codec parameters (Video: rawvideo, yuv420p)
[rawvideo @ 0x19e65c0] Estimating duration from bitrate, this may be inaccurate
GStreamer Plugin: Embedded video playback halted; module decodebin20 reported: Your GStreamer installation is missing a plug-in.
<Capture 0x19e3130>
0.0
0.0
  • Make sure your AVI file actually contains the required information to play back the video. At a minimum, this should be the frame dimensions. RAW video typically doesn't contain any information besides the actual pixel data, so knowing the frame dimensions and FPS is required. You can wrong-guess the FPS and still get a viewable video, but if you get the dimensions wrong, the video will be unviewable.
  • Make sure the AVI file you're trying to open is actually playable. Try ffplay file.avi -- if that fails, then the problem is likely to be with the file. Try using ffmpeg to transcode instead of mencoder.
  • Make sure you can play other videos, using the same method as above. If you can't, then it's likely that your ffmpeg install is broken.
mpenkov
  • 21,621
  • 10
  • 84
  • 126
  • Thanks misha, I'll give these ideas a try -- no errors from ffmpeg as far as I can tell... One question, have you used any different packages when you installed all the dependencies from what they have on their wiki? – Matt Billenstein Feb 08 '11 at 11:25