web-dev-qa-db-ja.com

.aviファイルのフレームを抽出する

.aviファイルの各フレームを抽出して提供されたディレクトリに保存するc#コードを作成しようとしています。そのような目的に使用するのに適したライブラリを知っていますか?

注:最終リリースは、インストールされているコーデックやシステムアーキテクチャに関係なく、すべてのシステムで機能する必要があります。マシン上に別のプログラム(MATLABなど)が存在する必要はありません。

前もって感謝します。タンク

12
talkanat

入力aviファイルにいくつかの制限を追加するか、それらの作成に使用されるエンコーダーを制御しない限り、これは不可能です。イメージを取得するには、最初にイメージをデコードする必要があります。そのためには、アプリとともにインストールまたはデプロイされた適切なコーデックが必要です。そして、私はそこにあるすべてのコーデックを説明したり、それらすべてをインストール/展開したりすることが可能かどうか疑問に思っています。いいえ、任意のaviファイルを開くことはできません。ただし、最も人気のある(またはコンテキストで一般的な)コーデックをサポートすることはできます。

それを行う最も簡単な方法は、実際にFFMPEGを使用することです。これは、そのalredyに最も一般的なコーデックのいくつかが含まれているためです(アプリに30 + Mbを追加してもかまいません)。ラッパーに関しては、過去に AForge ラッパーを使用しましたが、操作が非常に簡単なため、非常に気に入りました。これはそのドキュメントからの例です:

// create instance of video reader
 VideoFileReader reader = new VideoFileReader( );
// open video file
reader.Open( "test.avi" );
// read 100 video frames out of it
for ( int i = 0; i < 100; i++ )
{
    Bitmap videoFrame = reader.ReadVideoFrame( );

    videoFrame.Save(i + ".bmp")

    // dispose the frame when it is no longer required
    videoFrame.Dispose( );
}
reader.Close( );

外部ライブラリを使用せずにシンプルに保ちたい場合は、AForgeにVfW(デフォルトでWindowsに含まれている)ラッパーもあります。 VfW互換コーデックをインストールする必要があります(それらの一部はデフォルトでWindowsに含まれていますが、ほとんどは含まれていません)。

15
Nikita B

あなたはFFmpegを見ることができます: http://www.ffmpeg.org/

いくつかのC#関連情報: 。netでFFmpegを使用していますか?

または: http://www.ffmpeg-csharp.com/

1
Mark Redman