動画のインポート

バージョン情報

Minimum Origin Version Required: Origin 93 SR0

Origin Cは、ビデオファイルの読み取りと動画のフレームの行列へのインポートのためにVideoReaderクラスを提供しています。

このVideoReader クラスを使用するために、ヘッダファイル"VideoReader.h" をソースコードにインクルードする必要があります。

#include <..\OriginLab\VideoReader.h>

VideoReaderクラスで、動画ファイルを開き、フレーム数、フレーム率(フレーム/秒)、現在の位置などのプロパティを取得できます。また、検索フレーム、検索時間、行列オブジェクトへの読み込みフレームのためのメソッドを提供しています。

次のサンプルでは、新しい行列ブックを作成し、動画内の10フレームを探します。そして、他のフレームをスキップすることにより、100フレームを行列オブジェクトとして、アクティブ行列シートにロードします。

#include <..\Originlab\VideoReader.h>  // ヘッダファイルをインクルード
void Import_Video_Ex1(string strFile = "d:\test.avi") {
        MatrixLayer ml; 
        ml.Create("Origin");  // フレームのための行列シートを作成
        char str[MAXLINE];
        VideoReader vr;  // VideoReaderを宣言
        strcpy(str, strFile);
        if(!vr.Open(str)) {  // 動画ファイルを開く
                out_str("Failed to open video file!");
                return;
        }
        // フレーム数取得
        int iFrameCount = (int)vr.GetFrameCount();
        printf("%u frames\n",iFrameCount);
        // 開始フレーム
        int iOffset = 10;
        // 読み込むフレームの合計を指定
        int iTotalFrames = 100;
        // 各読み込み間でスキップするフレームを指定
        int iSkip = 1; // 全ての他のフレームを読み込む
        bool bRet = vr.SeekFrame(iOffset);
        vr.ReadFrames(ml, iTotalFrames, iSkip);  // フレームを読み込む
        if(vr.ReaderReady()) {  
                vr.Close();  // ビデオリーダを閉じる
        }
}

このサンプルでは、時間が測定基準として使用されています。

#include <..\Originlab\VideoReader.h>  // ヘッダファイルをインクルード
void Import_Video_Ex2(string strFile = "d:\test.avi") {
        MatrixLayer ml; 
        ml.Create("Origin");  // フレームのための行列シートを作成
        char str[MAXLINE];
        VideoReader vr;  // VideoReaderを宣言
        strcpy(str, strFile);
        if(!vr.Open(str)) {  // 動画ファイルを開く
                out_str("Failed to open video file!");
                return;
        }
        // フレーム数を取得
        int iFrameCount = (int)vr.GetFrameCount();
        // フレーム率を取得
        double dFPS = vr.GetFPS();
        double dRunningTime = iFrameCount / dFPS;
        printf("%u frames at %f fps with a running time of %f seconds\n",
                iFrameCount, dFPS, dRunningTime);
 
        // 読み込みのためのセットアップ
        double dStartTime = 5; // 5秒で読み込み開始
        double dSkipLength = 3.333; // 読み込みの間で3.333秒スキップ
        vr.SeekFrame((int) dStartTime * dFPS); // フレーム開始を計算
        int iSkip = (int) dSkipLength * dFPS; // スキップするフレーム数を計算
        // 実際に読み込むフレームの数を計算
        int iTotalFrames = (int) ( (dRunningTime - dStartTime) * dFPS)
        / (iSkip + 1);
        vr.ReadFrames(ml, iTotalFrames, iSkip);  // フレームを読み込み
        if(vr.ReaderReady()) {  
                vr.Close();  // ビデオリーダを閉じる
        }
}