web-dev-qa-db-ja.com

.Netでビデオサムネイルを取得するにはどうすればよいですか?

入力動画から1フレームを取得する機能を実装したいので、サムネイルとして使用できます。

これらの線に沿った何かが機能するはずです:

// filename examples: "test.avi", "test.dvr-ms"
// position is from 0 to 100 percent (0.0 to 1.0)
// returns a bitmap
byte[] GetVideoThumbnail(string filename, float position)
{
}

誰かが.Net3.0でこれを行う方法を知っていますか?

正しい解決策は、この関数の「最良の」実装です。空白フレームの選択を回避するためのボーナスポイント。

26
Sam Saffron

私は自分のスタンドアロンクラスを(私が説明した単一のメソッドで)ロールすることになりました。ソースは ここで表示 になります。 メディアブラウザは GPLですが、そのファイル用に作成したコードがパブリックドメインであることに満足しています。 directshow.net プロジェクトからの相互運用機能を使用するため、コードのその部分をクリアする必要があることに注意してください。

このクラスはDVR-MSファイルでは機能しません。それらにはDirectShowフィルターを挿入する必要があります。

10
Sam Saffron

このプロジェクトは、AVIのトリックを実行します: http://www.codeproject.com/KB/audio-video/avifilewrapper.aspx

他のフォーマットなら、directshowを調べるかもしれません。役立つ可能性のあるプロジェクトがいくつかあります。
http://sourceforge.net/projects/directshownet/
http://code.google.com/p/slimdx/

7
Joel Martinez

1- ffmpeg.exeの最新バージョンを次の場所から入手します: http://ffmpeg.arrozcru.org/builds/

2-ファイルを抽出し、ffmpeg.exeをWebサイトにコピーします

3-このコードを使用します:

Process ffmpeg;

string video;
string thumb;

video = Server.MapPath("first.avi");
thumb = Server.MapPath("frame.jpg");

ffmpeg = new Process();

ffmpeg.StartInfo.Arguments = " -i "+video+" -ss 00:00:07 -vframes 1 -f image2 -vcodec mjpeg "+thumb;
ffmpeg.StartInfo.FileName = Server.MapPath("ffmpeg.exe");
ffmpeg.Start();
4
Ahmad Behjati

www.mitov.com に役立つライブラリがいくつかあります。これはDirectshow機能の一般的なラッパーであり、デモの1つはビデオファイルからフレームを取得する方法を示していると思います。

0
GuyWithDogs
0
Maciej