PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Comment trouver la longueur d'une vidéo
Comment trouver la longueur d'une vidéo
Débuté par Vital Gaudreault, 24 mar. 2017 13:03 - 7 réponses
Posté le 24 mars 2017 - 13:03
J'ai besoin de pouvoir connaître la longueur d'une vidéo à partir d'un API windows. Est-ce que quelqu'un connaît la solution?
Membre enregistré
19 messages
Posté le 24 mars 2017 - 15:07
Bonjour,

Voir la DLL MediaInfo
Posté le 25 mars 2017 - 08:19
PROCEDURE tpVideoUpdateInfo(sFileIn chaîne UNICODE)

nDurée est un entier
MCIOuvre(sFileIn, "sVideoAlias")
SI PAS ErreurDétectée
nDurée = MCITaille("sVideoAlias")
MCIFerme("sVideoAlias")
FIN
RENVOYER nDurée
Membre enregistré
962 messages
Popularité : +183 (185 votes)
Posté le 25 mars 2017 - 12:33
hello,
la dll MediaInfo est disponible ici : https://mediaarea.net/fr/MediaInfo
Voici un code utilisant les descriptions d' API pour gérer la dll mediaInfo.dll et VérifieExpressionRégulière pour extraire une info particulière du résultat :
// J.P Mars 2017 - Utilisation de la Dll MediaInfo.dll pour lire les infos d'un fichier multimédia
// On initialise la dll mediaInfo
InitMediaInfo est une Description d'API
InitMediaInfo..NomDLL = "mediainfo.DLL"
InitMediaInfo..NomFonction = "MediaInfoA_New"
InitMediaInfo..TypeRetour = apiEntierSystème
handleMI est un entier système = InitMediaInfo()
SI handleMI = 0 ALORS
Erreur("Impossible de trouver la dll mediainfo.dll")
RETOUR
FIN

// on ouvre le fichier multimédia pour lecture
OuvrirMedia est une Description d'API
OuvrirMedia..NomDLL = "mediainfo.DLL"
OuvrirMedia..NomFonction = "MediaInfoA_Open"
OuvrirMedia..Paramètre[1]..Type = apiEntierSystème
OuvrirMedia..Paramètre[2]..Type = apiChaîne
OuvrirMedia..TypeRetour = apiEntierSystème
sFichierVidéo est une chaîne = "F:\temp\clochard.mp4"
Open_result est un entier = OuvrirMedia(handleMI,sFichierVidéo)
SI Open_result = 0 ALORS
Erreur("Impossible de lire le fichier " + sFichierVidéo)
RETOUR
FIN
// on prépare la liste des informations demandées
InfosDemandées est une Description d' API
InfosDemandées..NomDLL = "mediainfo.DLL"
InfosDemandées..NomFonction = "MediaInfoA_Option"
InfosDemandées..Paramètre[1]..Type = apiEntierSystème
InfosDemandées..Paramètre[2]..Type = apiChaîne
InfosDemandées..Paramètre[3]..Type = apiChaîne
InfosDemandées..TypeRetour = apiChaîne
Information est une chaîne = InfosDemandées(0,"Complete","" )
Trace("Information : ",Information)
// lecture des infos demandées
LireInfosMedia est une Description d'API
LireInfosMedia..NomDLL = "mediainfo.DLL"
LireInfosMedia..NomFonction = "MediaInfoA_Inform"
LireInfosMedia..Paramètre[1]..Type = apiEntierSystème
LireInfosMedia..Paramètre[2]..Type = apiEntierSystème
LireInfosMedia..TypeRetour = apiChaîne
Resultat est une chaîne = LireInfosMedia(handleMI,0)
Trace(Resultat)
Propriété est une chaîne = "Duration"
resinfo est une chaîne
// on extrait certaines infos du résultat
SI VérifieExpressionRégulière(Resultat,".*" + Propriété + "[ ]+: ([^" + RC + "]+)" + ".*" +RC,resinfo) ALORS
Trace(Propriété + " : ",resinfo)
FIN
Propriété = "File size"
SI VérifieExpressionRégulière(Resultat,".*" + Propriété + "[ ]+: ([^" + RC + "]+)" + ".*" +RC,resinfo) ALORS
Trace(Propriété + " : ",resinfo)
FIN


et voici le résultat sur un fichier mp4 :
Information :  
General
Complete name                            : F:\temp\clochard.mp4
Format                                   : MPEG-4
Format profile                           : Base Media
Codec ID                                 : isom (isom/iso2/avc1/mp41)
File size                                : 2.07 MiB
Duration                                 : 12s 680ms
Overall bit rate                         : 1 370 Kbps
Encoded date                             : UTC 2013-10-24 01:51:34
Tagged date                              : UTC 2013-10-24 01:51:34
Writing application                      : Lavf55.14.101

Video
ID                                       : 1
Format                                   : AVC
Format/Info                              : Advanced Video Codec
etc...

Duration :  12s 680ms
File size :  2.07 MiB


Les descriptions d'api sont utilisables à partir de Windev 16

--
Ami calmant, J.P
Message modifié, 25 mars 2017 - 12:34
Membre enregistré
962 messages
Popularité : +183 (185 votes)
Posté le 27 mars 2017 - 07:36
hello,
bon d'une part il y a un erreur dans le code de mon message précédent. A la place de
Information est une chaîne = InfosDemandées(0,"Complete","" )


c'est :
Information est une chaîne = InfosDemandées(handleMI,"Complete","" )


et d'autre part on peut aller chercher une seule information à la fois et donc ne pas être obligé d'utiliser un code d'extraction d'informations.

