如何从YouTube API获取YouTube视频缩略图?


Answers:


4607

每个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.jpg2.jpg3.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

缩略图还有一个中等质量的版本,使用类似于HQ的URL:

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。

或者,您可以使用YouTube数据API(v3)来获取缩略图。


27
万一别人让这个愚蠢的错误-你不能使用http://www.img.youtube.com而已,http://img.youtube.com
夏兰·菲利普斯

36
@NickG mqdefault是16:9
tomtastico

56
这是正式记录的地方吗?
bjunix 2014年

14
不能保证存在较高分辨率的缩略图。
Salman A

63
@ clami219那是假的太-明显的作品(2015-04):i.ytimg.com/vi_webp/EhjdWfxjuHA/sddefault.webp,真理:sddefaultmaxresdefault不总是AWAILABLE一些影片有他们虽然....
jave.web

398

您可以使用YouTube数据API检索视频缩略图,字幕,说明,等级,统计信息等等。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请求的数量。但是,每天有几百万个请求是免费的。

源文章


6
仅供参考:我没有更改代码以适应新的JSON结构。您的getJSON中的代码是错误的。您使用jsonc而不是json用于getJSON。由于错误的JSON结构,此操作失败了。
莫里斯

5
仅第一个示例可以使用jsonc。jQuery和PHP示例必须使用json。而且我已经更新了代码以符合新的JSON结构。我现在正在使用代码,并且可以实时运行。因此,不要说不阅读更改就无法正常工作。谢谢!
莫里斯

7
jQuery和PHP示例必须使用json ...您可以提供参考吗?另外,请求特定的API版本号(v=2)负责API更改。
Salman

4
gdata调用不会返回maxresdefault.jpg是否可用于视频(仅适用于mq / hq / sd)(如果有)。
亚伦

2
API v3非常错误地记录在案。它们为您提供了示例代码,但是“参考”部分的细节很短。一些应该相对“显而易见”的事情似乎需要极端的解决方法。
CashCow 2015年

256

阿萨夫说的是对的。但是,并非每个YouTube视频都包含全部九个缩略图。另外,缩略图的图像大小取决于视频(以下数字基于一个)。

保证有七个缩略图:

| Thumbnail Name      | Size (px) | URL                                              |
|---------------------|-----------|--------------------------------------------------|
| Player Background   | 480x360   | https://i1.ytimg.com/vi/<VIDEO ID>/0.jpg         |
| Start               | 120x90    | https://i1.ytimg.com/vi/<VIDEO ID>/1.jpg         |
| Middle              | 120x90    | https://i1.ytimg.com/vi/<VIDEO ID>/2.jpg         |
| End                 | 120x90    | https://i1.ytimg.com/vi/<VIDEO ID>/3.jpg         |
| High Quality        | 480x360   | https://i1.ytimg.com/vi/<VIDEO ID>/hqdefault.jpg |
| Medium Quality      | 320x180   | https://i1.ytimg.com/vi/<VIDEO ID>/mqdefault.jpg |
| Normal Quality      | 120x90    | https://i1.ytimg.com/vi/<VIDEO ID>/default.jpg   |

此外,其他两个缩略图可能存在也可能不存在。它们的存在可能取决于视频是否是高质量的。

| Thumbnail Name      | Size (px) | URL                                                  |
|---------------------|-----------|------------------------------------------------------|
| Standard Definition | 640x480   | https://i1.ytimg.com/vi/<VIDEO ID>/sddefault.jpg     |
| Maximum Resolution  | 1920x1080 | https://i1.ytimg.com/vi/<VIDEO ID>/maxresdefault.jpg |

您可以在以下位置找到JavaScript和PHP脚本来检索缩略图和其他YouTube信息:

您还可以使用YouTube视频信息生成器工具,通过提交URL或视频ID来获取有关YouTube视频的所有信息。


