在 Windows 中,有没有办法从命令行获取 AVI 文件的持续时间(例如以秒为单位)?
我很乐意使用第三方工具- 越常见越好。
答案1
答案2
您可以使用以下 PowerShell 脚本
$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);
将其保存为 *.ps1 文件,例如duration.ps1
。将其命名为duration.ps1 path\to\video\file
它会以格式给出时间hh:mm:ss
。如果你想以秒为单位,那么将最后一行改为[timespan]::Parse($shellfolder.GetDetailsOf($shellfile, 27)).TotalSeconds
这适用于 Windows 可以读取的任何具有持续时间的类型。我根据以下来源制作了它
当然,因为它使用了 Shell.Application,所以您可以使用任何 WScript 语言来实现相同的目的。例如,这是一个混合 bat-jscript 版本,只需将其保存为普通的 *.bat 文件并将视频文件路径传递给它:
@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);
您还需要分割时间并将小时/分钟乘以几倍才能获得秒数,但这很简单