web-dev-qa-db-ja.com

aviビデオをopenCVで開けないのはなぜですか?

私は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ビデオを開けないのですか?ありがとう!

21
yvetterowe

1)
ビデオファイルが実際にアプリケーションと同じフォルダーにあることを確認します(既に試したことがあると仮定しています)。それ以外の場合は絶対パスを指定します。

2)
Windowsを使用している場合、ビデオファイルを読み取るためにコーデックパックが必要になる場合があります(例: K-Lite Codec Pack )。

Macmadeが示唆したように、AVIは、さまざまなオーディオ、ビデオ、またはクローズドキャプションコーデックを収容できる単なるコンテナです。また、 here はWindows用のZeranoeのFFmpegビルドです。次の操作を行うと、ファイルのコーデックの内容に関する詳細情報を取得できます。

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オーディオコーデックが含まれています。

4
mevatron

欠落しているOpenCVのffmpeg.dllは、OpenCV 2.3.1で警告/エラーを生成せず、コードはサイレントに失敗します。パスに適切なopencv_ffmpeg * .dllがあることを確認してください。

54
nimcap

間違ったlibファイルをロードする可能性があります。私と同じように、同じ問題が発生します。しかし、opencvバージョン1.0を使用するVC6.0でAVIファイルを開くことができます。

デバッグモードでは、opencv_core220.libopencv_highgui220.libを使用します。そして、それらをopencv_core220d.libopencv_highgui220d.libに置き換えます。これで読み込めます。

4
windey1988

OpenCV 2.4.4:opencv_ffmpeg244.dll(リリースdll)のみがあり、opencv_ffmpeg244d.dll(デバッグdll)はありません

だからリリースコンパイルモードで試してみてください!

1
Ismax

私も同じ問題に遭遇します。 VideoCaptureのサンプルコードでは、Visual Studioプログラムでビデオファイルを開くことができませんでした。それから、nimcapの提案は私のために働く。 「OpenCVのffmpeg.dllがなくても、OpenCV 2.3.1で警告/エラーは生成されず、コードはサイレントに失敗します。パスに適切なopencv_ffmpeg * .dllがあることを確認してください。」

解決策:opencv_ffmpeg.dllをVisual Studioプロジェクトにコピーします/Debugフォルダー、VideoCaptureでほぼすべてのビデオファイルを開くことができます。

1
Andrew

これからコードを変更するだけです:

VideoCapture capture("guitarplaying.avi");

これに:

CvCapture *input_video = cvCreateFileCapture("guitarplaying.avi");
0
amhoes

Windows x64では、名前を変更する必要はありません。次の...\opencv\build\x64\vc12\bin[〜#〜] path [〜#〜]に入れるだけです。

0
Tim Long

私が認めたい以上の時間を費やしたので、私はこれに追加しています。ファイルを開くことができないため、大量の奇妙な例外が発生しました。

絶対パスが機能するのに相対パスが機能しないことがわかった場合は、作業ディレクトリが適切に設定されていることを確認する必要があります。

Visual Studioでは、プロジェクトプロパティ(構成プロパティ)->デバッグ->作業ディレクトリです。 「$(OutDir)」が本当に必要なときに、デフォルトで「$(ProjectDir)」に設定されているものを見つけました。

0
Dane Bouchie