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

2712
CodeOverload 15 Янв 2010 в 02:34
1
Вот несколько функций PHP, которые я создал, чтобы получить лучший эскиз, доступный из метода URL без проверки связи с API, на основе множества хороших ответов на этой странице: gist.github.com/squarecandy/30ec9f6779c0e8cdf12e337c665d96c5
 – 
squarecandy
9 Май 2018 в 21:38

31 ответ

Лучший ответ

Каждое видео 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) для получения уменьшенных изображений.

5201
Peter Mortensen 11 Июл 2019 в 00:45
49
На всякий случай, если кто-то совершит эту глупую ошибку - вы не можете использовать http://www.img.youtube.com, только http://img.youtube.com
 – 
Ciaran Phillips
5 Ноя 2013 в 19:04
13
Форматы sddefault.jpg и maxresdefault.jpg больше не работают
 – 
clami219
31 Мар 2015 в 12:27
7
Это НЕ ИСТИНА, 0.jpg НЕ ВСЕГДА полноразмерная версия ... Может быть, но это не правило ...
 – 
jave.web
14 Апр 2015 в 10:42
11
@ jave.web @ clami219 Поскольку sddefault и maxresdefault не всегда доступны. Подходит ли mqdefault для всех видео? Какой URL-адрес лучше всего для миниатюры без двух черных рамок (вверху и внизу)?
 – 
Ne AS
9 Ноя 2016 в 14:32
11
Если кому-то интересно, как получить размеры не по умолчанию: я просто попробовал (и это действительно работает), чтобы имена форматов работали как префикс. Таким образом, вы можете получить maxres2.jpg, hq2.jpg, hq3.jpg и т. Д.
 – 
Hernan
9 Фев 2019 в 20:33

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

18
Community 20 Июн 2020 в 12:12

Другой хорошей альтернативой может быть использование 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"
}

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

17
Andresch Serj 27 Май 2020 в 12:09

Использование:

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

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

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

15
Community 23 Май 2017 в 15:18

Я использовал эскизы 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 запрещает включать изображения прямо со своего сервера.

15
Peter Mortensen 11 Июл 2019 в 00:49

Вы можете получить идентификатор видео из 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

15
Rinto George 27 Мар 2021 в 20:38
Есть ли способ получить ключ API данных YouTube пользователя (после авторизации)
 – 
Akshay K Nair
8 Апр 2021 в 09:34

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

13
Scott Joudry 9 Фев 2016 в 21:31

Просто чтобы добавить / расширить представленные решения, я считаю необходимым отметить, что, поскольку у меня сама была эта проблема, на самом деле можно получить несколько видеороликов 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);

?>
13
Hlawuleka MAS 15 Авг 2017 в 18:10

API данных YouTube

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

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

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

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

  4. https://i.ytimg.com/vi/V_zwalcR8DU/mqdefault.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 с четырьмя ссылками в эскизах переменной фрагмента (если все они доступны).

13
Peter Mortensen 11 Июл 2019 в 01:04

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

  • дефолт
  • hqdefault
  • mqdefault
  • sddefault
  • maxresdefault
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;}
12
Peter Mortensen 11 Июл 2019 в 00:52

Если вы используете общедоступный API, лучший способ сделать это - использовать операторы if.

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

<?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';
    }
10
Peter Mortensen 11 Июл 2019 в 00:58

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

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

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

https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/maxresdefault.jpg
9
Kumar 20 Дек 2021 в 13:49
https://i.ytimg.com/vi/<--Video ID-->/default.jpg

Изображение Размер Вес 120 пикселей Высота 90 пикселей

https://i.ytimg.com/vi/<--Video ID-->/mqdefault.jpg

Изображение Размер Вес 320 пикселей Высота 180 пикселей

https://i.ytimg.com/vi/<--Video ID-->/hqdefault.jpg

Изображение Размер Вес 480 пикселей Высота 360 пикселей

