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

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

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

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



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

Многие, наверно, слышали про 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

Публикации

Истории

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

19 марта – 28 апреля
Экспедиция «Рэйдикс»
Нижний НовгородЕкатеринбургНовосибирскВладивостокИжевскКазаньТюменьУфаИркутскЧелябинскСамараХабаровскКрасноярскОмск
24 апреля
VK Go Meetup 2025
Санкт-ПетербургОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань
14 мая
LinkMeetup
Москва
5 июня
Конференция TechRec AI&HR 2025
МоскваОнлайн
20 – 22 июня
Летняя айти-тусовка Summer Merge
Ульяновская область