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

Если у меня есть URL-адрес видео YouTube, есть ли способ использовать PHP и cURL для получения соответствующего эскиза из API YouTube?


person CodeOverload    schedule 14.01.2010    source источник
comment
stackoverflow .com / questions / 18953499 /.   -  person squarecandy    schedule 09.05.2018
comment
На всякий случай, если кто-то еще совершит эту глупую ошибку - вы не можете использовать _1_, только _2_   -  person iOS    schedule 01.07.2019


Ответы (32)


Каждое видео YouTube имеет четыре сгенерированных изображения. Они предсказуемо отформатированы следующим образом:

https://img.youtube.com/vi/<insert-youtube-video-id-here>/0.jpg
https://img.youtube.com/vi/<insert-youtube-video-id-here>/1.jpg
https://img.youtube.com/vi/<insert-youtube-video-id-here>/2.jpg
https://img.youtube.com/vi/<insert-youtube-video-id-here>/3.jpg

Первый в списке - это полноразмерное изображение, а остальные - миниатюрные изображения. Изображение эскиза по умолчанию (т. Е. Одно из 1.jpg, 2.jpg, 3.jpg):

https://img.youtube.com/vi/<insert-youtube-video-id-here>/default.jpg

Для высококачественной версии миниатюры используйте URL-адрес, подобный этому:

https://img.youtube.com/vi/<insert-youtube-video-id-here>/hqdefault.jpg

Существует также версия миниатюры среднего качества с URL-адресом, аналогичным HQ:

https://img.youtube.com/vi/<insert-youtube-video-id-here>/mqdefault.jpg

Для версии эскиза со стандартным определением используйте URL-адрес, подобный этому:

https://img.youtube.com/vi/<insert-youtube-video-id-here>/sddefault.jpg

Для версии миниатюры с максимальным разрешением используйте URL-адрес, подобный этому:

https://img.youtube.com/vi/<insert-youtube-video-id-here>/maxresdefault.jpg

Все вышеперечисленные URL-адреса также доступны через HTTP. Кроме того, немного более короткое имя хоста i3.ytimg.com работает вместо img.youtube.com в приведенных выше примерах URL.

Кроме того, вы можете использовать API данных YouTube (v3) для получения уменьшенных изображений.

person Asaph    schedule 14.01.2010
comment
@KeyLimePiePhotonAndroid, я думаю, что запросы о плейлистах лучше подойдут как отдельный вопрос. - person Ciaran Phillips; 05.11.2013
comment
@NickG _1_ - 16: 9 - person TRiG; 27.11.2013
comment
Кроме того, вы можете использовать эти имена хостов mqdefault, _2_, _3_, _4_, _5_ или _6_. - person tomtastico; 25.02.2014
comment
это где-то официально задокументировано? - person Modder; 23.09.2014
comment
Наличие эскизов с более высоким разрешением не гарантируется. - person bjunix; 04.11.2014
comment
Это полезно, поскольку я пытаюсь исключить видео с неподвижными изображениями из результатов поиска. Если миниатюры 2 и 3 существуют и идентичны, очень вероятно, что у меня есть неподвижное фото-видео, и я могу его удалить. - person Salman A; 12.11.2014
comment
Я просто попробовал, и хотя они выглядят одинаково, были небольшие различия. 1 и 3 были ближе друг к другу, поскольку были одинакового размера, но различались в нескольких местах. - person CashCow; 03.02.2015
comment
как получить версию 16: 9? - person CashCow; 04.02.2015
comment
Форматы _1_ и _2_ больше не работают - person David; 24.03.2015
comment
@munissor НЕ ИСТИНА, 0.jpg НЕ ВСЕГДА полноразмерная версия ... Может быть, но это не правило ... - person clami219; 31.03.2015
comment
@ jave.web вы правы, я только что встречал видео, в которых нет этих форматов - person jave.web; 14.04.2015
comment
На maxresdefault.jpg при использовании пользовательского эскиза на YouTube мы обнаружили, что изображение должно иметь соотношение сторон 16: 9, иначе по умолчанию будет использоваться изображение YouTube. - person clami219; 16.04.2015
comment
для получения идентификатора может оказаться полезным этот вопрос: stackoverflow.com/questions/3452546/ - person Dean Whitehouse; 12.06.2015
comment
@ jave.web @ clami219 Поскольку _1_ и _2_ не всегда доступны. _3_ работает для всех видео? Какой URL-адрес лучше всего для миниатюры без двух черных рамок (вверху и внизу)? - person KNU; 06.11.2015
comment
@Llg 2 черные рамки - это то, что вы действительно не можете предсказать, это зависит от того, в каком соотношении отображается миниатюра и в каком соотношении видео. Я не уверен, какие из них доступны всегда, если вас это слишком беспокоит, вам следует использовать API YouTube. Примечание: в последнее время я не замечал видео без sddefault, но это просто субъективно ... - person Ne AS; 09.11.2016
comment
Хотя это работает для большинства видео, которые я пробовал последние пару часов, но, как ни странно, для этого не сработало: img.youtube.com/vi/vJ5ZCBbAPk/0.jpg. Но Youtube, похоже, отлично генерирует миниатюру видео на веб-сайте. Есть мысли, ребята? - person jave.web; 09.11.2016
comment
Я заметил, что в зависимости от возраста видео и качества загрузки некоторые изображения не будут иметь стандартный ожидаемый размер. В основном maxresdefault.jpg. Поэтому для проверки размера изображения я сделал эту страницу myonlinelocation.com/YouTube_Play/VideoThumbnails - person fluffyBatman; 05.01.2017
comment
Есть ли какие-либо ограничения на обращение к API для этого веб-сервера? Или это совершенно бесплатно для достижения N номеров попаданий.? - person Tempus; 08.02.2017
comment
@Saggy Если есть предел, то он высокий. На моем веб-сайте широко используются эскизы YouTube, и у меня не было никаких проблем. Это также не вызов API; это ссылка на файл изображения. - person Saggy; 27.05.2017
comment
Это не работает, если в идентификаторе видео есть символ "-" (-oCXMrICJgY в m. youtube.com/watch?v=-oCXMrICJgY) как решить эту проблему ?? - person Alexander; 28.06.2017
comment
Приходится каждый раз вручную выбирать _1_. Можно ли это обновить для облегчения использования? Если бы это было _2_, просто нужно было бы дважды щелкнуть мышью. - person Arun Ravindranath; 15.02.2018
comment
@fluffyBatman Это видео действительно содержит ошибки. См. встраивание nocookie. - person ; 24.02.2018
comment
Если кому-то интересно, как получить размеры не по умолчанию: я просто попробовал (и это действительно работает), чтобы имена форматов работали как префикс. Таким образом, вы можете получить _1_, _2_, _3_ и т. Д. - person wizzwizz4; 07.03.2018
comment
К вашему сведению: я не менял код, чтобы он соответствовал новой структуре JSON. Код в вашем getJSON неверен. Вы использовали maxres2.jpg вместо hq2.jpg для getJSON. Это не удается из-за неправильной структуры JSON. - person Hernan; 09.02.2019

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

