XL 2010 Récupérer la DURÉE d'un fichier AUDIO ou VIDEO

Magic_Doctor

XLDnaute Barbatruc
Bonsoir

Tout est dans le titre.

Après avoir activé la référence "Microsoft Scripting RunTime", on peut récupérer nombre de donnés concernant un fichier (taille, type...), mais peut-on récupérer, quand il s'agit d'un fichier Audio ou Vidéo, la durée ?
Je pense que cela doit être possible puisque quand dans la bibliothèque on "clique-droit" sur ce type de fichier, à Propiétés/Détails on peut voir la durée du fichier. Du reste, on peut la mettre une fois pour toutes dans la configuration de la feuille.
 

Staple1600

XLDnaute Barbatruc
Re

Je n'ai jamais écrit que je lançais le script depuis la fenêtre de script de PWS
Mais que depuis le bloc-notes, j'enregistrais le script en *.ps1
Puis que je double-cliquais sur le *.ps1
(en ayant pris le soin de préciser que le *.ps1 ne devait pas être où sont les mp3/mp4 ;))
 

TooFatBoy

XLDnaute Barbatruc
Je n'ai jamais écrit que je lançais le script depuis la fenêtre de script de PWS
Mais que depuis le bloc-notes, j'enregistrais le script en *.ps1
Puis que je double-cliquais sur le *.ps1
(en ayant pris le soin de préciser que le *.ps1 ne devait pas être où sont les mp3/mp4 ;))
Ca ne change rien au fait que selon comment on lance le ps1, le fichier de rapport ne se crée pas forcément au même endroit que ledit fichier ps1.
 

Magic_Doctor

XLDnaute Barbatruc
Bonjour,

