web-dev-qa-db-ja.com

コマンドラインからビデオファイルの長さを取得しますか?

Windowsでは、コマンドラインからAVIファイルの長さ(秒単位など)を取得する方法はありますか?

3を使っても大丈夫ですrd パーティーツール-一般的であればあるほど良い。

7

MediaInfo はそのような情報を抽出するための優れたツールであり、GUIバージョンとCLIバージョンの両方があります。 ここ は、基本的なコマンドラインオプションの概要です。ファイル名だけを渡すか、詳細については-fスイッチを含めることをお勧めします。

8
gronostaj

次の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);
_

また、秒を取得するには、時間を分割し、時間/分を倍数にする必要がありますが、それは簡単です

2
phuclv