https://www.googleapis.com/youtube/v3/videos?key=YOUR_API_KEY&part=snippet&id=VIDEO_ID

Пример кода PHP

$data = file_get_contents("https://www.googleapis.com/youtube/v3/videos?key=YOUR_API_KEY&part=snippet&id=T0Jqdjbed40");
$json = json_decode($data);
var_dump($json->items[0]->snippet->thumbnails);

Вывод

object(stdClass)#5 (5) {
  ["default"]=>
  object(stdClass)#6 (3) {
    ["url"]=>
    string(46) "https://i.ytimg.com/vi/T0Jqdjbed40/default.jpg"
    ["width"]=>
    int(120)
    ["height"]=>
    int(90)
  }
  ["medium"]=>
  object(stdClass)#7 (3) {
    ["url"]=>
    string(48) "https://i.ytimg.com/vi/T0Jqdjbed40/mqdefault.jpg"
    ["width"]=>
    int(320)
    ["height"]=>
    int(180)
  }
  ["high"]=>
  object(stdClass)#8 (3) {
    ["url"]=>
    string(48) "https://i.ytimg.com/vi/T0Jqdjbed40/hqdefault.jpg"
    ["width"]=>
    int(480)
    ["height"]=>
    int(360)
  }
  ["standard"]=>
  object(stdClass)#9 (3) {
    ["url"]=>
    string(48) "https://i.ytimg.com/vi/T0Jqdjbed40/sddefault.jpg"
    ["width"]=>
    int(640)
    ["height"]=>
    int(480)
  }
  ["maxres"]=>
  object(stdClass)#10 (3) {
    ["url"]=>
    string(52) "https://i.ytimg.com/vi/T0Jqdjbed40/maxresdefault.jpg"
    ["width"]=>
    int(1280)
    ["height"]=>
    int(720)
  }
}

* Мало того, что вам нужен ключ, вас могут попросить предоставить платежную информацию в зависимости от количества запросов API, которые вы планируете сделать. Однако несколько миллионов запросов в день бесплатны.

Исходная статья.

person Salman A    schedule 21.01.2010
comment
Только в первом примере можно использовать jsonc. Примеры jQuery и PHP ДОЛЖНЫ использовать json. И я обновил код, чтобы он соответствовал новой структуре JSON. Я использую код прямо сейчас, и он работает в прямом эфире. поэтому не говорите, что это не работает, не прочитав изменения. Спасибо! - person mauris; 24.06.2012
comment
Примеры jQuery и PHP ДОЛЖНЫ использовать json ... можете ли вы предоставить ссылку? Кроме того, запрос конкретного номера версии API (jsonc) отвечает за изменения API. - person mauris; 24.06.2012
comment
Вызов gdata не возвращает, доступен ли maxresdefault.jpg для видео, где он доступен, только mq / hq / sd. - person Salman A; 24.06.2012
comment
API v3 ОЧЕНЬ плохо документирован. Они дают вам образец кода, но в справочном разделе очень мало деталей. Некоторые вещи, которые должны быть относительно очевидными, требуют крайних решений. - person Aaron; 20.05.2013
comment
Вы также можете достичь того же результата с официальной ссылкой на YouTube img.youtube.com/vi/mJ8tq8AnNis/ mqdefault.jpg, где mJ8tq8AnNis - идентификатор видео - person CashCow; 03.02.2015

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

Width | Height | 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

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

Width | Height | 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

Вы можете найти сценарии JavaScript и PHP для получения эскизов и другой информации YouTube в:

Вы также можете использовать инструмент YouTube Video Information Generator, чтобы получить всю информацию о видео YouTube. отправив URL или идентификатор видео.

person AGMG    schedule 12.12.2013
comment
Инструмент YouTube Video Information Generator в настоящее время не работает. Попробуйте отредактировать ответ. - person Ragaisis; 07.10.2014
comment
Предложите удалить все три ссылки. Ни один из них не дает ничего полезного, что я мог бы увидеть. - person giovannipds; 23.03.2017
comment
Предполагается, что эти изображения должны быть помещены в тег img и должны просто работать, потому что я пытаюсь включить ссылку с правильным идентификатором видео YouTube и поместить их в тег img, но я продолжаю получать 404 - person Bob Stein; 01.03.2020

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

https://i1.ytimg.com/vi/<insert-youtube-video-id-here>/default.jpg -   default
https://i1.ytimg.com/vi/<insert-youtube-video-id-here>/mqdefault.jpg - medium 
https://i1.ytimg.com/vi/<insert-youtube-video-id-here>/hqdefault.jpg - high
https://i1.ytimg.com/vi/<insert-youtube-video-id-here>/sddefault.jpg - standard

И для максимального разрешения ..

https://i1.ytimg.com/vi/<insert-youtube-video-id-here>/maxresdefault.jpg

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

person Naren    schedule 23.08.2013
comment
@ Lion789 Эти URL-адреса работают нормально, когда они помещены в тег img. Проблема может заключаться в неправильном идентификаторе видео или запрошенном разрешении может быть недоступно, но вы не получите 404 с этими ошибками. Пожалуйста, проверьте URL-адрес img тег. - person Lion789; 02.11.2013
comment
Подтверждено ли, что URL-адреса будут продолжать работать после остановки API v2? - person Naren; 04.11.2013
comment
@DanieleB Эти URL-адреса все еще работают. Вы знаете, как проверить, будут ли эти URL работать после API v2? - person Daniele B; 14.04.2015
comment
Я нашел пример, где 0.jpg имеет разрешение 480x360, а maxresdefault.jpg - 1280x720. - person Naren; 15.04.2015

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

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

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

//Grab the default thumbnail image
$attrs = $media->group->thumbnail[1]->attributes();
$thumbnail = $attrs['url'];
$thumbnail = substr($thumbnail, 0, -5);
$thumb1 = $thumbnail."default.jpg";

// Grab the third thumbnail image
$thumb2 = $thumbnail."2.jpg";

// Grab the fourth thumbnail image.
$thumb3 = $thumbnail."3.jpg";

// Using simple cURL to save it your server.
// You can extend the cURL below if you want it as fancy, just like
// the rest of the folks here.

$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);

// Using fwrite to save the above
$fp = fopen("SomeLocationInReferenceToYourScript/AnyNameYouWant.jpg", 'w');

// Write the file
fwrite($fp, $rawdata);

// And then close it.
fclose($fp);
person PoorBoy    schedule 22.12.2010
comment
Это недоступно для многих видео. Например: i.ytimg.com/vi_webp/mJ8tq8AnNis/mqdefault.webp. - person Nico Haase; 18.11.2015

Если вы хотите избавиться от черных полос и делать это так же, как YouTube, вы можете использовать:

https://i.ytimg.com/vi_webp/<video id>/mqdefault.webp

А если вы не можете использовать расширение файла .webp, вы можете сделать это так:

https://i.ytimg.com/vi/<video id>/mqdefault.jpg

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

Примечание. Я не уверен в соотношении сторон, если вы планируете использовать maxresdefault.

person LuTz    schedule 08.06.2015
comment
@NickG: он работает, если вы удалите _1_ и измените расширение на _2_. Рабочий пример: i.ytimg.com/vi/mJ8tq8AnNis/mqdefault.jpg , Я не уверен насчет соотношения сторон. - person NickG; 08.07.2016
comment
Я получаю это в контроллере laravel get_headers (): эта функция может использоваться только против URL-адресов - person LuTz; 09.07.2016

Я сделал функцию, чтобы получать только существующие изображения с 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;
}
person Henrik Albrechtsson    schedule 18.12.2013
comment
FYI - похоже, что он не извлекает существующие изображения, а первые доступные. - person Youssef Boudaya; 06.01.2021
comment
Я не могу получить это с помощью simpleXML. Это довольно сложно! - person Zippp; 21.06.2021

Вы можете получить запись видео, которая содержит URL-адрес видео эскиз. В ссылке есть пример кода. Или, если вы хотите проанализировать XML, есть информация здесь. Возвращенный XML содержит элемент media:thumbnail, который содержит URL-адрес эскиза.

person keyboardP    schedule 14.01.2010
comment
Я думаю, это правильный способ сделать это, поскольку он исходит от члена отношений Google Dev для youtube api - person Aditya M P; 08.05.2011

В API данных YouTube v3 вы можете получить эскизы видео с помощью videos-> list. Из snippet.thumbnails. (Ключ) , вы можете выбрать эскиз по умолчанию, среднего или высокого разрешения и получить его ширину, высоту и URL-адрес.

