use MP4::Info;
my $arg = $ARGV[0];
opendir(USERDIR, $arg) or die "Cannot open directory : $!\n";
my @dirs = readdir(USERDIR);
my $total_minutes;
my $total_secs;
my $total_msecs;
foreach my $dir (@dirs)
{
next if ($dir eq "..");
next if ($dir eq ".");
opendir(DIR, $arg."/".$dir);
my @files = grep(/\.mp4$/,readdir(DIR));
foreach my $file (@files)
{
$curfile=$arg."/".$dir."/".$file;
my $info = get_mp4info($curfile);
$secs = $info->{SECS};
$total_secs += $secs;
}
}
print $total_secs."\n";
Как вариант. Будет ощутимо быстрее, чем с mediainfo.
Здесь для каждого найденного файла вызываем команду mediainfo, от которой хотим получить длительность каждого файла в микросекундах. На этом этапе работы сформируется «массив» длительностей, которые мы хотим сложить вместе (awk '{s+=$1} END {print s}'), чтобы получить суммарную длительность.
Таким образом после выполнения этого скрипта ты получишь суммарную длительность в микросекундах всех файлов в формате mp4 в текущем каталоге.