Voici un exemple de procédure qui va chercher une information concernant le média :
Procedure LireInfoMedia(Fichier,Information)
// J.P Mars 2017 - Utilisation de la Dll MediaInfo.dll pour lire les infos d'un fichier multimédia
// On initialise la dll mediaInfo
InitMediaInfo est une Description d'API
InitMediaInfo..NomDLL = "mediainfo.DLL"
InitMediaInfo..NomFonction = "MediaInfoA_New"
InitMediaInfo..TypeRetour = apiEntierSystème
handleMI est un entier système = InitMediaInfo()
SI handleMI = 0 ALORS
Erreur("Impossible de trouver la dll mediainfo.dll")
RENVOYER "ERREUR"
FIN

// on ouvre le fichier multimédia pour lecture
OuvrirMedia est une Description d'API
OuvrirMedia..NomDLL = "mediainfo.DLL"
OuvrirMedia..NomFonction = "MediaInfoA_Open"
OuvrirMedia..Paramètre[1]..Type = apiEntierSystème
OuvrirMedia..Paramètre[2]..Type = apiChaîne
OuvrirMedia..TypeRetour = apiEntierSystème
sFichierVidéo est une chaîne = Fichier
Open_result est un entier = OuvrirMedia(handleMI,sFichierVidéo)
SI Open_result = 0 ALORS
Erreur("Impossible de lire le fichier " + sFichierVidéo)
RENVOYER "ERREUR"
FIN
// on prépare la liste des informations demandées
InfosDemandées est une Description d' API
InfosDemandées..NomDLL = "mediainfo.DLL"
InfosDemandées..NomFonction = "MediaInfoA_Option"
InfosDemandées..Paramètre[1]..Type = apiEntierSystème
InfosDemandées..Paramètre[2]..Type = apiChaîne
InfosDemandées..Paramètre[3]..Type = apiChaîne
InfosDemandées..TypeRetour = apiChaîne
Info est une chaîne =InfosDemandées(handleMI,"Inform", Information )
// lecture des infos demandées
LireInfosMedia est une Description d'API
LireInfosMedia..NomDLL = "mediainfo.DLL"
LireInfosMedia..NomFonction = "MediaInfoA_Inform"
LireInfosMedia..Paramètre[1]..Type = apiEntierSystème
LireInfosMedia..Paramètre[2]..Type = apiEntierSystème
LireInfosMedia..TypeRetour = apiChaîne
Resultat est une chaîne = LireInfosMedia(handleMI,1)
// Fermeture du Handle
FermeInfosMedia est une Description d'API
FermeInfosMedia..NomDLL = "mediainfo.DLL"
FermeInfosMedia..NomFonction = "MediaInfoA_Close"
FermeInfosMedia..Paramètre[1]..Type = apiEntierSystème
FermeInfosMedia(handleMI)
RENVOYER Resultat


un exemple de code d'appel de la procédure :
Trace("Durée du média : ",LireInfoMedia("F:\temp\Clochard.mp4","General;%Duration%"), " ms")
Trace("Format du média : ",LireInfoMedia("F:\temp\Clochard.mp4","General;%Format%"))
Trace("Taille du fichier média : ",LireInfoMedia("F:\temp\Clochard.mp4","General;%FileSize%"), " octets")
Trace("Codec Video du média : ",LireInfoMedia("F:\temp\Clochard.mp4","Video;%Codec%"))
Trace("Résolution du média : ",LireInfoMedia("F:\temp\Clochard.mp4","Video;%Width%x%Height%"))



le résultat :
Durée du média :  12680  ms
Format du média :  MPEG-4
Taille du fichier média  :  2171907  octets
Codec Video du média :  AVC
Résolution du média :  400x224


--
Ami calmant, J.P
Membre enregistré
23 messages
Posté le 28 mars 2018 - 01:11
Ce topic tombe à pic pour moi :)
Merci JP

--
Bon dev
Ju'
Posté le 11 janvier 2019 - 16:59
Bonjour,
J'ai installé la dll et pour l'instant l'exécution de la procédure locale m'indique :

impossible de trouver la dll mediainfo.dll <---- dans quel répertoire elle doit se trouver ?

et en fait je crois que l'erreur est plus (avec erreurinfo) ...

Erreur au chargement de la dll "mediainfo.dll'
Détail de l'erreur système : mediainfo.dll n'est pas une
application win32 valide.

Je suis un peu perdu, que dois je faire?

Merci pour votre aide.
Membre enregistré
962 messages
Popularité : +183 (185 votes)
Posté le 12 janvier 2019 - 09:13
hello,
si tu es sous un Windows 64 bits , il faut télécharger les fichiers DLL sans installeur zip des versions 64 bits et 32 bits de MediaInfo ici :
https://mediaarea.net/fr/MediaInfo/Download/Windows
64 bit DLL v18.12 (without installer: 7z, zip)
32 bit DLL v18.12 (without installer: 7z, zip)
il faut extraire le fichier mediainfo.dll du zip 64 bits et le mettre dans le répertoire c:\windows\system32
il faut extraire le fichier mediainfo.dll du zip 32 bits et le mettre dans le répertoire c:\windows\syswow64
si tu as une application windev 32 bits elle utilisera le mediainfo 32 bits
si tu as une application windev 64 bits elle utilisera le mediainfo 64 bits
j'ai testé cela sous windows 10 64 bits avec une appli WD 32 bits et 64 bits ce qui m'a permis de constater qu'il y avait une erreur pour la version 64 bits de mon code ci-dessus il faut changer la ligne :
Open_result est un entier = OuvrirMedia(handleMI,sFichierVidéo)

et mettre
Open_result est un entier système = OuvrirMedia(handleMI,sFichierVidéo)


--
Ami calmant, J.P