web-dev-qa-db-ja.com

アップロード後の動画の長さを取得する

取得するための最良の方法は何ですか?

ユーザーが動画をアップロードするフィールドがあります。

アップロードボタンをクリックすると、ビデオがアップロードされます。これは完璧に機能します。

物理的なパスからのビデオの長さが必要でした、私は試しました:

using WMPLib;
WindowsMediaPlayer wmp = new WindowsMediaPlayerClass();
IWMPMedia mediaInfo = wmp.newMedia(Server.MapPath("~/Uploads/test.mp4"));
double duration = mediaInfo.duration;

しかし、それは機能していません、私はエラーを受け取ります:

タイプ「WMPLib.WindowsMediaPlayerClass」にはコンストラクターが定義されていません。相互運用タイプ「WMPLib.WindowsMediaPlayerClass」を埋め込むことはできません。

期間をキャッチする方法は?

15
user6448640

このnugetパッケージを使用できます:

Install-Package Xabe.FFMpeg

使いやすいクロスプラットフォームのFFmpegラッパーを作成しようとしています。

これについての詳細は Xabe.FFmpeg で見つけることができます

IMediaInfo mediaInfo = await MediaInfo.Get("videofile.mkv");
var videoDuration = mediaInfo.VideoStreams.First().Duration;

ビデオファイルの長さの取得に関する詳細情報: https://xabe.net/product/xabe_ffmpeg/#documentation

10
Tomasz Żmuda

私たちは多くの方法でビデオの長さを取得します

方法1:シェル32 API

方法2:WMPLib(Windows Media Playerライブラリ)

方法3:FFMpegラッパー

以下のリンクを確認してください

方法1と方法2のリンク get-the-length-of-a-video-in-c#

方法3参照リンク ffmpegでのビデオファイルの継続時間

ビデオプロパティとduraionを取得するために使用されるこのメソッドでは、これら3つすべてを以前にチェックしました。最初の2つのメソッドには表示されない、ファイルプロパティの一部のカスタム属性は正常に機能しています。

方法3は共有ホスティングでは機能しません。専用サーバーに必要です。

2
umasankar

DirectShow.Netラッパーライブラリを使用すると、DirectShow API MediaDetオブジェクトを使用できます。メソッドget_StreamLengthは、ビデオの長さを秒単位で取得するものであり、決定論的アルゴリズムを使用して分/時間に変換できます。このAPIを使用するには、オペレーティングシステムにMPEG-4依存関係がインストールされていることを確認してください。

または、ビデオファイルから情報を取得するための Media Info ライブラリを選択できます。

DirectShow.NETラッパーライブラリを使用した実装を参照してください: ビデオの長さの取得

2
Danyal Imran

コードは問題ないように見えますが、メディア情報の 属性 を確認できる場合は次のようになります。

using WMPLib; // this file is called Interop.WMPLib.dll
WindowsMediaPlayerClass wmp = new WindowsMediaPlayerClass();
string FilePath = "yourFilePath";
IWMPMedia mediaInfo = wmp.newMedia(FilePath);

// write duration
Console.WriteLine("Duration = " + mediaInfo.duration);

// write named attributes
for (int i=0; i < mediaInfo.attributeCount; i++) 
{
    Console.WriteLine(mediaInfo.getAttributeName(i) + " = " +  mediaInfo.getItemInfo(mediaInfo.getAttributeName(i)) );
}
2
5377037

次のコードスニペットは皆さんを助けるかもしれません:

using WMPLib;
// ...your code here...

var player = new WindowsMediaPlayer();
var clip = player.newMedia(VideoFilePath);
Console.WriteLine(TimeSpan.FromSeconds(clip.duration));

wmp.dllフォルダーに存在するSystem32の参照を追加することを忘れないでください。

0
Rish