[СТАТЬЯ]Как сделать скриншот из видеофайла на php?

Статус
В этой теме нельзя размещать новые ответы.

Slayter

Гуру форума
Регистрация
8 Апр 2006
Сообщения
231
Реакции
55
[СТАТЬЯ] Как сделать скриншот из видеофайла на php?

Автор статьи: defuzz.ru && defuzzcms.ru :)


План
  • установка ffmpeg-php;
  • его использование.
1. Установка ffmpeg-php.
[Для просмотра ссылки Войди или Зарегистрируйся][его Для просмотра ссылки Войди или Зарегистрируйся][Для просмотра ссылки Войди или Зарегистрируйся]
Для начала проверим - а вдруг установлен!?
PHP:
<?php
phpinfo();
?>
Ищем на странице "ffmpeg" - если находит, то всё отлично.

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="Скриншот"/>';
?>
Демо: Для просмотра ссылки Войди или Зарегистрируйся - вместо 20 подставляем номер любого кадра, который существует в этом ролике, т.е. не превышает его длину.
 
Интересная информация, а возможно установить ffmpeg-php на windows под денвер, хочется отработать скрипт клона youtube на локалке, так как мои хостеры не хотят ставить ffmpeg-php на сервак.
 
Честно скажу - ответа не знаю.
BTW, ffmpeg и ffmpeg-php это разные вещи. ffmpeg-php не умеет кодировать видео, т.е. клон ютуба не накодишь - т.к. там требуется перевод из одного формата в другой(в flv для трансляции через flashplayer[Для просмотра ссылки Войди или Зарегистрируйся]). Это может только ffmpeg(ну или любая другая программка). Мы просто юзаем ф-ю пхп exec()[или system()] и исполняем команду, ну и потом работаем с результатами которые отдал ffmpeg.
Естественно, хостер таких экспериментов не допустит. Слишком ресурсоёмки они. Берите vps или дедик. Не так ведь дорого как кажется ;)
 
помогите разобраться, есть ли вариант установки ffmpeg и php_ffmpeg для Windows. Если на Windows у меня стоит и apache и php и mysql - отдельно и работают как web серер
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху