LINUX.ORG.RU

длительность видеофайла в секундах получается путём

mplayer -vo null -ao null -frames 0 -identify путь_к_видеофайлу 2>/dev/null | grep ID_LENGTH  | awk -F'=' '{print $2}'

Ну а дальше, соответственно, скриптик с использованием find.

piyavking ★★★★★
()
Последнее исправление: piyavking (всего исправлений: 3)
Ответ на: комментарий от piyavking
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.

anonymous
()
Ответ на: комментарий от ymn

спасибо вам и всем участвующим

вот, например у меня 1 видео - 32 мин 29 сек > задаю вашу команду > 5620544 > ничего не понимаю, это что за число?

brothermechanic ★★★★★
() автор топика

пришла мысль - вычислять примерную длительность из мегабайтов, видео у меня одинакового формата, 1 сек моего видео = 2,72 мб

Все составило ~6.8 часов.

Если ymn ответит - смогу это проверить

brothermechanic ★★★★★
() автор топика
Ответ на: спасибо вам и всем участвующим от brothermechanic
find . -name '*.mp4' -type f -exec mediainfo --Inform="General;%Duration%" {} \; | awk '{s+=$1} END {print s}'

Давай разбирать по частям:

find . -name '*.mp4' -type f

Здесь мы ищем все файлы (-type f) с именами, заканчивающимися на mp4 (-name '*.mp4') в текущем каталоге (.).

-exec mediainfo --Inform="General;%Duration%" {} \;

Здесь для каждого найденного файла вызываем команду mediainfo, от которой хотим получить длительность каждого файла в микросекундах. На этом этапе работы сформируется «массив» длительностей, которые мы хотим сложить вместе (awk '{s+=$1} END {print s}'), чтобы получить суммарную длительность.

Таким образом после выполнения этого скрипта ты получишь суммарную длительность в микросекундах всех файлов в формате mp4 в текущем каталоге.

ymn ★★★★★
()
Ответ на: комментарий от ymn

Спасибо. Дай вам Бог здоровья. Все теперь понятно - буду применять

brothermechanic ★★★★★
() автор топика
Ответ на: комментарий от ymn

получилось ~5 часов

>>> 17540480/60000
292.34133333333335
>>> 292.3/60
4.871666666666667
сильно отличается от моего предидущего расчета

brothermechanic ★★★★★
() автор топика
Ответ на: комментарий от ymn

у меня их на 60 гигов))) да и не надо тратить время,

буду считать исходя из размера 2,72 мб/сек

brothermechanic ★★★★★
() автор топика
11 августа 2014 г.

Полезная тема.

Спасибо.

iLoveoOz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.