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

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

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

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

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

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

<?php
/*
 * Функции для манипуляции кадрами из клипов c Youtube
 * Автор: Mowshon (http://mowshon.ru)
 */
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

<?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 которого нашел на просторах интернета. Ниже вас ждет ссылки на скачивание и демо версия скрипта.

>> ДЕМО скрипт в работе | Скачать скрипт с примерами

Вопросы к читателям блога

1) Какие скрипты связанные с Youtube хотели бы вы увидеть?

2) Для каких целях вы использовали примеры из данной статьи, для какого проекта они пригодились?

12 марта 2013, 23:25 PHPmowshon46216RSS
Комментариев: 2
  1. Нужен скрипт просто случайного кадра из определённого ролика, чтобы в статью вставить на автомате, ваш скрипт это уже умеет, но мне не нужно слайдшоу, а просто 3-4 случайных кадра из ролика в статье. поможете с этим?

  2. Юрий, вам тоже из Youtube?

    Берем из ссылки ID видео и ютуб выдает нам по 3 скрина.

    http://img.youtube.com/vi/6g6g2mvItp4/1.jpg

    http://img.youtube.com/vi/6g6g2mvItp4/2.jpg

    http://img.youtube.com/vi/6g6g2mvItp4/3.jpg

Оставьте комментарий!

Комментарий будет опубликован после проверки

Имя и сайт используются только при регистрации

(обязательно)