Вы также можете обновить эскизы с помощью функции эскизов-> установить.

В качестве примеров вы можете ознакомиться с образцами API YouTube проект. (PHP.)

person Ibrahim Ulukaya    schedule 28.05.2013
comment
это плохое решение! почему бы не использовать Youtube api v3? - person Adonis K. Kakoulidis; 20.10.2014

YouTube принадлежит Google, и Google любит иметь разумное количество изображений для разных размеров экрана, поэтому его изображения хранятся в разных размерах. Вот пример того, как будет выглядеть ваша миниатюра:

Миниатюра низкого качества:

http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/sddefault.jpg

Миниатюра среднего качества:

http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/mqdefault.jpg

Миниатюра высокого качества:

http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/hqdefault.jpg

Миниатюра максимального качества:

http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/maxresdefault.jpg
person life evader    schedule 01.12.2015

Другой хорошей альтернативой может быть использование API oEmbed, поддерживаемого YouTube.

Вы просто добавляете URL-адрес YouTube к URL-адресу oEmbed, и вы получаете JSON, включая миниатюру и HTML-код для встраивания.

Пример:

http://www.youtube.com/oembed?format=json&url=http%3A//youtube.com/watch%3Fv%3DxUeJdWYdMmQ

Дала бы вам:

{
  "height":270,
  "width":480,
  "title":"example video for 2020",
  "thumbnail_width":480,
  "html":"...",
  "thumbnail_height":360,
  "version":"1.0",
  "provider_name":"YouTube",
  "author_url":"https:\/\/www.youtube.com\/channel\/UCza6VSQUzCON- AzlsrOLwaA",
  "thumbnail_url":"https:\/\/i.ytimg.com\/vi\/xUeJdWYdMmQ\/hqdefault.jpg",
  "author_name":"Pokics",
  "provider_url":"https:\/\/www.youtube.com\/",
  "type":"video"
}

Прочтите документацию для получения дополнительной информации.

person Andresch Serj    schedule 08.03.2017

YouTube API версии 3 готов к работе за 2 минуты

Если все, что вам нужно, это выполнить поиск на YouTube и получить связанные свойства:

  1. Получите общедоступный API - Эта ссылка дает хорошее направление

  2. Используйте строку запроса ниже. Например, поисковый запрос (обозначенный q =) в строке URL - это stackoverflow. Затем YouTube отправит вам ответ JSON, в котором вы сможете проанализировать значок, фрагмент, автора и т. Д.

    https://www.googleapis.com/youtube/v3/search?part=id%2Csnippet&maxResults=50&q=stackoverflow&key=YOUR_API_KEY_HERE

person Chris    schedule 14.03.2014

Использовать:

https://www.googleapis.com/youtube/v3/videoCategories?part=snippet,id&maxResults=100&regionCode=us&key=**Your YouTube ID**

Выше ссылка. Используя это, вы можете узнать характеристики видео YouTube. Найдя характеристики, вы можете получить видео выбранной категории. После этого вы можете найти выбранные видеоизображения с помощью Ответ Асафа.

Попробуйте описанный выше подход, и вы сможете анализировать все из API YouTube.

person Nikh1414    schedule 03.04.2014

Я использовал эскизы YouTube следующим образом:

$url = 'http://img.youtube.com/vi/' . $youtubeId . '/0.jpg';
$img = dirname(__FILE__) . '/youtubeThumbnail_'  . $youtubeId . '.jpg';
file_put_contents($img, file_get_contents($url));

Помните, что YouTube запрещает включать изображения прямо со своего сервера.

person blacksunshineCoding    schedule 06.05.2015

Просто чтобы добавить / расширить представленные решения, я считаю необходимым отметить, что, поскольку у меня сама была эта проблема, на самом деле можно получить несколько видеороликов YouTube, в данном случае эскизов, с помощью одного HTTP-запроса:

Используя Rest Client, в данном случае HTTPFUL, вы можете сделать что-то вроде этого:

<?php
header("Content-type", "application/json");

//download the httpfull.phar file from http://phphttpclient.com
include("httpful.phar");

$youtubeVidIds= array("nL-rk4bgJWU", "__kupr7KQos", "UCSynl4WbLQ", "joPjqEGJGqU", "PBwEBjX3D3Q");


$response = \Httpful\Request::get("https://www.googleapis.com/youtube/v3/videos?key=YourAPIKey4&part=snippet&id=".implode (",",$youtubeVidIds)."")

->send();

print ($response);

?>
person Hlawuleka MAS    schedule 08.05.2016

API данных YouTube

YouTube предоставляет нам четыре сгенерированных изображения для каждого видео через Data API (v3), например,

  1. https://i.ytimg.com/vi/V_zwalcR8DU/maxresdefault.jpg

  2. https://i.ytimg.com/vi/V_zwalcR8DU/maxresdefault.jpg

  3. https://i.ytimg.com/vi/V_zwalcR8DU/maxresdefault.jpg

  4. https://i.ytimg.com/vi/V_zwalcR8DU/maxresdefault.jpg