https://i.ytimg.com/vi/<--Video ID-->/sddefault.jpg

Изображение Размер Вес 640 пикселей Высота 480 пикселей

https://i.ytimg.com/vi/<--Video ID-->/maxresdefault.jpg

Изображение Размер Вес 1280 пикселей Высота 720 пикселей

9
Mr. Coderx 2 Мар 2022 в 11:21
Работает хорошо, но не могли бы вы предоставить исходники?
 – 
imrok
19 Фев 2022 в 01:33

Метод 1:

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

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

$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

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

Метод 2:

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

Метод 3:

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

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

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

8
Hassan Saeed 28 Май 2020 в 14:15
Ссылки https://www.youtube.com/watch?v=mXde7q59BI8 и https://www.youtube.com/watch?v=9f6E8MeM6PI (эффективно) не работают.
 – 
Peter Mortensen
11 Июл 2019 в 01:15
YouTube заблокировал это видео из-за своей политики. Надеюсь, эта статья вам поможет. www.hzonesp.com/php/get-youtube-video-thumbnail-using-id/
 – 
Hassan Saeed
17 Июл 2019 в 19:52
Метод 1 прост в реализации
 – 
Rajesh Jr.
14 Июн 2020 в 07:25

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

6
24 Фев 2020 в 05:33

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

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