À vrai dire, la discussion entre Marcel32 et Staple1600 est devenue trop technique pour moi. Je n'y comprends du reste rien...
Mais revenons à nos moutons initiaux, dans le post #2, Staple1600 publie une routine trouvée dans un site anglophone :
VB:
Function GetVideoDuration(fPName As String) As Long

    Dim oFolder, ofPName
    
    With CreateObject("Shell.Application")
        Set oFolder = .Namespace(Left(fPName, InStrRev(fPName, "\") - 1))
        Set ofPName = oFolder.ParseName(Right(fPName, Len(fPName) - InStrRev(fPName, "\")))
        GetVideoDuration = oFolder.GetDetailsOf(ofPName, 27)
    End With
End Function
Ce code en fait ne marche pas. Il se trouve que je venais de trouver, toujours dans un site anglophone, quasiment la même routine, à un détail près, qui elle marche bien, sauf (avec ce que j'ai pu tester pour l'instant) le format "mkv". Dans la précipitation le "détail" m'avait échappé et j'ai pensé que c'était exactement la même routine :
VB:
Function GetVideoDuration(fPName As String) As Long
'Returns the duration in seconds of the specified video path+fPNamename
'ashleedawg (http://www.vbaexpress.com/forum/showthread.php?58572-Get-duration-of-mp4-files)

    Dim oFolder, ofPName
    
    With CreateObject("Shell.Application")
        Set oFolder = .Namespace(Left(fPName, InStrRev(fPName, "\") - 1))
        Set ofPName = oFolder.ParseName(Right(fPName, Len(fPName) - InStrRev(fPName, "\")))
        GetVideoDuration = CDbl(TimeValue(oFolder.GetDetailsOf(ofPName, 27))) * 24# * 60# * 60#
    End With
End Function
Pour tester :
Code:
Sub Tiempo()

    Dim TotalSecondes%
    
    TotalSecondes = GetVideoDuration("I:\FILMS\Clara película\Clara.2018.720p.WEBRip.x264-[YTS.AM].mp4")
    
    MsgBox Format(TotalSecondes / 86400, "hh:mm:ss")
End Sub

PS : pour ceux qui ne connaîtraient pas l'astuce. Pour récupérer, facilement sans se prendre la tête, le chemin in extenso d'un dossier ou fichier : dans l'explorateur, juste sélectionner un dossier ou un fichier, puis appuyer sur la touche clavier Majuscule et cliquer avec le bouton DROIT de la souris --> menu avec une nouvelle option qui devrait être (je traduis) "Copier chemin d'accès".
 

TooFatBoy

XLDnaute Barbatruc
À vrai dire, la discussion entre Marcel32 et Staple1600 est devenue trop technique pour moi. Je n'y comprends du reste rien...
Je te réitère toutes mes confuses.
Mais, si ça peut t'aider à te sentir moins seul, j'ai moi aussi découvert plein de choses dans cette conversation. ;)


Quant à tes moutons, je vois que tu cherches toujours une méthode fiable et fonctionnelle pour, en particulier des mkv.
Perso, pour les mkv j'utilise MediaInfo géré avec un fichier .txt depuis un .bat, avec export vers un .txt et ça marche pas mal du tout.
 

Magic_Doctor

XLDnaute Barbatruc
Bonjour Marcel32,

Pourquoi t'excuser ? Après tout cette discussion entre toi et Staple1600 fait partie du fil, et si je n'y comprends pas grand chose, autant pour moi !
En revanche,
Perso, pour les mkv j'utilise MediaInfo géré avec un fichier .txt depuis un .bat, avec export vers un .txt et ça marche pas mal du tout.
mériterait un peu plus d'explications pour les non initiés.
 

TooFatBoy

XLDnaute Barbatruc
MediaInfo est un programme gratuit développé par un Français.
Il permet de récupérer des centaines de données sur les fichiers audios ou vidéos.

Il peut s'intégrer dans l'Explorateur de fichiers de Windows : curseur de la souris sur un fichier => infobulle avec des renseignements sur le fichier A/V (durée, codec audio, nombres de canaux audios, nombre de pistes audio, etc., etc., etc.).

Ces mêmes infos peuvent aussi être lues dans MediaInfo lui-même.

Et toutes ces infos peuvent aussi être récupérées dans un fichier HTML, CSV, TXT, etc. soit depuis l'interface de MediaInfo, soit en pilotant MediaInfo en ligne de commande.


Donc moi je le pilote en ligne de commande, mais au lieu de taper les commandes, je les ai mises dans un fichier .bat.

De plus, vu qu'il y a des centaines de données récupérables, on peut soit indiquer dans la ligne de commande les infos à récupérer, soit indiquer dans un fichier .txt la liste des infos à récupérer.


En suite, dans le .bat il suffit de rediriger la sortie console vers un fichier .txt pour obtenir dans ce fichier .txt la liste des infos récupérées.
Fichier .txt que tu peux ensuite importer dans Excel par exemple. ;)
 

TooFatBoy

XLDnaute Barbatruc
Lien pour MediaInfo : https://mediaarea.net/MediaInfo

L'ami @Staple1600 connaît peut-être des programmes tiers (comme il disait) plus simples à prendre en main et peut-être suffisants suivant ce que tu veux récupérer.
Parce que MediaInfo, peut te dire si tu as une bande son DD+, DD HD ATMOS, DTS-HD MA, si c'est un fichier HDR, le nombre d'images par seconde, le ratio (4/3,16/9, 2.35, etc.), l'espace de couleurs YCbCr 4:2:0; 4:4:4, RGB, les pistes de sous-titres, la durée de chaque piste (audios et vidéos) en ms ou en h:mm:ss, les codecs audios ou vidéos utilisés, etc. et tu n'as peut-être pas besoin de tout ça.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

1) Concernant le script Powershell, il n'y a pas grand chose à comprendre, juste le tester pour voir si le résultat te convient MagicDoctor
(Comme je l'ai dit, tel qu'écrit il permet de traiter l'intégralité d'un dossier dans lequel sont stockés N fichiers médias)

2) Pour le format MKV
Je pense que le noeud du problème est peut-être ici (*)
Le format Matroska est un conteneur vidéo, il peut regrouper au sein d'un même fichier (généralement avec l'extension .mkv) plusieurs flux vidéo, flux audio, ainsi que plusieurs sous-titres et des chapitres.

C'est ce qui explique que le script WSH ne fonctionne pas.

(*): à confirmer/infirmer
 

TooFatBoy

XLDnaute Barbatruc
Sur un forum il y a un fil avec des explications (peut-être pas hyper claires) sur le fonctionnement de MediaInfo tel que le décrivait plus haut.

En 2015 c'était un peu plus clair car il y avait des couleurs dans la mise en forme du texte, mais depuis ils ont modifié leur forum qui n'était déjà pas génial et qui est devenu carrément foireux...
A l'époque j'avais enregistré la page avec le texte mis en couleurs. Je peux chercher demain son mon PC si tu veux @Magic_Doctor ;)


[edit]
Suppression du lien vers le fil de discussion car peu utile à cause du texte ne contenant plus les couleurs.
[/edit]
 
Dernière édition:

Magic_Doctor

XLDnaute Barbatruc
Bonjour `tous,

Merci pour vos réponses.

Si j'ai bien compris, le format "MKV" est très puissant et polyvalent, mais "malheureusement" développé par les Rustovs, d'où sa non considération par les Zuniens, bien qu'étant un type de format très largement diffusé. Pour preuve, quand on fait un clic droit sur un fichier ".mkv", dans Propriétés/Détails la durée n'apparaît pas.
 

TooFatBoy

XLDnaute Barbatruc
Ci-joint un fichier PDF contenant le fil de discussion dont je parlais en #41.
C'est une page HTML sauvegardée de 2015, donc avec le texte en couleur, que j'ai mise en PDF pour plus de simplicité.
 

Pièces jointes

  • Demande-aide-MediaInfo.pdf
    142.2 KB · Affichages: 6

Magic_Doctor

XLDnaute Barbatruc
Merci Marcel32, je vais lire ça à tête reposée.

J'en profite pour glisser un autre moyen (même si ma préférence va au premier que j'avais trouvé sur un site anglophone), mais qui ne résoud pas le problème du format "MKV".
VB:
Function Duree(ByVal Chemin As String, ByVal Fichier As String) As Date
'mercatog (https://www.developpez.net/forums/d1169698/logiciels/microsoft-office/excel/macros-vba-excel/recuperer-duree-d-fichier-video/)
    'Nécessite d'activer la référence "Microsoft Shell Controls and Automation"
        'Dans l'éditeur de macros (Alt+F11):
        'Menu Outils / Références
        'Cochez la ligne "Microsoft Shell Controls and Automation".
        'Cliquez sur le bouton OK pour valider.
    
    Dim Shl As New Shell32.Shell
    Dim Rep As Shell32.Folder
    Dim Fich As Shell32.FolderItem
    
    Set Rep = Shl.Namespace(Chemin)
    Set Fich = Rep.Items.Item(Fichier)
    
    If Rep.GetDetailsOf(Fich, 27) <> "" Then Duree = Rep.GetDetailsOf(Fich, 27)
    
    Set Shl = Nothing
    Set Rep = Nothing
    Set Fich = Nothing
End Function
Pour tester :
VB:
Sub MonTest()

    Dim Chem As String, Fich As String
    
    Chem = "I:\FILMS\Movies Romina"
    Fich = "Interstellar.avi"
    MsgBox "Durée: " & Duree(Chem, Fich)
End Sub
 
Dernière édition:

Discussions similaires