Получение доступа к изображениям через API

  1. Сначала получите свой открытый ключ API на консоли Google API.
  2. Согласно ссылке на значок YouTube в документации API, вам необходимо получить доступ к ресурсам на snippet.thumbnails.
  3. В соответствии с этим вам нужно сформулировать свой URL следующим образом:

    www.googleapis.com/youtube/v3/videos?part=snippet&id=`yourVideoId`&key=`yourApiKey`
    

Теперь измените свой идентификатор видео и ключ API на соответствующий идентификатор видео и ключ API, и его ответом будет вывод JSON, содержащий четыре ссылки в эскизах переменной фрагмента (если все они доступны).

person Daksh Miglani    schedule 22.03.2017

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

person Scott Joudry    schedule 21.01.2014

Вы можете получить идентификатор видео из URL-адреса видео YouTube, используя parse_url, parse_str, а затем вставьте в прогнозные URL-адреса для изображений. Спасибо YouTube за прогнозные URL

$videoUrl = "https://www.youtube.com/watch?v=8zy7wGbQgfw";
parse_str( parse_url( $videoUrl, PHP_URL_QUERY ), $my_array_of_vars );
$ytID = $my_array_of_vars['v']; //gets video ID

print "https://img.youtube.com/vi/$ytID/maxresdefault.jpg";
print "https://img.youtube.com/vi/$ytID/mqdefault.jpg";
print "https://img.youtube.com/vi/$ytID/hqdefault.jpg";
print "https://img.youtube.com/vi/$ytID/sddefault.jpg";
print "https://img.youtube.com/vi/$ytID/default.jpg";

Вы можете использовать этот инструмент для создания эскизов YouTube

https://youtube-thumbnail-tool.com

person Rinto George    schedule 02.05.2018
comment
Ссылки _1_ и _2_ (фактически) не работают. - person Akshay kn; 08.04.2021

Простая функция PHP, которую я создал для миниатюры YouTube, типы:

  • hqdefault
  • mqdefault
  • sddefault
  • maxresdefault
  • Если вы используете общедоступный API, лучший способ сделать это - использовать операторы
    function get_youtube_thumb($link,$type){
    
        $video_id = explode("?v=", $link);
    
        if (empty($video_id[1])){
            $video_id = explode("/v/", $link);
            $video_id = explode("&", $video_id[1]);
            $video_id = $video_id[0];
        }
        $thumb_link = "";
    
        if($type == 'default'   || $type == 'hqdefault' ||
           $type == 'mqdefault' || $type == 'sddefault' ||
           $type == 'maxresdefault'){
    
            $thumb_link = 'http://img.youtube.com/vi/'.$video_id.'/'.$type.'.jpg';
    
        }elseif($type == "id"){
            $thumb_link = $video_id;
        }
        return $thumb_link;}
    
    .

дефолт

function get_youtube_thumb($link,$type){

    $video_id = explode("?v=", $link);

    if (empty($video_id[1])){
        $video_id = explode("/v/", $link);
        $video_id = explode("&", $video_id[1]);
        $video_id = $video_id[0];
    }
    $thumb_link = "";

    if($type == 'default'   || $type == 'hqdefault' ||
       $type == 'mqdefault' || $type == 'sddefault' ||
       $type == 'maxresdefault'){

        $thumb_link = 'http://img.youtube.com/vi/'.$video_id.'/'.$type.'.jpg';

    }elseif($type == "id"){
        $thumb_link = $video_id;
    }
    return $thumb_link;}
person Arun Yokesh    schedule 24.09.2015

Если видео является общедоступным или частным, вы устанавливаете миниатюру с помощью метода URL. Если видео является частным, вы используете API для получения миниатюры.

YouTube обслуживает эскизы с двух серверов. Вам просто нужно заменить ‹YouTube_Video_ID_HERE› на свой собственный идентификатор видео YouTube. В наши дни webP - лучший формат для быстрой загрузки изображений из-за небольшого размера изображения.

<?php
    if($video_status == 'unlisted'){
        $video_thumbnail = 'http://img.youtube.com/vi/'.$video_url.'/mqdefault.jpg';
        $video_status = '<i class="fa fa-lock"></i>&nbsp;Unlisted';
    }
    elseif($video_status == 'public'){
        $video_thumbnail = 'http://img.youtube.com/vi/'.$video_url.'/mqdefault.jpg';
        $video_status = '<i class="fa fa-eye"></i>&nbsp;Public';
    }
    elseif($video_status == 'private'){
        $video_thumbnail = $playlistItem['snippet']['thumbnails']['maxres']['url'];
        $video_status = '<i class="fa fa-lock"></i>&nbsp;Private';
    }
person Harvey Connor    schedule 17.05.2016

https://img.youtube.com https://i.ytimg.com

Примеры - с сервером https://i.ytimg.com только потому, что он короче, без какой-либо другой конкретной причины. Вы можете использовать оба.

Миниатюра фона проигрывателя (480x360):

Эскизы видеокадров (120x90)

WebP
https://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/0.webp

JPG
https://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/0.jpg

Уменьшенное изображение самого низкого качества (120 x 90)

WebP:
Start: https://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/1.webp
Middle: https://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/2.webp
End: https://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/3.webp

JPG:
Start: https://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/1.jpg
Middle: https://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/2.jpg
End: https://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/3.jpg

Миниатюра среднего качества (320 x 180)

WebP
https://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/default.webp

JPG
https://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/default.jpg

