Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Как узнать длину роликов
цитата
14/02/12 в 17:24
 SMYK
День добрый. Есть несколько сотен роликов в формате wmv и flv. В принципе при наведении на файл wmv сразу показывается его дляна в секундах. Но есть ли возможность как-то узнать и экспортировать для дампа длину всех роликов сразу?
цитата
15/02/12 в 12:57
 SMYK


Прикольно. icon_smile.gif Разработчика софта знаю оооочень давно лично, и говорил с ним на эту тему. Он мне сказал, что с несколькими клипами это не пройдет. Но все равно спасибо. +4

Жду еще вариантов.
Кстати, думал на TotalComander, там много чего можно полезного делать, но массовый экспорт длительности мувиков не нашел icon_sad.gif
цитата
15/02/12 в 13:08
 samedi
Если под линуксом, то примерно так.
Код:
exiftool *.flv | grep 'Duration\|File Name'

Вывод для каждого файла
Код:
File Name                       : video.flv
Duration                        : 27.12 s

Ну и чуть форматируешь в конкретный нужный вид, если нужно.
цитата
15/02/12 в 18:02
 SMYK
samedi писал:
Если под линуксом, то примерно так.
Код:
exiftool *.flv | grep 'Duration\|File Name'

Вывод для каждого файла
Код:
File Name                       : video.flv
Duration                        : 27.12 s

Ну и чуть форматируешь в конкретный нужный вид, если нужно.



Спасибо большое) +4
А не мог ты это оформить в скриптик PHP? А то я че-то с линуксом вчера поссорился icon_smile.gif Или как-то под винду это дело заюзать
цитата
15/02/12 в 19:07
 Yacc
Windows + Powershell

Код:
function duration( $filename ) {
   $fs = [IO.File]::OpenRead( $filename )
   $fs.Position = $fs.Length – 4;
   $br = New-Object IO.BinaryReader( $fs )
   $h = $br.ReadBytes( 4 )
   $offset = $h[0] * 16777216 + $h[1] * 65536 + $h[2] * 256 + $h[3]
   $fs.Position = $fs.Length – $offset
   $h = $br.ReadBytes( 3 )
   $duration = $h[0] * 65536 + $h[1] * 256 + $h[2]
   $br.Close()
   $fs.Close()
   $fs.Dispose()
   $duration / 1000
}

function foo( $dir ) {
   $f = @{Expression={$_.Name};Label="File"},@{Expression={(duration($_.FullName))};Label="Duration"}
   ls $dir -include '*.flv' -rec | ft $f -AutoSize
}

#Вывести в консоль:

foo 'путь/до/папки/с/flv'

#Экспорт в файл:

foo 'путь/до/папки/с/flv' > 'путь/до/файла.txt'


Получается примерно так:

Код:
File              Duration
----              --------
ilovegfs128.flv    122,648


Время в секундах.

icon_smile.gif
цитата
16/02/12 в 05:19
 SMYK
Красотища)))) Спасибо огромное! Мог бы, дал бы +100))) Правда у некоторых файлов почему-то расхождение есть в 2 секунды...хотя в основном все точно
цитата
20/02/12 в 12:59
 Defolt
PHP+ffmpeg

Две функции. Первая для WMV. Вторая для FLV.
Вывод в виде массива $info.
<?
function get_vid_info_wmv($file)
{
    $command = 'C:\ffmpeg\bin\ffmpeg.exe -i ' . escapeshellarg($file) . ' 2>&1';
    $info = array();
    exec($command,$output,$status);
    $imp=implode('\n',$output);
    //Seems stream 1 codec frame rate differs from container frame rate: 1000.00 (1000/1) -> 30.00 (30/1)
    preg_match('/Seems stream [0-9] codec frame rate differs from container frame rate: 1000.00 \(1000\/1\) -> (?P<framerate>[0-9][0-9])/',$imp,$matches0);
    preg_match('/Stream #(?:[0-9\.]+)(?:.*)\: Video: (?P<videocodec>.*) (?P<width>[0-9]*)x(?P<height>[0-9]*)/',$imp,$matches1);
    preg_match('/Duration\: (?P<duration>[0-9]*\:[0-9]*\:[0-9]*)[\s.][0-9]*[\s,] start\: [0-9]*[\s.][0-9]*[\s,] bitrate\: (?P<bitrate>[0-9]*)/',$imp,$matches2);
    preg_match('/Stream #(?:[0-9\.]+)(?:.*)\: Audio: (?P<audiocodec>[a-z0-9]*)[\s,] (?P<Hz>[0-9]*) [a-zA-Z]{2}[\s,] (?P<channels>[0-9]*) [a-z]*[\s,] [a-z0-9]*[\s,] (?P<audiobitrate>[0-9]*)/',$imp,$matches3);

    $info['framerate'] = $matches0['framerate'];
    $info['videocodec'] = $matches1['videocodec'];
    $info['width'] = $matches1['width'];
    $info['height'] = $matches1['height'];
    $info['duration'] = $matches2['duration'];
    $info['bitrate'] = $matches2['bitrate'];
    $info['audiocodec'] = $matches3['audiocodec'];
    $info['Hz'] = $matches3['Hz'];
    $info['channels'] = $matches3['channels'];
    $info['audiobitrate'] = $matches3['audiobitrate'];

    return $info;
}

function get_vid_info_flv($file)
{
    $command = 'C:\ffmpeg\bin\ffmpeg.exe -i ' . escapeshellarg($file) . ' 2>&1';
    $info = array();
    exec($command,$output,$status);
    $imp=implode('\n',$output);
    preg_match('/Stream #(?:[0-9\.]+)(?:.*)\: Video: (?P<videocodec>.*) (?P<width>[0-9]*)x(?P<height>[0-9]*)/',$imp,$matches1);
    preg_match('/Duration\: (?P<duration>[0-9]*\:[0-9]*\:[0-9]*)[\s.][0-9]*[\s,] start\: [0-9]*[\s.][0-9]*[\s,] bitrate\: (?P<bitrate>[0-9]*)/',$imp,$matches2);
    preg_match('/Stream #(?:[0-9\.]+)(?:.*)\: Audio: [a-z_A-Z]*[\s,] (?P<Hz>[0-9]*) [a-zA-Z]{2}[\s,] (?P<channels>[0-9]*) [a-z]*[\s,] [a-z0-9]*[\s,] (?P<audiobitrate>[0-9]*)/',$imp,$matches3);

    $info['width'] = $matches1['width'];
    $info['height'] = $matches1['height'];
    $info['duration'] = $matches2['duration'];
    $info['bitrate'] = $matches2['bitrate'];
    $info['Hz'] = $matches3['Hz'];
    $info['channels'] = $matches3['channels'];
    $info['audiobitrate'] = $matches3['audiobitrate'];

    return $info;
}

?>


Эта страница в полной версии