С нами с 07.06.08
Сообщения: 778
Рейтинг: 395
|
Добавлено: 14/02/12 в 17:24 |
День добрый. Есть несколько сотен роликов в формате wmv и flv. В принципе при наведении на файл wmv сразу показывается его дляна в секундах. Но есть ли возможность как-то узнать и экспортировать для дампа длину всех роликов сразу?
|
|
|
|
red apple
С нами с 23.06.09
Сообщения: 2216
Рейтинг: 2999
|
Добавлено: 15/02/12 в 12:42 |
|
|
|
|
С нами с 07.06.08
Сообщения: 778
Рейтинг: 395
|
Добавлено: 15/02/12 в 12:57 |
Прикольно. Разработчика софта знаю оооочень давно лично, и говорил с ним на эту тему. Он мне сказал, что с несколькими клипами это не пройдет. Но все равно спасибо. +4
Жду еще вариантов.
Кстати, думал на TotalComander, там много чего можно полезного делать, но массовый экспорт длительности мувиков не нашел
|
|
|
|
С нами с 21.06.05
Сообщения: 1788
Рейтинг: 1579
|
Добавлено: 15/02/12 в 13:08 |
Если под линуксом, то примерно так.
Код: | exiftool *.flv | grep 'Duration\|File Name' |
Вывод для каждого файла
Код: | File Name : video.flv
Duration : 27.12 s
|
Ну и чуть форматируешь в конкретный нужный вид, если нужно.
|
|
|
|
С нами с 07.06.08
Сообщения: 778
Рейтинг: 395
|
Добавлено: 15/02/12 в 18:02 |
samedi писал: | Если под линуксом, то примерно так.
Код: | exiftool *.flv | grep 'Duration\|File Name' |
Вывод для каждого файла
Код: | File Name : video.flv
Duration : 27.12 s
|
Ну и чуть форматируешь в конкретный нужный вид, если нужно. |
Спасибо большое) +4
А не мог ты это оформить в скриптик PHP? А то я че-то с линуксом вчера поссорился Или как-то под винду это дело заюзать
|
|
|
|
С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538
|
Добавлено: 15/02/12 в 19:07 |
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 |
Время в секундах.
|
|
|
|
С нами с 07.06.08
Сообщения: 778
Рейтинг: 395
|
Добавлено: 16/02/12 в 05:19 |
Красотища)))) Спасибо огромное! Мог бы, дал бы +100))) Правда у некоторых файлов почему-то расхождение есть в 2 секунды...хотя в основном все точно
|
|
|
|
С нами с 17.01.06
Сообщения: 146
Рейтинг: 197
|
Добавлено: 20/02/12 в 12:59 |
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;
}
?> |
|
|
|
|