Миниатюра в высоком качестве (480x360)

WebP
https://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/mqdefault.webp

JPG
https://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/mqdefault.jpg

Миниатюра стандартного качества (640 x 480)

WebP
https://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/hqdefault.webp

JPG
https://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/hqdefault.jpg

Немасштабированное разрешение миниатюр

WebP
https://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/sddefault.webp

JPG
https://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/sddefault.jpg

Я думаю, что это большой ответ на миниатюры, но я хочу добавить несколько других URL-адресов, чтобы очень легко получить миниатюру YouTube. Я просто беру текст из ответа Асафа. Вот несколько URL-адресов для получения эскизов YouTube:

WebP
https://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/maxresdefault.webp

JPG
https://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/maxresdefault.jpg
person Mark Fulghum    schedule 14.09.2020

Для высококачественной версии миниатюры используйте URL-адрес, подобный этому:

https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/default.jpg

Существует также версия миниатюры среднего качества с URL-адресом, аналогичным высокому качеству:

https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/hqdefault.jpg

Для версии эскиза со стандартным определением используйте URL-адрес, подобный этому:

https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/mqdefault.jpg

Для версии миниатюры с максимальным разрешением используйте URL-адрес, подобный этому:

https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/sddefault.jpg

Метод 1:

https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/maxresdefault.jpg
person Kumar    schedule 24.10.2016

Вы можете найти всю информацию о видео YouTube на странице JSON, на которой есть даже "thumbnail_url", http://www.youtube.com/oembed?format=json&url= {здесь находится URL вашего видео}

Как конечный URL-адрес + тестовый код PHP

Подробнее см. В разделе Как получить YouTube уменьшенное изображение видео с использованием идентификатора или https://www.youtube.com/watch?v=mXde7q59BI8 видеоурок 1

$data = file_get_contents("https://www.youtube.com/oembed?format=json&url=https://www.youtube.com/watch?v=_7s-6V_0nwA");
$json = json_decode($data);
var_dump($json);

Вот главный ответ, оптимизированный для использования вручную. Маркер идентификатора видео без разделителей позволяет выбрать двойным щелчком.

object(stdClass)[1]
  public 'width' => int 480
  public 'version' => string '1.0' (length=3)
  public 'thumbnail_width' => int 480
  public 'title' => string 'how to reminder in window as display message' (length=44)
  public 'provider_url' => string 'https://www.youtube.com/' (length=24)
  public 'thumbnail_url' => string 'https://i.ytimg.com/vi/_7s-6V_0nwA/hqdefault.jpg' (length=48)
  public 'author_name' => string 'H2 ZONE' (length=7)
  public 'type' => string 'video' (length=5)
  public 'author_url' => string 'https://www.youtube.com/channel/UC9M35YwDs8_PCWXd3qkiNzg' (length=56)
  public 'provider_name' => string 'YouTube' (length=7)
  public 'height' => int 270
  public 'html' => string '<iframe width="480" height="270" src="https://www.youtube.com/embed/_7s-6V_0nwA?feature=oembed" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>' (length=171)
  public 'thumbnail_height' => int 360

Метод 2:

Используя ссылку на изображение YouTube, https://img.youtube.com/vi/ "insert-youtube -video-id-here "/default.jpg

Метод 3:

Использование исходного кода браузера для получения миниатюры с помощью URL-ссылки видео - перейдите к исходному коду видео и выполните поиск по миниатюре. Теперь вы можете использовать этот URL в своем исходном коде:

Подробнее см. Как получить видео с YouTube уменьшенное изображение с использованием идентификатора или https://www.youtube.com/watch?v=9f6E8MeM6PI 2

{img src="https://img.youtube.com/vi/"insert-youtube-video-id-here"/default.jpg"}

Выход

person Hassan Saeed    schedule 10.04.2018
comment
YouTube заблокировал это видео из-за своей политики. Надеюсь, эта статья вам поможет. www.hzonesp.com/php/get-youtube-video-thumbnail-using-id/ - person Peter Mortensen; 11.07.2019
comment
Метод 1 прост в реализации - person Hassan Saeed; 17.07.2019
comment
Это работает, только если URL-адрес не имеет других параметров запроса. - person Rajesh Jr.; 14.06.2020

Каждое видео YouTube имеет четыре сгенерированных изображения. Они предсказуемо отформатированы следующим образом:

Первый в списке - это полноразмерное изображение, а остальные - миниатюрные изображения. Изображение эскиза по умолчанию (т. Е. Одно из 1.jpg, 2.jpg, 3.jpg):

https://img.youtube.com/vi/YOUTUBEVIDEOID/0.jpg
https://img.youtube.com/vi/YOUTUBEVIDEOID/1.jpg
https://img.youtube.com/vi/YOUTUBEVIDEOID/2.jpg
https://img.youtube.com/vi/YOUTUBEVIDEOID/3.jpg

Для высококачественной версии миниатюры используйте URL-адрес, подобный этому:

https://img.youtube.com/vi/YOUTUBEVIDEOID/default.jpg

Существует также версия миниатюры среднего качества с URL-адресом, аналогичным HQ:

https://img.youtube.com/vi/YOUTUBEVIDEOID/hqdefault.jpg

Для версии эскиза со стандартным определением используйте URL-адрес, подобный этому:

