Как стать автором
Обновить

Получение скриншотов и информации с видео

Время на прочтение2 мин
Количество просмотров5.1K
В этой заметке я рассказываю, как сделать скриншот с видео, а так же о том, как получить информацию о видео файле.

Конечно, многие уже знают, как сделать скриншот с видео. Но у кого то, как говорится, руки не доходят. Вот для таких людей я и написал эту небольшую заметку. Надеюсь, она будет полезна.



Итак, приступаю:

Многие, наверно, слышали про ffmpeg — набор библиотек для работы с видео. Но, оказывается, такую банальную вещь, как вытаскивание скриншота из видеофайла эта штука делает очень медленно! Чем дальше от начала фильма нужно сделать скриншот, тем больше времени придется ждать, так как ffmpeg сначала «прокручивает» видео до нужной отметки. Получить скриншот ffmpeg’ом можно так:

ffmpeg -i /home/username/movie.avi -an -ss 00:20:14 -r 1 -vframes 24 -s 320×240 -y -f mjpeg /home/username/screenshot-pct.jpg


Но это медленно, поэтому я не рекомендую этого делать. Естественно, такая медленная работа никого не устраивает (зачем вообще разработчики сделали эту возможность в ffmpeg?).
К счастью, есть альтернатива — это Mplayer. Он бывает как с графической оболочкой, так и без (смотря как его собрать) и делают его те же товарищи, которые делают ffmpeg. Нам графическая оболочка не нужна нафиг, мы же не собираемся смотреть фильмы! Так что смело собирай Mplayer без GUI.
Используем:

mplayer /home/username/movie.avi -ss 00:20:14 -frames 24 -vo jpeg:outdir=/home/username


Эта комманда означает: «Сделай мне 24 скриншота с 20-й минуты и 14-й секунды фильма /home/username/movie.avi и положи их в директорию /home/username».

Почему именно 24 скриншота. Дело в том, что обычно фильм содержит в себе от ~24 до ~31 кадра, поэтому я беру 24 кадра. Больше, я думаю, вряд ли нужно. Понятно, что в течении секунды сцена может сильно меняться (особенно, когда взрывается вертолёт =) ), именно поэтому мы делаем 24 кадра и даем возможность потом выбрать из этих кадров наиболее красивый кадр.
Теперь о том, как получить информацию из видео.
Лично я использую для получения мета-информации о видео-файле тот же Mplayer:

mplayer -identify /home/username/movie.avi -ao null -vo null -frames 0 2>/dev/null | grep ^ID_


Или, можно так (php, без grep):

<?
/**
* Получение мета-информации о видео-файле.
* Использует mplayer.
*/
class VideoInfoComponent {
public $mplayer = '/usr/local/bin/mplayer';
/**
* Получить мета-информацию о видео-файле
*
* @param string $filename Путь к файлу
* @return array мета-информация
*/
public function info($filename) {
$result = array();
$params = array();
exec("{$this->mplayer} -vo null -ao null -frames 0 -identify '{$filename}'", $result);
foreach ($result as $i=>$value) {
if (!preg_match('/^ID_/', $value)) unset($result[$i]);
else {
list ($param, $data) = explode('=', $value);
$params[ $param ] = strtolower($data);
}
}
$params['ID_SIZE'] = filesize($filename);
return $params;
}
}
?>
Теги:
Хабы:
Всего голосов 9: ↑9 и ↓0+9
Комментарии7

Публикации

Истории

Ближайшие события

One day offer от ВСК
Дата16 – 17 мая
Время09:00 – 18:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн
Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург
Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область