Why can't I open avi video in openCV?

65,375

Solution 1

1)
Make sure the video file is actually in the same folder as the application (I'm assuming you've already tried this), otherwise specify the absolute path.

2)
If you're on Windows, you may need a codec pack to read the video file (e.g., K-Lite Codec Pack).

As Macmade suggested, AVI is merely a container which can house different audio, video, or even closed caption codecs. Also, here are Zeranoe's FFmpeg builds for Windows. You can get further information on your file's codec contents if you do the following:

ffmpeg -i guitarplaying.avi

You should see an output that looks like this:

ffmpeg version 0.8.7.git, Copyright (c) 2000-2011 the FFmpeg developers
  built on Dec  6 2011 09:20:43 with gcc 4.6.1
  configuration: --pkg-config=pkg-config --enable-gpl --enable-version3 --enable
-nonfree --enable-runtime-cpudetect --enable-memalign-hack --enable-postproc --a
rch=x86 --target-os=mingw32 --cross-prefix=i686-w64-mingw32- --prefix=/home/wluc
as/ffmpeg-cross/build/deploy --enable-libx264 --enable-libvpx --enable-zlib --en
able-bzlib --enable-libxvid --enable-libfaac --enable-libmp3lame --enable-libvor
bis --enable-libtheora --enable-libopenjpeg --enable-libfreetype
  libavutil    51. 30. 0 / 51. 30. 0
  libavcodec   53. 40. 0 / 53. 40. 0
  libavformat  53. 24. 0 / 53. 24. 0
  libavdevice  53.  4. 0 / 53.  4. 0
  libavfilter   2. 51. 0 /  2. 51. 0
  libswscale    2.  1. 0 /  2.  1. 0
  libpostproc  51.  2. 0 / 51.  2. 0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '..\..\Videos\Sintel\sintel_trailer-720p
.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 1970-01-01 00:00:00
    title           : Sintel Trailer
    artist          : Durian Open Movie Team
    encoder         : Lavf52.62.0
    copyright       : (c) copyright Blender Foundation | durian.blender.org
    description     : Trailer for the Sintel open movie project
  Duration: 00:00:52.20, start: 0.000000, bitrate: 1165 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720,
 1033 kb/s, 24 fps, 24 tbr, 24 tbn, 48 tbc
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, s16, 126
 kb/s
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    :

So, as you can see this .mp4 container has a H.264 video codec and an AAC audio codec.

Solution 2

A missing OpenCV's ffmpeg.dll does not generate any warnings/errors in OpenCV 2.3.1, and code fails silently. Make sure that you have proper opencv_ffmpeg*.dll in your path.

Solution 3

May be you load the wrong lib file.Just like me,I get the same problem.But I can open AVI file in VC6.0 which use the opencv version 1.0.Finally,I find that I use the wrong lib.

In Debug Mode,but I use opencv_core220.lib and opencv_highgui220.lib .And I replace them with opencv_core220d.lib and opencv_highgui220d.lib .Now I can read it.

Solution 4

I also encounter the same problem. With the sample code for VideoCapture, my visual studio program failed to open any video file. Then, the suggestion of nimcap works for me. "A missing OpenCV's ffmpeg.dll does not generate any warnings/errors in OpenCV 2.3.1, and code fails silently. Make sure that you have proper opencv_ffmpeg*.dll in your path."

Solution: Copy opencv_ffmpeg.dll to my visual studio project /Debug folder, I can open almost any video file with VideoCapture.

Solution 5

In OpenCV 2.4.4 : there is only opencv_ffmpeg244.dll (release dll) and not opencv_ffmpeg244d.dll (debug dll)

So try in release compilation mode !

Share:
65,375

Related videos on Youtube

yvetterowe
Author by

yvetterowe

Updated on March 14, 2021

Comments

  • yvetterowe
    yvetterowe about 3 years

    I just wrote a simple video reading example with openCV2.3.1, but it seems that I cannot open avi video anyway :(

    VideoCapture capture("guitarplaying.avi");
    if(!capture.isOpened()){
        std::cout<<"cannot read video!\n";
        return -1;
    }
    Mat frame;
    namedWindow("frame");
    
    double rate = capture.get(CV_CAP_PROP_FPS);
    int delay = 1000/rate;
    
    while(true)
    {
        if(!capture.read(frame)){
            break;
        }
        imshow("frame",frame);
    
        if(waitKey(delay)>=0)
            break;
    }
    
    capture.release();
    

    I made a breakpoint in std::cout<<"cannot read video!\n" and find that it stopped here every time. So why avi video cannot be opened? Thanks!

    • Macmade
      Macmade over 12 years
      AVI is a file format, not a video format. So you should check that the video is encoded in a supported video format, as an AVI file may be encoded in different ways.
  • SSteve
    SSteve over 12 years
    To expand on point 1: people often make the mistake of putting the image file (avi, jpg, etc.) in the same folder as their source code instead of the same folder as the compiled program.
  • Ben Allison
    Ben Allison about 11 years
    This plagued me for a couple of hours too, til I saw this answer
  • Doug Kavendek
    Doug Kavendek about 11 years
    I had this exact issue; no matter what encoder I used, it would fail to load until I copied that DLL over.
  • Kartos
    Kartos almost 11 years
    Thanks a ton! I was trying to fix the video codecs and the code for rendering the video on my machine when the executable was looking for the ffmpeg dll.
  • cbuchart
    cbuchart over 10 years
    I've had the same missing DLL problem. The "release" version is working for me in both debug and release modes.
  • Tayla Wilson
    Tayla Wilson almost 10 years
    on windows you need to add the right folder like this: opencv\build\..\bin from where you extracted opencv to your path.
  • Smalltown2k
    Smalltown2k over 9 years
    +allthe1s for this. It is (I have discovered) also the case with the Java bindings; you'll need the FFmpeg dll in your classpath.
  • Vivekanand
    Vivekanand over 8 years
    I still couldn't get this fixed. I have spend couple of days on this. Any help will be appreciated
  • Johannes Brodwall
    Johannes Brodwall over 7 years
    This describes the problem, but not the solution. @nimcap's answer explains how to fix it concisely and accurately.
  • mesutpiskin
    mesutpiskin over 7 years
    I copy the opencv_ffmpeg310.dll, opencv_ffmpeg310x64.dll and the problem was solved. Thank you so much.
  • jwdmsd
    jwdmsd over 5 years
    saved the day for me
  • petacreepers23
    petacreepers23 over 4 years
    saved my day, men. Thank you