https://img.youtube.com/vi/YOUTUBEVIDEOID/mqdefault.jpg

Для версии миниатюры с максимальным разрешением используйте URL-адрес, подобный этому:

https://img.youtube.com/vi/YOUTUBEVIDEOID/sddefault.jpg

Все вышеперечисленные URL-адреса также доступны через HTTP. Кроме того, немного более короткое имя хоста i3.ytimg.com работает вместо img.youtube.com в приведенных выше примерах URL.

https://img.youtube.com/vi/YOUTUBEVIDEOID/maxresdefault.jpg

Кроме того, вы можете использовать API данных YouTube (v3) для получения миниатюрных изображений.

Это мое решение, предназначенное только для клиентской стороны и не требующее ключа API.

person Community    schedule 24.02.2018

Код:

YouTube.parse('https://www.youtube.com/watch?v=P3DGwyl0mJQ').then(_ => console.log(_))

Утилита image.js:

import { parseURL, parseQueryString } from './url'
import { getImageSize } from './image'

const PICTURE_SIZE_NAMES = [
    // 1280 x 720.
    // HD aspect ratio.
    'maxresdefault',
    // 629 x 472.
    // non-HD aspect ratio.
    'sddefault',
    // For really old videos not having `maxresdefault`/`sddefault`.
    'hqdefault'
]

// - Supported YouTube URL formats:
//   - http://www.youtube.com/watch?v=My2FRPA3Gf8
//   - http://youtu.be/My2FRPA3Gf8
export default
{
    parse: async function(url)
    {
        // Get video ID.
        let id
        const location = parseURL(url)
        if (location.hostname === 'www.youtube.com') {
            if (location.search) {
                const query = parseQueryString(location.search.slice('/'.length))
                id = query.v
            }
        } else if (location.hostname === 'youtu.be') {
            id = location.pathname.slice('/'.length)
        }

        if (id) {
            return {
                source: {
                    provider: 'YouTube',
                    id
                },
                picture: await this.getPicture(id)
            }
        }
    },

    getPicture: async (id) => {
        for (const sizeName of PICTURE_SIZE_NAMES) {
            try {
                const url = getPictureSizeURL(id, sizeName)
                return {
                    type: 'image/jpeg',
                    sizes: [{
                        url,
                        ...(await getImageSize(url))
                    }]
                }
            } catch (error) {
                console.error(error)
            }
        }
        throw new Error(`No picture found for YouTube video ${id}`)
    },

    getEmbeddedVideoURL(id, options = {}) {
        return `https://www.youtube.com/embed/${id}`
    }
}

const getPictureSizeURL = (id, sizeName) => `https://img.youtube.com/vi/${id}/${sizeName}.jpg`

Утилита url.js:

// Gets image size.
// Returns a `Promise`.
function getImageSize(url)
{
    return new Promise((resolve, reject) =>
    {
        const image = new Image()
        image.onload = () => resolve({ width: image.width, height: image.height })
        image.onerror = reject
        image.src = url
    })
}

Используйте 1_

// Only on client side.
export function parseURL(url)
{
    const link = document.createElement('a')
    link.href = url
    return link
}

export function parseQueryString(queryString)
{
    return queryString.split('&').reduce((query, part) =>
    {
        const [key, value] = part.split('=')
        query[decodeURIComponent(key)] = decodeURIComponent(value)
        return query
    },
    {})
}
person catamphetamine    schedule 23.09.2018

Здесь форматы изображений разные, такие как default, hqdefault, maxresdefault.

Вот простая функция, которую я создал для получения эскизов. Его легко понять и использовать.

person shpwebhost    schedule 29.08.2018

$ link - это ссылка YouTube, скопированная точно так же, как в браузере, например, https://www.youtube.com/watch?v=BQ0mxQXmLsk

Сохраните этот код в пустом файле .php и проверьте его.

function get_youtube_thumb($link){
    $new = str_replace('https://www.youtube.com/watch?v=', '', $link);
    $thumbnail = 'https://img.youtube.com/vi/' . $new . '/0.jpg';
    return $thumbnail;
}
person Sodruldeen Mustapha    schedule 22.04.2018
comment
да, при просмотре все видео на YouTube следует формату, вы можете скопировать ссылку из браузера - person Ma Kobi; 03.05.2018
comment
Что делать, если у вас есть другой параметр, например _1_? - person Sodruldeen Mustapha; 04.05.2018
comment
Я понимаю вашу точку зрения, но стандартные видео на YouTube идут без других параметров, но при необходимости вы можете отфильтровать ссылку перед первой строкой функции. Вам нужна помощь в фильтрации ссылки, чтобы убедиться, что она игнорирует все остальное, кроме необходимого? - person Ma Kobi; 04.05.2018
comment
о, извините, орфографическая ошибка не vedio, это видео, как будто у меня есть эта ссылка на YouTube youtube.com/watch?v = QmQPK6pSelk и сразу после v = есть уникальное значение символа, вот эти QmQPK6pSelk - это идентификатор видео, но в вашем коде вы будете использовать идентификатор видео вашего видео, для которого вы хотите получить миниатюру. Если вы получили свой ответ, проголосуйте за мой ответ. Спасибо - person Sodruldeen Mustapha; 04.05.2018