5
您也可以通过youtube官方链接img.youtube.com/vi/mJ8tq8AnNis/mqdefault.jpg获得相同的结果,其中mJ8tq8AnNis是视频ID
Ragaisis 2014年

4
有时,某一些不存在的- i1.ytimg.com/vi/r5R8gSgedh4/maxresdefault.jpg是假的,虽然i1.ytimg.com/vi/r5R8gSgedh4/0.jpg是确定的例子。
NoBugs 2015年

感谢您发布此信息。您有此数据的来源吗?没错,但是我想要从Youtube / Google链接到某个内容,但找不到。
乔纳森·瓦纳斯科

@JonathanVanasco,对不起。如果您是提供确切内容的官方资源,我什么都不知道。从他们的角度来看,我认为发布这样的内容并不是目的。
AGMG

4
工具“ YouTube视频信息生成器”当前无法使用。考虑编辑答案。
giovannipds

74

在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不会被防火墙阻止。


3
这些图像是否应该放置在img标签中,是否应该正常工作,因为我正尝试在链接中添加正确的youtube video id链接,并将其放入img标签中,但我一直收到404
Lion789

5
@ Lion789将这些URL放置在img标签中后,它们可以正常工作。问题可能是视频ID错误或无法提供所请求的分辨率,但您不会收到404错误消息。请检查url img标签。
Naren 2013年

2
是否已确认在API v2停止后这些网址将继续工作?
Daniele B

1
@DanieleB这些URL仍然有效。您知道如何检查这些网址是否在API v2之后可用吗?
纳仁2015年

53

如果您想从YouTube获得最大的图像以获取特定的视频ID,则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);

2
我找到了一个示例,其中0.jpg的分辨率为480x360,而maxresdefault.jpg的分辨率为1280x720
Nico Haase

45

如果您想摆脱“黑条”,并且像YouTube那样去做,可以使用:

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

如果您不能使用.webp文件扩展名,则可以这样做:

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

另外,如果您需要未缩放版本,请使用maxresdefault代替mqdefault

注意:如果您打算使用,则不确定纵横比maxresdefault


2
这不适用于许多视频。例如:i.ytimg.com/vi_webp/mJ8tq8AnNis/mqdefault.webp
NickG

2
@NickG:如果您将_webp扩展名删除并将其更改为,它将起作用.jpg。工作示例:i.ytimg.com/vi/mJ8tq8AnNis/mqdefault.jpg,我不确定纵横比。
LuTz '16

34

我做了一个仅从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;
}

32

YouTube数据API v3中,您可以使用视频- >列表功能获取视频的缩略图。从snippet.thumbnails。(key)中,您可以选择默认的,中等或高分辨率的缩略图,并获取其宽度,高度和URL。

您也可以使用缩略图->设置功能更新缩略图。

例如,您可以查看YouTube API示例项目。(PHP的。)


1
我猜这是正确的方法,因为它来自YouTube API的Google开发关系成员
Adonis K. Kakoulidis 2014年

31

您可以获取视频条目,其中包含视频缩略图的URL。链接中有示例代码。或者,如果你想解析XML,还有的信息在这里。返回的XML有一个media:thumbnail元素,其中包含缩略图的URL。


2
我无法使用simpleXML弄清楚它。很难!
Aditya MP

25
// 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;

2
这是一个不好的解决方案!为什么不使用Youtube api v3?
mpgn 2014年

19

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

16

YouTube API版本3 启用并在2分钟内运行

如果您要做的就是搜索YouTube并获取相关属性:

  1. 找一个公共API - 这个链接给出了一个很好的方向

  2. 使用下面的查询字符串。出于示例目的,URL字符串中的搜索查询(用q =表示)是stackoverflow。然后,YouTube会向您发送JSON答复,然后您可以在其中解析缩略图,摘要,作者等。

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


16

另一个不错的选择是使用YouTube支持的oEmbed API。

您只需将YouTube URL添加到oEmbed URL中,您将收到一个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"
}

阅读文档以获取更多信息


15

