取得するための最良の方法は何ですか?
ユーザーが動画をアップロードするフィールドがあります。
アップロードボタンをクリックすると、ビデオがアップロードされます。これは完璧に機能します。
物理的なパスからのビデオの長さが必要でした、私は試しました:
using WMPLib;
WindowsMediaPlayer wmp = new WindowsMediaPlayerClass();
IWMPMedia mediaInfo = wmp.newMedia(Server.MapPath("~/Uploads/test.mp4"));
double duration = mediaInfo.duration;
しかし、それは機能していません、私はエラーを受け取ります:
タイプ「WMPLib.WindowsMediaPlayerClass」にはコンストラクターが定義されていません。相互運用タイプ「WMPLib.WindowsMediaPlayerClass」を埋め込むことはできません。
期間をキャッチする方法は?
この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
私たちは多くの方法でビデオの長さを取得します
方法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は共有ホスティングでは機能しません。専用サーバーに必要です。
DirectShow.Netラッパーライブラリを使用すると、DirectShow API MediaDet
オブジェクトを使用できます。メソッドget_StreamLength
は、ビデオの長さを秒単位で取得するものであり、決定論的アルゴリズムを使用して分/時間に変換できます。このAPIを使用するには、オペレーティングシステムにMPEG-4依存関係がインストールされていることを確認してください。
または、ビデオファイルから情報を取得するための Media Info ライブラリを選択できます。
DirectShow.NETラッパーライブラリを使用した実装を参照してください: ビデオの長さの取得
コードは問題ないように見えますが、メディア情報の 属性 を確認できる場合は次のようになります。
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)) );
}
次のコードスニペットは皆さんを助けるかもしれません:
using WMPLib;
// ...your code here...
var player = new WindowsMediaPlayer();
var clip = player.newMedia(VideoFilePath);
Console.WriteLine(TimeSpan.FromSeconds(clip.duration));
wmp.dll
フォルダーに存在するSystem32
の参照を追加することを忘れないでください。