Спасибо.

<img src="<?php echo youtube_img_src('9bZkp7q19f0', 'high');?>" />
<?php
// Get a YOUTUBE video thumb image's source url for IMG tag "src" attribute:
// $ID = YouYube video ID (string)
// $size = string (default, medium, high or standard)
function youtube_img_src ($ID = null, $size = 'default') {
    switch ($size) {
        case 'medium':
            $size = 'mqdefault';
            break;
        case 'high':
            $size = 'hqdefault';
            break;
        case 'standard':
            $size = 'sddefault';
            break;
        default:
            $size = 'default';
            break;
    }
    if ($ID) {
        return sprintf('https://img.youtube.com/vi/%s/%s.jpg', $ID, $size);
    }
    return 'https://img.youtube.com/vi/ERROR/1.jpg';
}

Сохранить файл как

<img src="<?php echo youtube_img_src('9bZkp7q19f0', 'high');?>" />
<?php
// Get a YOUTUBE video thumb image's source url for IMG tag "src" attribute:
// $ID = YouYube video ID (string)
// $size = string (default, medium, high or standard)
function youtube_img_src ($ID = null, $size = 'default') {
    switch ($size) {
        case 'medium':
            $size = 'mqdefault';
            break;
        case 'high':
            $size = 'hqdefault';
            break;
        case 'standard':
            $size = 'sddefault';
            break;
        default:
            $size = 'default';
            break;
    }
    if ($ID) {
        return sprintf('https://img.youtube.com/vi/%s/%s.jpg', $ID, $size);
    }
    return 'https://img.youtube.com/vi/ERROR/1.jpg';
}

person Ali    schedule 28.07.2019

Вот простая функция PHP, которая спускается с самого высокого качества до самого лучшего, которое она находит на YT. Возможно, кому-то это поможет. Вы также можете добавить ошибки с помощью cURL, чтобы они даже не отображались, когда видео больше нет в YT. (Это может не работать с видео, не внесенными в список: иногда изображение отображается, но видео все равно будет недоступно для всех.)

  var maxVideos = 5;
  $(document).ready(function(){
  $.get(
    "https://www.googleapis.com/youtube/v3/videos",{
      part: 'snippet,contentDetails',
      id:'your_video_id',
      kind: 'youtube#videoListResponse',
      maxResults: maxVideos,
      regionCode: 'IN',
      key: 'Your_API_KEY'},
      function(data){
        var output;
        $.each(data.items, function(i, item){
          console.log(item);
                thumb = item.snippet.thumbnails.high.url;
          output = '<div id="img"><img src="' + thumb + '"></div>';
          $('#thumbnail').append(output);
        })
        
      }
    );
}); 
.main{
 width:1000px;
 margin:auto;
}
#img{
float:left;
display:inline-block;
margin:5px;
}
<!DOCTYPE html>
<html>
<head>
  <title>Thumbnails</title>
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" type="text/javascript"></script>
</head>
<body>
<div class="main">
 <ul id="thumbnail"> </ul>
</div>
</body>
</html>

person Shahzaib Chadhar    schedule 16.05.2017
comment
Не знаю, почему это уже дважды отклонялось. cURL - слишком большая нагрузка при загрузке веб-страниц. У нас есть этот, который работает вживую, и он намного быстрее. Самое главное: он не учитывает ваши вызовы API. - person Shahzaib Chadhar; 23.05.2017

Использовать так же просто, как:

Функция:

echo '<img src="';
echo get_yt_thumb($ytVidCode);
echo '">';

Вот несколько функций PHP, которые я создал, чтобы получить лучший эскиз, доступный из метода URL без проверки связи с API, на основе множества хороших ответов на этой странице: gist.github.com/squarecandy/30ec9f6779c0e8cdf12e337c665d96c5

function get_yt_thumb($ytVidCode) {
    $url = "https://img.youtube.com/vi/$ytVidCode/maxresdefault.jpg";
    if(remote_file_exists($url)) {
        $vid_thumb  = "https://img.youtube.com/vi/$ytVidCode/maxresdefault.jpg";
    }
    else {
        $url = "https://img.youtube.com/vi/$ytVidCode/sddefault.jpg";
        if(remote_file_exists($url)) {
            $vid_thumb  = "https://img.youtube.com/vi/$ytVidCode/sddefault.jpg";
        }
        else {
            $url = "https://img.youtube.com/vi/$ytVidCode/hqdefault.jpg";
            if(remote_file_exists($url)) {
                $vid_thumb  = "https://img.youtube.com/vi/$ytVidCode/hqdefault.jpg";
            }
            else {
                $url = "https://img.youtube.com/vi/$ytVidCode/default.jpg";
                if(remote_file_exists($url)) {
                    $vid_thumb  = "https://img.youtube.com/vi/$ytVidCode/default.jpg";
                }
            }
        }
    }
    return $vid_thumb;
}
person KJS    schedule 23.03.2021
comment
Хотя это интересное решение, оно написано на JAVA, а не на php с использованием cUrl. - person KJS; 18.06.2021

person    schedule
comment
Есть ли способ получить ключ API данных YouTube пользователя (после авторизации) - person mpgn; 29.07.2014

person    schedule
comment

- person infinitezero; 29.03.2018