8 votes

Obtenir la durée d'un fichier vidéo à partir de la ligne de commande ?

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.

10voto

gronostaj Points 50460

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.

3voto

phuclv Points 22397

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.

SistemesEz.com

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.

Powered by:

X