Dr.Syshalt
Вот из одного скрипта кусок, просто функция. global $ffmpeg_path - это понятно, что. На вход принимает путь к файлу, что возвращает - надеюсь, прозрачно.
Вторая часть марлезонского балета - для разбора заголовков mp4, там все немного не так, как в flv, надо из стрима брать информацию, а не из самого контейнера.
function get_video_info($file) {
global $ffmpeg_path;
$info = array();
if (is_file($file)) {
ob_start();
passthru("$ffmpeg_path -i $file 2>&1", $res);
$buff = ob_get_contents();
ob_end_clean();
preg_match('/Duration: (.*?),/', $buff, $matches);
$duration = $matches[1];
$duration_array = explode(':', $duration);
$info['duration'] = $duration_array[0] * 3600 + $duration_array[1] * 60 + $duration_array[2];
preg_match('/width\s*:\s*(\d+)/', $buff, $matches);
$info['width'] = $matches[1];
preg_match('/height\s*:\s*(\d+)/', $buff, $matches);
$info['height'] = $matches[1];
if (!defined($info['width']) || !defined($info['height'])) {
// get from stream info
preg_match('/stream.*video.*\s(\d+)x(\d+)/i', $buff,$matches);
$info['width'] = $matches[1];
$info['height'] = $matches[2];
}
}
if ($info['duration']) {
return $info;
}
return NULL;
}