首页 文章

为什么我不能在openCV中打开avi视频?

提问于
浏览
21

我刚刚用openCV2.3.1写了一个简单的视频阅读示例,但似乎无论如何我都无法打开avi视频:(

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();

我在 std::cout<<"cannot read video!\n" 做了一个断点,发现它每次都停在这里 . 那么为什么avi视频无法打开?谢谢!

11 回答

  • -1

    1)
    确保视频文件实际上与应用程序位于同一文件夹中(我已尝试过此操作),否则请指定绝对路径 .

    2)
    如果您使用的是Windows,则可能需要使用编解码器包来读取视频文件(例如,K-Lite Codec Pack) .

    正如Macmade所说,AVI只是一个容器,可以容纳不同的音频,视频,甚至是隐藏式字幕编解码器 . 此外,如果您执行以下操作,here是Zeranoe 's FFmpeg builds for Windows. You can get further information on your file'的编解码器内容:

    ffmpeg -i guitarplaying.avi
    

    您应该看到如下所示的输出:

    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    :
    

    因此,正如您所看到的,.mp4容器具有H.264视频编解码器和AAC音频编解码器 .

  • 0

    缺少OpenCV的ffmpeg.dll不会在OpenCV 2.3.1中生成任何警告/错误,并且代码无提示失败 . 确保路径中有正确的opencv_ffmpeg * .dll .

  • 1

    可能是你加载了错误的lib文件 . 就像我一样,我也遇到了同样的问题 . 但是我可以在VC6.0中打开使用opencv 1.0版的AVI文件 . 最后,我发现我使用了错误的lib .

    在调试模式下,但我使用 opencv_core220.libopencv_highgui220.lib . 我用 opencv_core220d.libopencv_highgui220d.lib 替换它们 . 现在我可以读它 .

  • 0

    在OpenCV 2.4.4中:只有opencv_ffmpeg244.dll(发布dll)而不是opencv_ffmpeg244d.dll(debug dll)

    所以尝试在发布编译模式!

  • 0

    我也遇到了同样的问题 . 使用VideoCapture的示例代码,我的visual studio程序无法打开任何视频文件 . 然后,nimcap的建议对我有用 . “缺少OpenCV的ffmpeg.dll在OpenCV 2.3.1中不会产生任何警告/错误,代码会无声地失败 . 请确保路径中有正确的opencv_ffmpeg * .dll . ”

    解决方案:将opencv_ffmpeg.dll复制到我的visual studio项目 /Debug 文件夹,我几乎可以使用VideoCapture打开任何视频文件 .

  • 1

    Windows x64 下,您不必重命名任何内容 . 只需将以下 ...\opencv\build\x64\vc12\bin 放入 PATH 即可 .

  • -1

    只需更改您的代码:

    VideoCapture capture("guitarplaying.avi");
    

    对此:

    CvCapture *input_video = cvCreateFileCapture("guitarplaying.avi");
    
  • -1

    我只是补充说,因为我花了更多的时间而不是承认 . 无法打开文件导致了大量奇怪的例外 .

    如果您发现绝对路径有效,而相对路径不起作用,则要检查的另一件事是确保正确设置工作目录 .

    在Visual Studio中,这是项目属性(配置属性) - >调试 - >工作目录 . 当我真的想要“$(OutDir)”时,我发现默认设置为“$(ProjectDir)” .

  • 4

    你需要从xvid.org下载你的机器Xvid,这就是全部:http://www.xvid.org/Downloads.15.0.html

  • 53

    打开 D:\OpenCV\build\x64\vc14\bin 并根据 Windows (x86 or x64) 复制与您相关的 opencv_ffmpeg320.dllopencv_ffmpeg320_64.dll .

    opencv_ffmpeg320.dll - > for 32-bit Windows (x86)

    opencv_ffmpeg320_64.dll - > for 64-bit Windows (x64)

    将复制的 .dll 粘贴到 C:\Python27\ 或可从Windows PATH 环境变量访问的任何位置 .

    或者,您可以创建一个文件夹 D:\OpenCV\vendor\ 并将 .dll 文件添加到该文件夹,然后将 D:\OpenCV\vendor\ 添加到您的 windows environment variables .

  • 4

    如果您使用的是Ubuntu 16,可以试试这个:

    pip install opencv-python

相关问题