0

私はOpenCVを初めて使用し、ffmpegを使用して単純なビデオを録画しようとしていますが、サイズは毎回0kbです... Cinepakコーデックで成功しましたが、ビデオは高速に録画されるか、fpsを4に設定してcwWaitKey(20)を設定します。私が試しているコードです。

    cvNamedWindow("Webcam", CV_WINDOW_AUTOSIZE);
    CvCapture *cap; cap = cvCreateCameraCapture(0);
    IplImage *img; img = cvQueryFrame(cap);
    CvVideoWriter *writer;
    double fps = cvGetCaptureProperty(cap, CV_CAP_PROP_FPS);
    int camWidth = (int)cvGetCaptureProperty(cap, CV_CAP_PROP_FRAME_WIDTH);
    int camHeight = (int)cvGetCaptureProperty(cap, CV_CAP_PROP_FRAME_HEIGHT);
    CvSize size = cvSize(camWidth, camHeight);
    writer = cvCreateVideoWriter("record.avi", CV_FOURCC('M','J','P','G'), fps, size);

    while(cvQueryFrame(cap))
    {
        img = cvRetrieveFrame(cap);
        cvWriteFrame(writer, img);
        cvShowImage("Webcam", img);
        cvWaitKey(20);
    }

//ここでリリースします。

誰かが私が間違っていることを教えてもらえますか?ありがとうございました。

PS私は他のFOURCCも試しましたが、それでも同じ結果です。ファイルは0キロバイトで、何も書き込まれていません。ヘルプ:( FOURCCが試しました:XVID、MP4V、FVFW、MPEG、MPG1 / 2、WM1/2。

PPS Windows 7 x64を使用して、ffmpegx86バージョンとx64バージョンの両方をインストールしました。

4

2 に答える 2

0

私にとっては久しぶりですが(4年前に大学でそのようなことをしました)、私が覚えているのは、Windowsで利用可能なすべてのコーデックにエンコーダーとデコーダーが含まれているわけではないという事実です。それらのほとんどはデコーダーのみである可能性があります。そのため、一部のFOURCCは機能しますが、他のFOURCCはエラーを生成するか、まったく機能しません。

FFMPEGはいくつかのコーデックを提供しますが、OpenCV内からは利用できないと思います:OpenCVは従来のVideo for Windowsインターフェイスを使用しているのに対し、DirectShowフィルターとして提供されていると思います(ここでは間違っている可能性があるので、遠慮なく修正してくださいこれ)。

発生するタイミングの問題は簡単に説明できます。ビデオのfpsを4に設定する場合は、1秒間に4枚の画像のみを撮影して貼り付ける必要があります。それ以外の場合は、基本的にスローモーションまたはタイムラプスビデオを作成しています。より洗練された方法がありますが、基本的なOpenCV関数を使用すると、これはおそらくすでに最も簡単なソリューションです。

于 2012-12-11T00:21:03.410 に答える
0

修正済み..DIVXコーデックをダウンロードしてインストールし、DIVX fourccを使用したところ、チャームのように機能しました。しかし、フレーム数の計算にはまだ問題があります:-) 10 fpsは100フレームになりますが、25fpsでは失敗します。25*10では機能しません。

于 2012-12-11T10:58:31.920 に答える