Sous Windows, existe-t-il un moyen d'obtenir la durée (par exemple en secondes) d'un fichier AVI à partir de la ligne de commande ?
Je suis d'accord pour utiliser 3 rd des outils collectifs - plus ils sont courants, mieux c'est.
Sous Windows, existe-t-il un moyen d'obtenir la durée (par exemple en secondes) d'un fichier AVI à partir de la ligne de commande ?
Je suis d'accord pour utiliser 3 rd des outils collectifs - plus ils sont courants, mieux c'est.
MediaInfo est un excellent outil pour extraire de telles informations. Il existe une version GUI et une version CLI. Ici est un résumé de ses options de base en ligne de commande, vous voudrez probablement lui passer uniquement le nom du fichier ou inclure un élément de type -f
pour plus de détails.
Vous pouvez utiliser le script PowerShell suivant
$path = $Args[0]
$shell = New-Object -COMObject Shell.Application
$folder = Split-Path $path
$file = Split-Path $path -Leaf
$shellfolder = $shell.Namespace($folder)
$shellfile = $shellfolder.ParseName($file)
$shellfolder.GetDetailsOf($shellfile, 27);
Enregistrez-le en tant que fichier *.ps1, par exemple duration.ps1
. Appelez-le comme duration.ps1 path\to\video\file
Cela donnera du temps à hh:mm:ss
forme. Si vous voulez qu'il s'agisse de secondes, changez la dernière ligne en [timespan]::Parse($shellfolder.GetDetailsOf($shellfile, 27)).TotalSeconds
Cela fonctionne pour tous les types qui ont une durée que Windows peut lire. Je l'ai réalisé à partir des sources suivantes
Bien sûr, comme il utilise Shell.Application, vous pouvez utiliser n'importe quel langage WScript pour atteindre le même objectif. Par exemple, voici une version hybride bat-jscript, il suffit de l'enregistrer comme un fichier *.bat normal et de lui passer le chemin du fichier vidéo :
@if (@CodeSection == @Batch) @then
@echo off
cscript //e:jscript //nologo "%~f0" %1
exit /b
@end
// JScript Section
var filepath = WScript.Arguments.Item(0);
var slash = filepath.lastIndexOf('\\');
var folder = filepath.substring(0, slash);
var file = filepath.substring(slash + 1);
var shell = new ActiveXObject("Shell.Application");
var shellFolder = shell.NameSpace(folder);
shellfile = shellFolder.ParseName(file);
var duration = shellFolder.GetDetailsOf(shellfile, 27);
WScript.Echo(duration);
Vous devrez également diviser le temps et multiplier les heures/minutes pour obtenir les secondes, mais c'est trivial.
SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.