Video properties: характеристики видео файла

Автор: admin 21 Sep 2011 Отзывы Ваш отзыв

Перед тем как произвести с видеофрагментом какие нибудь манипуляции, необходимо совершенно очевидно знать некие исходные параметры этого самого видеофрагмента. Это собственно может быть аспект ратио (AR), длительность, контейнер, аудиокодек, видеокодек. Некая простенькая функция, подкатом, поможет определить эти самые параметры.

Функция оформлена как метод класса, парой движений преобразуется в автономную функцию:

public function getMovieProperties($containers) {

//используя утилиту mplayer получаем ее вывод при проигрывании видеофайла ($this->sourceMoviePath)
exec(MPLAYER . ” -vo null -ao null -frames 0 -identify ‘” . $this->sourceMoviePath . “‘”, $res);
foreach ($res as $v) {
$v = strtolower($v);

//определяется FPS (frame per second)
if (strstr($v, ‘id_video_fps=’)) {
$this->movieProperties->fps = ceil(str_replace(”id_video_fps=”, “”, $v));
}

//определяется ширина видеофайла
if (strstr($v, ‘id_video_width=’)) {
$this->movieProperties->width = str_replace(”id_video_width=”, “”, $v);
}

//определяется высота видеофайла
if (strstr($v, ‘id_video_height=’)) {
$this->movieProperties->height = str_replace(”id_video_height=”, “”, $v);
}

//определяется длительность (second) видеофайла
if (strstr($v, ‘id_length=’)) {
$this->movieProperties->duration = ceil(str_replace(”id_length=”, “”, $v));
}

//определяется видеокодек
if (strstr($v, ‘id_video_codec=’)) {
$this->movieProperties->codec = str_replace(”id_video_codec=”, “”, $v);
}

//определяется контейнер видеофайла - из предложенного массива подходящих контейнеров, передаваемого методу как аргумент
if (strstr($v, ‘file format detected.’)) {
foreach ($containers as $format) {
if (strstr(str_replace(” file format detected.”, “”, $v), $format) && !$this->movieProperties->type) {
$this->movieProperties->type = $format;
}
}
}
if (!$this->movieProperties->type && strstr($v, ‘id_video_format=’)) {
foreach ($containers as $format) {
if (strstr(str_replace(”id_video_format=”, “”, $v), $format) && !$this->movieProperties->type) {
$this->movieProperties->type = $format;
}
}
}
if (!$this->movieProperties->type) {
$this->movieProperties->type = substr($this->movie->ext, 1);
}
}

//определяется размер видеофайла
$this->movieProperties->size = filesize($this->sourceMoviePath);
}

Как видно из кода, достаточно посмотреть вывод в $res и можно включить в функцию что то еще:

exec(MPLAYER . ” -vo null -ao null -frames 0 -identify ‘” . $this->sourceMoviePath . “‘”, $res);

Небольшая ремарка - используется и рекомендуется к использованию именно mplayer, поскольку он показывает большую всеядность чем, скажем, ffmpeg. Ну и также стоит добавить, что метод не претендует на истину в последней инстанции, поскольку различных типов и видов видеофайлов просто огромное количество и многие параметры имеют отличный от других вывод, соответственно возможны ошибки.

Рубрика: Programming

Теги: , , , , , , , ,

Ссылка на заметку:

Отзывов нет

Комментариев пока нет.

Оставьте свой отзыв

Имя Сообщение
E-mail (обязательно)
Введите 4 + 1 =