采用:

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

以上是链接。使用它,您可以找到视频的YouTube特征。找到特征后,您可以获取所选类别的视频。之后,您可以使用Asaph的答案找到选定的视频图像。

尝试以上方法,您可以从YouTube API中解析所有内容。


14

我以这种方式使用了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禁止直接从其服务器添加图像。



13

只是要添加/扩展给定的解决方案,我觉得有必要注意,由于我自己遇到了这个问题,实际上可以通过一个HTTP请求获取多个YouTube视频内容,在本例中为缩略图:

使用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

YouTube数据API

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. 首先在Google API控制台上获取您的公共API密钥
  2. 根据API文档中 YouTube的缩略图参考,您需要访问snippet.thumbnails上的资源。
  3. 按照这种方式,您需要像这样用短语表示网址-

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

现在,将您的视频ID和API密钥更改为各自的video-id和api-key,其响应将是JSON输出,为您提供snippet变量缩略图中的四个链接(如果全部可用)。


13

您可以使用parse_urlparse_str从YouTube视频网址获取视频ID ,然后将其插入图像的预测网址。感谢YouTube提供的预测网址

$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://tools.tutsplanet.com/index.php/get-youtube-video-thumbnails


11

我为YouTube缩略图创建的一个简单的PHP函数,类型为

  • 默认
  • 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;}

10

如果您使用的是公共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';
    }

8

我认为他们是缩略图的很多答案,但我想添加其他一些URL以便非常轻松地获取YouTube缩略图。我只是从Asaph的答案中获取一些文字。以下是获取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

6
    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');

5

这是为手动使用而优化的最佳答案。不带分隔符的视频ID令牌可通过双击进行选择。

每个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.jpg2.jpg3.jpg)为:

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

对于缩略图的高质量版本,请使用类似于以下内容的URL:

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

缩略图还有一个中等质量的版本,使用类似于HQ的URL:

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。

或者,您可以使用YouTube数据API(v3)来获取缩略图。


4

方法1:

您可以找到带有JSON页面的YouTube视频的所有信息,该页面甚至包含“ 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

有关详细信息,您还可以参见如何使用idhttps://www.youtube.com/watch?v=mXde7q59BI8视频教程1 获取YouTube视频缩略图。

方法2:

使用YouTube图片链接, https://img.youtube.com/vi/ “ insert-youtube-video-id-here” /default.jpg

方法3:

使用浏览器源代码通过视频URL链接获取缩略图-转到视频源代码并搜索thumbnailurl。现在,您可以将此URL用作源代码:

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

有关详细信息,您还可以参阅如何使用idhttps://www.youtube.com/watch?v=9f6E8MeM6PI 视频教程2 获取YouTube视频缩略图。


链接https://www.youtube.com/watch?v=mXde7q59BI8https://www.youtube.com/watch?v=9f6E8MeM6PI(有效)断开。
彼得·莫滕森

youtube因其政策禁止该视频,希望本文对您有所帮助www.hzonesp.com/php/get-youtube-video-thumbnail-using-id/
哈桑·赛义德

3

采用 img.youtube.com/vi/YouTubeID/ImageFormat.jpg

此处的图像格式有所不同,例如默认,hqdefault,maxresdefault。


2

这是我仅需要客户端的无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
    },
    {})
}

1

这是我创建的用于获取缩略图的简单功能。很容易理解和使用。

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

仅当URL没有其他查询参数时,此方法才有效。
马可比

是的,所有的YouTube视频的格式为边看,你可以从浏览器复制链接
Sodruldeen穆斯塔法

如果您有另一个类似的参数&t=227s怎么办?
马可比

1
我理解您的意思,但是标准的youtube视频没有其他参数,但是当需要时,您可以在函数第一行之前过滤链接。您是否需要帮助来过滤链接以确保其忽略除所需链接之外的所有其他内容?
Sodruldeen Mustapha

1

将此代码保存在空的.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';
}

谢谢。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.