Код:

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`

Утилита image.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
    })
}

Утилита url.js:

// 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
    },
    {})
}
4
catamphetamine 23 Сен 2018 в 18:50

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

<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';
}

Гарантированно существуют некоторые эскизы:

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

Спасибо.

4
Ali Han 25 Дек 2021 в 17:10
    function get_video_thumbnail( $src ) {
            $url_pieces = explode('/', $src);
            if( $url_pieces[2] == 'dai.ly'){
                $id = $url_pieces[3];
                $hash = json_decode(file_get_contents('https://api.dailymotion.com/video/'.$id.'?fields=thumbnail_large_url'), TRUE);
                $thumbnail = $hash['thumbnail_large_url'];
            }else if($url_pieces[2] == 'www.dailymotion.com'){
                $id = $url_pieces[4];
                $hash = json_decode(file_get_contents('https://api.dailymotion.com/video/'.$id.'?fields=thumbnail_large_url'), TRUE);
                $thumbnail = $hash['thumbnail_large_url'];
            }else if ( $url_pieces[2] == 'vimeo.com' ) { // If Vimeo
                $id = $url_pieces[3];
                $hash = unserialize(file_get_contents('http://vimeo.com/api/v2/video/' . $id . '.php'));
                $thumbnail = $hash[0]['thumbnail_large'];
            } elseif ( $url_pieces[2] == 'youtu.be' ) { // If Youtube
                $extract_id = explode('?', $url_pieces[3]);
                $id = $extract_id[0];
                $thumbnail = 'http://img.youtube.com/vi/' . $id . '/mqdefault.jpg';
            }else if ( $url_pieces[2] == 'player.vimeo.com' ) { // If Vimeo
                $id = $url_pieces[4];
                $hash = unserialize(file_get_contents('http://vimeo.com/api/v2/video/' . $id . '.php'));
                $thumbnail = $hash[0]['thumbnail_large'];
            } elseif ( $url_pieces[2] == 'www.youtube.com' ) { // If Youtube
                $extract_id = explode('=', $url_pieces[3]);
                $id = $extract_id[1];
                $thumbnail = 'http://img.youtube.com/vi/' . $id . '/mqdefault.jpg';
            } else{
                $thumbnail = tim_thumb_default_image('video-icon.png', null, 147, 252);
            }
            return $thumbnail;
        }

get_video_thumbnail('https://vimeo.com/154618727');
get_video_thumbnail('https://www.youtube.com/watch?v=SwU0I7_5Cmc');
get_video_thumbnail('https://youtu.be/pbzIfnekjtM');
get_video_thumbnail('http://www.dailymotion.com/video/x5thjyz');
6
Nimesh Vagadiya 26 Окт 2017 в 13:29

Вы можете использовать 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, которые вы планируете сделать. Однако несколько тысяч запросов в день бесплатны.

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

426
Conor Reid 29 Ноя 2021 в 22:28
6
К вашему сведению: я не менял код, чтобы он соответствовал новой структуре JSON. Код в вашем getJSON неверен. Вы использовали jsonc вместо json для getJSON. Это не удается из-за неправильной структуры JSON.
 – 
mauris
24 Июн 2012 в 11:41
5
Только первый пример может использовать jsonc. Примеры jQuery и PHP ДОЛЖНЫ использовать json. И я обновил код, чтобы он соответствовал новой структуре JSON. Я использую код прямо сейчас, и он работает в прямом эфире. поэтому не говорите, что это не работает, не прочитав изменения. Спасибо!
 – 
mauris
24 Июн 2012 в 11:44
7
Примеры jQuery и PHP ДОЛЖНЫ использовать json ... можете ли вы предоставить ссылку? Кроме того, запрос конкретного номера версии API (v=2) отвечает за изменения API.
 – 
Salman A
24 Июн 2012 в 11:47
4
Вызов gdata не возвращает, доступен ли maxresdefault.jpg для видео, где он доступен, только mq / hq / sd.
 – 
Aaron
20 Май 2013 в 22:56
2
API v3 ОЧЕНЬ плохо документирован. Они дают вам образец кода, но в разделе «справочная информация» очень мало деталей. Некоторые вещи, которые должны быть относительно "очевидными", по-видимому, требуют крайних решений.
 – 
CashCow
3 Фев 2015 в 12:51

То, что сказал Асаф, верно. Однако не каждое видео 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-адрес или идентификатор видео.

320
Zombo 7 Июл 2020 в 22:52
5
Вы также можете добиться того же результата с официальной ссылкой на YouTube img.youtube.com/vi/mJ8tq8AnNis/ mqdefault.jpg, где mJ8tq8AnNis - идентификатор видео
 – 
Ragaisis
7 Окт 2014 в 12:23
5
Инструмент «Генератор видеоинформации YouTube» в настоящее время не работает. Попробуйте отредактировать ответ.
 – 
giovannipds
23 Мар 2017 в 01:57
1
Предложите удалить все три ссылки . Ни один из них не дает ничего полезного, что я мог бы увидеть.
 – 
Bob Stein
1 Мар 2020 в 18:11
FWIW, жесткие коды внешнего интерфейса YouTube mqdefault.jpg должны быть 320x180
 – 
Mattwmaster58
23 Ноя 2021 в 10:34

В 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-адреса не блокируются брандмауэрами.

88
Peter Mortensen 2 Фев 2014 в 15:04
3
Предполагается, что эти изображения должны быть помещены в тег img и должны просто работать, потому что я пытаюсь включить ссылку с правильным идентификатором видео YouTube и поместить их в тег img, но я продолжаю получать 404
 – 
Lion789
2 Ноя 2013 в 03:08
5
Эти URL-адреса работают нормально, когда они помещены в тег img. Проблема может заключаться в неправильном идентификаторе видео или запрошенное разрешение может быть недоступно, но вы не получите 404 с этими ошибками. Пожалуйста, проверьте URL-адрес тега img .
 – 
Naren
4 Ноя 2013 в 09:42
2
Подтверждено ли, что URL-адреса будут продолжать работать после остановки API v2?
 – 
Daniele B
14 Апр 2015 в 16:19
1
Эти URL-адреса все еще работают. Вы знаете, как проверить, будут ли эти URL работать после API v2?
 – 
Naren
15 Апр 2015 в 07:31

Если вам нужно самое большое изображение с 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);
59
yivi 28 Мар 2022 в 10:37
6
Я нашел пример, где 0.jpg имеет разрешение 480x360, а maxresdefault.jpg - 1280x720.
 – 
Nico Haase
18 Ноя 2015 в 11:46

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

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

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

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

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

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

60
Zombo 12 Июн 2021 в 17:30
3
Это недоступно для многих видео. Например: i.ytimg.com/vi_webp/mJ8tq8AnNis/mqdefault.webp.
 – 
NickG
8 Июл 2016 в 18:43
4
: Работает, если вы удалите _webp и измените расширение на .jpg. Рабочий пример: i.ytimg.com/vi/mJ8tq8AnNis/mqdefault.jpg , Я не уверен насчет соотношения сторон.
 – 
LuTz
9 Июл 2016 в 19:42
Спасибо. Есть ли способ получить sddefault без черных полос? img.youtube.com/vi_webp/dQw4w9WgXcQ/sddefault.webp сохраняет возвращаемое изображение с черными полосами.
 – 
Akshay K Nair
23 Авг 2021 в 12:09

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

33
keyboardP 15 Янв 2010 в 02:40

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

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

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

33
Peter Mortensen 2 Фев 2014 в 15:01
1
Я думаю, это правильный способ сделать это, поскольку он исходит от члена отношений Google Dev для youtube api
 – 
Adonis K. Kakoulidis
20 Окт 2014 в 13:01
// Get image form video URL
$url = $video['video_url'];

$urls = parse_url($url);

//Expect the URL to be http://youtu.be/abcd, where abcd is the video ID
if ($urls['host'] == 'youtu.be') :

    $imgPath = ltrim($urls['path'],'/');

//Expect the URL to be http://www.youtube.com/embed/abcd
elseif (strpos($urls['path'],'embed') == 1) :

    $imgPath = end(explode('/',$urls['path']));

//Expect the URL to be abcd only
elseif (strpos($url,'/') === false):

    $imgPath = $url;

//Expect the URL to be http://www.youtube.com/watch?v=abcd
else :

    parse_str($urls['query']);

    $imgPath = $v;

endif;
28
Peter Mortensen 2 Фев 2014 в 15:03
2
Это плохое решение! почему бы не использовать Youtube api v3?
 – 
mpgn
29 Июл 2014 в 03:42

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
34
Peter Mortensen 11 Июл 2019 в 00:56

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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
19
Mark Fulghum 14 Сен 2020 в 20:53

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

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

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;
}
2
Peter Mortensen 11 Июл 2019 в 01:16
Это работает, только если URL-адрес не имеет других параметров запроса.
 – 
Ma Kobi
3 Май 2018 в 12:52
Да, все видео youtube следуют формату во время просмотра, вы можете скопировать ссылку из браузера
 – 
Sodruldeen Mustapha
4 Май 2018 в 14:01
Что, если у вас есть другой параметр, например &t=227s?
 – 
Ma Kobi
4 Май 2018 в 14:04
1
Я понимаю вашу точку зрения, но стандартные видео на YouTube идут без других параметров, но при необходимости вы можете отфильтровать ссылку перед первой строкой функции. Вам нужна помощь в фильтрации ссылки, чтобы убедиться, что она игнорирует все остальное, кроме необходимого?
 – 
Sodruldeen Mustapha
4 Май 2018 в 15:23

Я сделал функцию, чтобы получать только существующие изображения с 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;
}
36
Henrik Albrechtsson 7 Окт 2015 в 10:59
Я получаю это в контроллере laravel get_headers (): эта функция может использоваться только против URL-адресов
 – 
Youssef Boudaya
6 Янв 2021 в 16:30
К вашему сведению - похоже, что он не извлекает существующие изображения, а только первые доступные.
 – 
Zippp
21 Июн 2021 в 21:25

Используйте img.youtube.com/vi/YouTubeID/ImageFormat.jpg

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

3
Peter Mortensen 11 Июл 2019 в 01:17