28

Как получить миниатюру видео с YouTube с помощью YouTube API?

19

Описание проблемы:

У меня есть URL видео с YouTube, и я хотел бы узнать, как с помощью PHP и cURL получить связанное с этим видео миниатюрное изображение через YouTube API. Существуют ли какие-либо примеры или рекомендации по этому поводу?

5 ответ(ов)

3

Ответ на вопрос, который вы задали, верный. Однако стоит отметить, что не каждое видео на YouTube содержит все девять миниатюр. Кроме того, размеры изображений миниатюр зависят от самого видео (цифры ниже основаны на одном примере). Существует несколько миниатюр, которые гарантированно будут доступны:

Ширина Высота URL
120 90 https://i.ytimg.com/vi/<VIDEO ID>/1.jpg
120 90 https://i.ytimg.com/vi/<VIDEO ID>/2.jpg
120 90 https://i.ytimg.com/vi/<VIDEO ID>/3.jpg
120 90 https://i.ytimg.com/vi/<VIDEO ID>/default.jpg
320 180 https://i.ytimg.com/vi/<VIDEO ID>/mq1.jpg
320 180 https://i.ytimg.com/vi/<VIDEO ID>/mq2.jpg
320 180 https://i.ytimg.com/vi/<VIDEO ID>/mq3.jpg
320 180 https://i.ytimg.com/vi/<VIDEO ID>/mqdefault.jpg
480 360 https://i.ytimg.com/vi/<VIDEO ID>/0.jpg
480 360 https://i.ytimg.com/vi/<VIDEO ID>/hq1.jpg
480 360 https://i.ytimg.com/vi/<VIDEO ID>/hq2.jpg
480 360 https://i.ytimg.com/vi/<VIDEO ID>/hq3.jpg
480 360 https://i.ytimg.com/vi/<VIDEO ID>/hqdefault.jpg

Кроме того, некоторые другие миниатюры могут существовать, а могут и не существовать. Их наличие, вероятно, зависит от того, является ли видео высокого качества.

Ширина Высота URL
640 480 https://i.ytimg.com/vi/<VIDEO ID>/sd1.jpg
640 480 https://i.ytimg.com/vi/<VIDEO ID>/sd2.jpg
640 480 https://i.ytimg.com/vi/<VIDEO ID>/sd3.jpg
640 480 https://i.ytimg.com/vi/<VIDEO ID>/sddefault.jpg
1280 720 https://i.ytimg.com/vi/<VIDEO ID>/hq720.jpg
1920 1080 https://i.ytimg.com/vi/<VIDEO ID>/maxresdefault.jpg
0

В API YouTube V3 также можно использовать следующие URL-адреса для получения миниатюр видео, классифицированных по качеству:

https://i1.ytimg.com/vi/<вставьте-id-видео-сюда>/default.jpg - стандартное
https://i1.ytimg.com/vi/<вставьте-id-видео-сюда>/mqdefault.jpg - среднее
https://i1.ytimg.com/vi/<вставьте-id-видео-сюда>/hqdefault.jpg - высокое
https://i1.ytimg.com/vi/<вставьте-id-видео-сюда>/sddefault.jpg - стандартное качество

Для максимального разрешения можно использовать следующий URL:

https://i1.ytimg.com/vi/<вставьте-id-видео-сюда>/maxresdefault.jpg

Одно из преимуществ этих URL по сравнению с адресами из первого ответа заключается в том, что они не блокируются фаерволами.

0

Если вы хотите избавиться от "черных полос" и сделать это так, как это делает YouTube, вы можете использовать следующий формат URL:

https://i.ytimg.com/vi_webp/<id_видео>/mqdefault.webp

Если вы не можете использовать формат файла .webp, вы можете сделать это следующим образом:

https://i.ytimg.com/vi/<id_видео>/mqdefault.jpg

Кроме того, если вам нужна версия без масштабирования, используйте maxresdefault вместо mqdefault.

Обратите внимание: я не уверен насчет соотношения сторон, если вы собираетесь использовать maxresdefault.

0

Если вам нужна самая большая картинка с YouTube для конкретного идентификатора видео, URL должен выглядеть следующим образом:

http://i3.ytimg.com/vi/SomeVideoIDHere/0.jpg

Используя API, вы можете получить изображение миниатюры по умолчанию. Простой код может выглядеть так:

// Получаем миниатюру по умолчанию
$attrs = $media->group->thumbnail[1]->attributes();
$thumbnail = $attrs['url'];
$thumbnail = substr($thumbnail, 0, -5);
$thumb1 = $thumbnail."default.jpg";

// Получаем третью миниатюру
$thumb2 = $thumbnail."2.jpg";

// Получаем четвертую миниатюру
$thumb3 = $thumbnail."3.jpg";

// Используем простой cURL для сохранения на ваш сервер.
// Вы можете доработать cURL, если хотите, чтобы это выглядело более изящно,
// как у остальных участников здесь.

$ch = curl_init ("$thumb1");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
$rawdata = curl_exec($ch);
curl_close($ch);

// Используем fwrite для сохранения вышеуказанного
$fp = fopen("SomeLocationInReferenceToYourScript/AnyNameYouWant.jpg", 'w');

// Записываем файл
fwrite($fp, $rawdata);

// И затем закрываем его.
fclose($fp);

Этот код поможет вам получить миниатюру видео и сохранить её на ваш сервер. Не забудьте заменить "SomeLocationInReferenceToYourScript/AnyNameYouWant.jpg" на реальный путь и имя файла, куда вы хотите сохранить миниатюру.

0

Вы можете использовать следующую функцию, чтобы получать только существующие изображения с YouTube:

function youtube_image($id) {
    $resolution = array(
        'maxresdefault',
        'sddefault',
        'mqdefault',
        'hqdefault',
        'default'
    );

    for ($x = 0; $x < sizeof($resolution); $x++) {
        $url = '//img.youtube.com/vi/' . $id . '/' . $resolution[$x] . '.jpg';
        if (get_headers($url)[0] == 'HTTP/1.0 200 OK') {
            break;
        }
    }
    return $url;
}

Эта функция принимает идентификатор видео на YouTube и пробует получить изображение в различных разрешениях. Она перебирает массив разрешений, начиная с наивысшего (maxresdefault) и заканчивая самым низким (default). Для каждого разрешения функция формирует URL и проверяет его статус с помощью get_headers(). Как только она находит изображение с ответом HTTP/1.0 200 OK, она прерывает цикл и возвращает найденный URL.

Обратите внимание, что функция вернет URL первого доступного изображения, найденного в массиве разрешений. Если изображение не найдено, возвращенный результат будет пустым значением, так как переменная $url не будет инициализирована корректным значением. Вы можете добавить дополнительные проверки, чтобы обработать такие ситуации.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь