web-dev-qa-db-fra.com

Obtenir la durée de la vidéo après le téléchargement

Quel est le meilleur moyen d'obtenir?

J'ai un champ où l'utilisateur va télécharger la vidéo.

Lorsque vous cliquez sur le bouton de téléchargement, la vidéo est téléchargée. Cela fonctionne parfaitement.

J'avais besoin de la durée de la vidéo depuis le chemin physique, j'ai essayé:

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

Mais sa ne fonctionne pas, je reçois une erreur: 

Le type 'WMPLib.WindowsMediaPlayerClass' n'a pas de constructeur défini. Le type d'interopérabilité 'WMPLib.WindowsMediaPlayerClass' ne peut pas être incorporé.

Comment attraper la durée?

15
user6448640

Vous pouvez utiliser ce paquet de nuget: 

Install-Package Xabe.FFMpeg

J'essaie de créer un wrapper FFmpeg multi-plateforme facile à utiliser. 

Vous trouverez plus d'informations à ce sujet sur Xabe.FFmpeg

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

Plus d'informations sur l'obtention de la durée du fichier vidéo à l'adresse suivante: https://xabe.net/product/xabe_ffmpeg/#documentation

10
Tomasz Żmuda

Nous obtenons la vidéo Les durées à bien des égards sont 

Méthode 1: API Shell 32

Méthode 2: WMPLib (bibliothèque Windows Media Player)

Méthode 3: wrapper FFMpeg 

vérifier les liens ci-dessous

Méthode 1 et méthode 2 Lien Obtenir-la-longueur-d'une-vidéo-en-c #

Méthode 3 sur 3: Lien de référence Durée du fichier vidéo dans ffmpeg

Dans cette méthode utilisée pour obtenir les propriétés vidéo et la durée de toutes ces trois, j'ai été vérifiée précédemment.Il fonctionne correctement certaines attributions personnalisées dans les propriétés du fichier ne sont pas affichées dans les deux premières méthodes.

la méthode 3 ne fonctionne pas dans l'hébergement partagé. il est requis pour le serveur dédié.

2
umasankar

Avec la bibliothèque de wrapper DirectShow.Net, vous pouvez utiliser l'objet MediaDet de l'API DirectShow. La méthode get_StreamLength est celle qui obtient la longueur de la vidéo en secondes, qui peut être convertie en minutes/h en utilisant un algorithme déterministe. Pour utiliser cette API, assurez-vous que la dépendance MPEG-4 a été installée sur votre système d'exploitation.

ou vous pouvez opter pour Media Info library pour obtenir des informations à partir d'un fichier vidéo.

Voir une implémentation à l'aide de la bibliothèque de wrapper DirectShow.NET: Obtenir la longueur de la vidéo

2
Danyal Imran

Votre code a l’air bien mais si vous pouvez vérifier les attributs du média, comme:

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
user5377037

L'extrait de code suivant peut vous aider:

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

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

et n'oubliez pas d'ajouter la référence dewmp.dllqui sera présente dansSystem32dossier.

0
Rish