Слайдер кадров из клипов с Youtube на PHP

В данной статье мы рассмотрим скрипт для получения кадров из клипа с Youtube. Данный скрипт может пригодится для пользователей кто предпочитают просматривать несколько кадров из клипа прежде чем посмотреть весь видео. Если на вашем сайте есть список некоторых видео вы можете предоставить пользователям сайта возможность не теряя трафик просмотреть быстро кадры из клипа не заходя в него.

Чтобы осуществить данный скрипт мне не пришлось изучать огромный API Youtube, достаточно просто дать запрос в youtube и он сам предоставит 4 кадра из клипа. Полученные от Youtube кадры были отправлены в PHP скрипт для создания из них GIF-изображения.

В статье я так же дам ссылку на демо версию сайта вместе с скриптами. Можно, конечно, подключить и сохранения созданной GIF и не запрашивать заново кадры от youtube, но на самом деле вес этих картинок не так уж и велик.

Посмотрим файл youtube_screen.php который содержит главные функции данного скрипта.

function get_video_key($url) {
    /*
     * Получаем уникальный код клипа с Youtube
     */
    $Query = parse_url($url, PHP_URL_QUERY);
    if($Query) {
        $Rows = explode('&', $Query);
        foreach($Rows as $part) {
            $Arguments = explode('=', $part);
            if($Arguments[0] == 'v') {
                return $Arguments[1];
            }
        }
    }
    return False;
}
function view_video_preview($url, $mod='default') {
    /*
     * Возвращаем ссылку на скрин
     * $mod = [default, 0, 1, 2, 3]
     * где $mod = 0 большой скрин
     */
    $video_key = get_video_key($url);
    return "http://img.youtube.com/vi/{$video_key}/{$mod}.jpg";
}
function show_video_image($url) {
    /*
     * Вывод изображения с возможностью листалки кадров если навести курсор на нее
     */
    return "<img src="".view_video_preview($url)."" onmouseover="\"this.src='gif.php?key=".get_video_key($url)."'\"" onmouseout="\"this.src='".view_video_preview($url)."'\"" >";
}


Для получения простой картинки из клипа достаточно вызвать функцию view_video_preview() предоставив ей ссылку на клип и нужный вам кадр (от 0 до 3).

echo view_video_preview('http://www.youtube.com/watch?v=QNJL6nfu__Q', 'default');
echo view_video_preview('http://www.youtube.com/watch?v=QNJL6nfu__Q', 0); // Кадр по умолчанию который мыв обычно видим на Youtube
echo view_video_preview('http://www.youtube.com/watch?v=QNJL6nfu__Q', 1); // Случайный кадр
echo view_video_preview('http://www.youtube.com/watch?v=QNJL6nfu__Q', 2); // Случайный кадр
echo view_video_preview('http://www.youtube.com/watch?v=QNJL6nfu__Q', 3); // Случайный кадр


В результат мы получим ссылки на эти кадры которых можно вставить в src изображения. Для меня это не было достаточно, я хотел объединить кадры в одну GIF анимацию и при наведении на статическую JPG картинку запустить GIF.

Данное действие делает функция show_video_image() которое сразу и выводит изображение. Как можно заметить в скрипте, функция вызывает скрипт gif.php и передает через GET уникальный ключ клипа.

Файл gif.php

header ('Content-type:image/gif');
include('GIFEncoder.class.php');
// Код видео на Youtube
$VideoKey = addslashes($_GET['key']);
if($VideoKey) {
    
    /*
     * Youtube предостовляет по 3 скрина на каждое видео
     * собираем в небольшой цикл все скрины для создания GIF
     */
    for($screen=1; $screen<=3; $screen++) {
        // Открываем содержимое скрина с Youtube
        $image = imagecreatefromjpeg("http://img.youtube.com/vi/{$VideoKey}/{$screen}.jpg");
        ob_start();
        imagegif($image);
        $frames[]=ob_get_contents();
        $framed[]=70; // Задержка между кадрами
        ob_end_clean();
    }
    // Generate the animated gif and output to screen.
    $gif = new GIFEncoder($frames, $framed, 0, 2, 0, 0, 0, 'bin');
    echo $gif->GetAnimation();
}


Для создания GIF из JPEG изображении я воспользовался публичным классом GIFEncoder.class.php которого нашел на просторах интернета. Ниже вас ждет ссылки на скачивание и демо версия скрипта.



Просмотров: 1751
13.02.2015, 23:09 -

Категория: Статьи » Программирование » PHP