- Автор темы
- #1
[СТАТЬЯ] Как сделать скриншот из видеофайла на php?
Автор статьи: defuzz.ru && defuzzcms.ru
План
[Для просмотра ссылки Войдиили Зарегистрируйся][его Для просмотра ссылки Войди или Зарегистрируйся][Для просмотра ссылки Войди или Зарегистрируйся]
Для начала проверим - а вдруг установлен!?
Ищем на странице "ffmpeg" - если находит, то всё отлично.
1.1. Установка под FreeBSD.
1.2. Установка под Linux.
Через менеджер пакетов, если они есть в репозитории.
2. Использование ffmpeg-php.
Полистав Для просмотра ссылки Войдиили Зарегистрируйся отпадают все лишние вопросы по поводу вывода какой-либо ещё дополнительной информации
Демо: Для просмотра ссылки Войди или Зарегистрируйся - вместо 20 подставляем номер любого кадра, который существует в этом ролике, т.е. не превышает его длину.
Автор статьи: defuzz.ru && defuzzcms.ru
План
- установка ffmpeg-php;
- его использование.
[Для просмотра ссылки Войди
Для начала проверим - а вдруг установлен!?
PHP:
<?php
phpinfo();
?>
1.1. Установка под FreeBSD.
Можно переходить ко второму шагу.root@hostman# cd /usr/ports/multimedia/ffmpeg
root@hostman# make install clean
#пошло ставицца
root@hostman# cd /usr/ports/graphics/php4-ffmpeg
root@hostman# make install clean
#пошло ставицца
#все. потом перезапускается апач
root@hostman# apachectl restart
1.2. Установка под Linux.
Через менеджер пакетов, если они есть в репозитории.
2. Использование ffmpeg-php.
Полистав Для просмотра ссылки Войди
PHP:
<?php
//получаем номер кадра для скриншота
$frame = intval($_GET['frame']);
//засекаем unixtime для уникального названия картинки
$time = time();
//заюзаем непосредственно сам экстеншн
$movie = new ffmpeg_movie($_SERVER['DOCUMENT_ROOT'].'/experiments/video/nagitare.wmv');
//получаем длительность ролика в секундах
$duration = $movie->getDuration();
//если он длится больше минуты
if ($duration>60){
//получаем путем округления "вниз" результата от деления длятельности на 60 секунд длительность ролика в минутах
$minutes = floor($movie->getDuration()/60);
//чтобы получить секунды просто смотрим остаток от деления на 60
$seconds = $movie->getDuration()%60;
}
//ну просто вывели сколько он длится
echo 'File: <font color="red">'.$_SERVER['DOCUMENT_ROOT'].'/experiments/video/nagitare.wmv</font> длится '.$duration.' секунд!<br />';
//определили абсолютный путь до картинки, в которую будет сохранен наш скриншот
$img = $_SERVER['DOCUMENT_ROOT'].'/experiments/video/'.$time.'_'.$frame.'.jpg';
//заюзаем другой класс входящий в экстеншн ffmpeg-php. $frame - номер кадра, не забываем
$ff_frame = $movie->getFrame($frame);
//если такой кадр есть
if ($ff_frame) {
//$ff_frame-toGDImege возвращает truecolor GD картинку
$gd_image = $ff_frame->toGDImage();
//и если оно её вернуло
if ($gd_image) {
//создаем png или imagejpeg(); imagegif(); картинки
imagepng($gd_image, $img);
//очищаем буфер
imagedestroy($gd_image);
}
}
//выводим длительность ролика в минутах и секундах
echo $minutes.' мин '.$seconds.' секунд.<br />';
//ну и показываем только что сгенерированный скриншот :-)
echo '<img src="'.$time.'_'.$frame.'.jpg" alt="Скриншот"/>';
?>