从命令行获取视频文件的时长?

从命令行获取视频文件的时长?

在 Windows 中,有没有办法从命令行获取 AVI 文件的持续时间(例如以秒为单位)?

我很乐意使用第三方工具- 越常见越好。

答案1

媒体信息是提取此类信息的绝佳工具,有 GUI 和 CLI 版本。这里是其基本命令行选项的摘要,您可能只想传递文件名或包含开关-f以获取更多详细信息。

答案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);

您还需要分割时间并将小时/分钟乘以几倍才能获得秒数,但这很简单

相关内容