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

How do I get a YouTube video thumbnail from the YouTube API?

提问人:CodeOverload 提问时间:1/15/2010 最后编辑:stvarCodeOverload 更新时间:9/27/2023 访问量:2009731

问:

如果我有一个 YouTube 视频 URL,有什么方法可以使用 PHP 和 cURL 从 YouTube API 获取相关的缩略图?

php curl youtube-data-api

评论

1赞 squarecandy 5/10/2018
以下是我创建的一些 PHP 函数,这些函数基于本页上的许多好答案,在不对 API 执行 ping 操作的情况下从 URL 方法中获取最佳缩略图: gist.github.com/squarecandy/30ec9f6779c0e8cdf12e337c665d96c5
0赞 Md. Suhel Arman Khan 5/23/2023
从现在开始,您需要使用它从YouTube视频ID中提取缩略图 img.youtube.com/vi{VIDEO_ID} / maxresdefault.jpg

答:

5350赞 Asaph 1/15/2010 #1

每个 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 获得。此外,稍短的主机名可以代替上面的示例 URL。i3.ytimg.comimg.youtube.com

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

评论

55赞 Ciaran Phillips 11/5/2013
以防万一其他人犯了这个愚蠢的错误 - 你不能使用 ,只有http://www.img.youtube.comhttp://img.youtube.com
16赞 clami219 3/31/2015
sddefault.jpg并且格式不再有效maxresdefault.jpg
8赞 jave.web 4/14/2015
@munissor这不是真的,0.jpg并不总是全尺寸版本......可能是,但这不是规则......
13赞 Ne AS 11/9/2016
@jave.web @clami219 由于 和 并不总是可用。是否适用于所有视频?在没有 2 个黑色预兆(顶部和底部)的情况下获取缩略图的最佳 URL 是什么?sddefaultmaxresdefaultmqdefault
18赞 Hernan 2/10/2019
如果有人想知道如何获取非默认值的大小:我刚刚尝试(它确实有效)格式名称用作前缀。所以你可以得到、、、等。maxres2.jpghq2.jpghq3.jpg
34赞 keyboardP 1/15/2010 #2

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

433赞 Salman A 1/21/2010 #3

您可以使用 YouTube Data 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赞 mauris 6/24/2012
仅供参考:我没有更改代码以适应新的JSON结构。getJSON 中的代码是错误的。您使用了 getJSON 而不是 getJSON。它失败了,因为你的 JSON 结构错误。jsoncjson
5赞 mauris 6/24/2012
只有第一个示例可以使用 .jQuery 和 PHP 示例必须使用 .我已经更新了代码以符合新的JSON结构。我现在正在使用该代码,并且它正在实时工作。因此,不要说它不工作而不阅读更改。谢谢!jsoncjson
7赞 Salman A 6/24/2012
jQuery 和 PHP 示例必须使用 json...你能提供参考吗?此外,请求特定的 API 版本号 () 会处理 API 更改。v=2
4赞 Aaron 5/21/2013
gdata 调用不返回 maxresdefault.jpg 是否可用于可用的视频,仅返回 mq/hq/sd。
2赞 CashCow 2/3/2015
API v3 的文档记录非常糟糕。它们为您提供了示例代码,但“参考”部分非常缺乏详细信息。一些应该相对“明显”的事情似乎需要极端的解决方法。
63赞 PoorBoy 12/22/2010 #4

如果您希望从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);

评论

6赞 Nico Haase 11/18/2015
我找到了一个示例,其中 0.jpg 的分辨率为 480x360,而 maxresdefault.jpg 的分辨率为 1280x720
34赞 Ibrahim Ulukaya 5/29/2013 #5

YouTube Data API v3 中,您可以使用 videos->list 函数获取视频的缩略图。来自 snippet.thumbnails.(key),您可以选择默认、中等或高分辨率缩略图,并获取其宽度、高度和 URL。

您还可以使用缩略图>集功能更新缩略图

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

评论

1赞 Adonis K. Kakoulidis 10/20/2014
我想这是正确的方法,因为它来自 youtube api 的 Google Dev 关系成员
29赞 Mahendra Tyagi 7/4/2013 #6
// 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赞 mpgn 7/29/2014
这是一个糟糕的解决方案!为什么不使用 Youtube api v3 ?
94赞 Naren 8/23/2013 #7

在 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赞 Lion789 11/2/2013
这些图像是否应该放置在 img 标签中并且应该可以工作,因为我正在尝试包含带有正确 youtube 视频 ID 的链接并将它们放在 img 标签中,但我一直得到 404
5赞 Naren 11/4/2013
@Lion789 这些 URL 在放置在 img 标签中时工作正常。问题可能是视频 ID 错误,或者请求的分辨率可能不可用,但您不会收到带有这些错误的 404。请检查 img 标签的 url。
2赞 Daniele B 4/14/2015
是否确认 API v2 停止后 url 将继续工作?
1赞 Naren 4/15/2015
@DanieleB 这些 URL 仍然有效。您知道如何检查这些 URL 在 API v2 之后是否有效吗?
348赞 AGMG 12/12/2013 #8

亚萨说的是对的。但是,并非每个 YouTube 视频都包含所有九个 缩略 图。此外,缩略图的图像大小取决于视频(数字 以下是基于一个)。有一些缩略图可以保证存在:

宽度 高度 网址
120 90 https://i.ytimg.com/vi//1.jpg
120 90 https://i.ytimg.com/vi//2.jpg
120 90 https://i.ytimg.com/vi//3.jpg
120 90 https://i.ytimg.com/vi//默认值.jpg
320 180 https://i.ytimg.com/vi//mq1.jpg
320 180 https://i.ytimg.com/vi//mq2.jpg
320 180 https://i.ytimg.com/vi//mq3.jpg
320 180 https://i.ytimg.com/vi//mqdefault.jpg
480 360 https://i.ytimg.com/vi//0.jpg
480 360 https://i.ytimg.com/vi//HQ1.jpg
480 360 https://i.ytimg.com/vi//HQ2.jpg
480 360 https://i.ytimg.com/vi//总部3.jpg
480 360 https://i.ytimg.com/vi//hq默认值.jpg

此外,其他一些缩略图可能存在,也可能不存在。他们的存在是 可能基于视频是否高质量。

宽度 高度 网址
640 480 https://i.ytimg.com/vi//SD1.jpg
640 480 https://i.ytimg.com/vi//SD2.jpg
640 480 https://i.ytimg.com/vi//SD3.jpg
640 480 https://i.ytimg.com/vi//sd默认.jpg
1280 720 https://i.ytimg.com/vi//HQ720.jpg
1920 1080 https://i.ytimg.com/vi//maxresdefault.jpg

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

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

评论

6赞 Ragaisis 10/7/2014
您也可以使用官方 youtube 链接 img.youtube.com/vi/mJ8tq8AnNis/mqdefault.jpg 获得相同的结果,其中 mJ8tq8AnNis 是视频 ID
5赞 giovannipds 3/23/2017
“YouTube视频信息生成器”工具目前不起作用。考虑编辑答案。
2赞 Bob Stein 3/1/2020
建议删除所有三个链接。它们都没有产生任何我能看到的有用的东西。
0赞 Mattwmaster58 11/23/2021
FWIW,YouTube 前端硬编码为 320x180mqdefault.jpg
38赞 Henrik Albrechtsson 12/18/2013 #9

我做了一个功能,只从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;
}

评论

0赞 Youssef Boudaya 1/6/2021
我在 laravel 控制器 get_headers() 中得到这个:此函数只能用于 URL
0赞 Zippp 6/22/2021
仅供参考 - 似乎它不获取现有图像,而是获取第一个可用的图像。
19赞 Chris 3/15/2014 #10

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赞 Nikh1414 4/3/2014 #11

用:

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

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

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

16赞 blacksunshineCoding 5/6/2015 #12

我以这种方式使用 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 会阻止直接从其服务器包含图像。

66赞 LuTz 6/8/2015 #13

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

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

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

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

此外,如果您需要未缩放的版本,请使用 代替 .maxresdefaultmqdefault

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

评论

3赞 NickG 7/8/2016
这不适用于许多视频。例如:i.ytimg.com/vi_webp/mJ8tq8AnNis/mqdefault.webp
4赞 LuTz 7/10/2016
@NickG :如果您删除扩展名并将其更改为 ,它就会起作用。工作示例: i.ytimg.com/vi/mJ8tq8AnNis/mqdefault.jpg,我不确定纵横比。_webp.jpg
0赞 Akshay K Nair 8/23/2021
谢谢。有没有办法没有黑条?img.youtube.com/vi_webp/dQw4w9WgXcQ/sddefault.webp 不断返回带有黑条的图像。sddefault
13赞 Arun Yokesh 9/24/2015 #14

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

  • 违约
  • HQDEFAULT默认
  • mqdefault
  • sd默认
  • 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;}
35赞 life evader 12/2/2015 #15

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

评论

0赞 Cowdozer 9/20/2023
sddefault.jpg实际上质量比.提高质量的顺序是.hqdefault.jpgdefault, mqdefault, hqdefault, sddefault, maxresdefault
14赞 Hlawuleka MAS 5/8/2016 #16

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

使用 Rest 客户端(在本例中为 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);

?>
11赞 Harvey Connor 5/18/2016 #17

如果您使用的是公共 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';
    }
9赞 Kumar 10/24/2016 #18

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

对于缩略图的最高分辨率版本,请使用类似于以下内容的 URL:

https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/maxresdefault.jpg
19赞 Andresch Serj 3/8/2017 #19

另一个不错的选择是使用 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"
}

有关详细信息,请阅读文档。

14赞 Daksh M. 3/22/2017 #20

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. 根据这一点,你需要像这样表达你的 URL -

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

现在,将您的视频 ID 和 API 密钥更改为相应的 video-id 和 api-key,其响应将是一个 JSON 输出,为您提供片段变量缩略图中的四个链接(如果所有链接都可用)。

6赞 Nimesh Vagadiya 10/26/2017 #21
    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赞 user6798019 2/25/2018 #22

这是针对手动使用优化的最佳答案。不带分隔符的视频 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 获得。此外,稍短的主机名可以代替上面的示例 URL。i3.ytimg.comimg.youtube.com

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

8赞 Hassan Saeed 4/10/2018 #23

方法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

有关详细信息,您还可以参阅如何使用 id 获取 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链接获取缩略图 - 转到视频源代码并搜索 thumbnailURL。 现在,您可以将此 URL 用于 您的源代码:

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

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

评论

0赞 Peter Mortensen 7/11/2019
链接并(有效地)断开。https://www.youtube.com/watch?v=mXde7q59BI8https://www.youtube.com/watch?v=9f6E8MeM6PI
0赞 Hassan Saeed 7/18/2019
YouTube 因其政策而禁止此视频,我希望本文对您有所帮助 www.hzonesp.com/php/get-youtube-video-thumbnail-using-id/
0赞 Rajesh 6/14/2020
方法 1 易于实现
3赞 Sodruldeen Mustapha 4/23/2018 #24

这是我创建的用于获取缩略图的简单函数。它易于理解和使用。

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

评论

0赞 Ma Kobi 5/3/2018
仅当 url 没有其他查询参数时,这才有效。
0赞 Sodruldeen Mustapha 5/4/2018
是的,所有 YouTube 视频在观看时都遵循该格式,您可以从浏览器复制链接
0赞 Ma Kobi 5/4/2018
如果您有其他参数,例如怎么办?&t=227s
1赞 Sodruldeen Mustapha 5/4/2018
我理解你的意思,但标准的 YouTube 视频没有其他参数,但在需要时,您可以在函数的第一行之前过滤链接。您是否需要帮助来过滤链接以确保它忽略除所需内容之外的所有其他内容?
15赞 Duke 5/2/2018 #25

您可以使用 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://youtube-thumbnail-tool.com

评论

0赞 Akshay K Nair 4/8/2021
有没有办法获取用户的 YouTube Data API 密钥(身份验证后)
3赞 shpwebhost 8/29/2018 #26

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

这里的图像格式不同,如 default、hqdefault、 maxresdefault。

4赞 catamphetamine 9/23/2018 #27

这是我的客户端专用,无需 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
    },
    {})
}
5赞 Ali Han 7/28/2019 #28

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

谢谢。

23赞 Mark Fulghum 9/15/2020 #29

YouTube 正在提供来自 2 台服务器的缩略图。您只需要将<YouTube_Video_ID_HERE>替换为您自己的 YouTube 视频 ID。如今,由于图像尺寸小,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

最低质量缩略图 (120x90)

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

中等质量缩略图 (320x180)

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

标准质量缩略图 (640x480)

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
13赞 CodAIK 1/4/2022 #30
https://i.ytimg.com/vi/<--Video ID-->/default.jpg

图像尺寸 重量 120px 高度 90px

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

图像尺寸 重量 320px 高度 180px

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

图像尺寸 重量 480px 高度 360px

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

图像尺寸 重量 640px 高度 480px

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

图像尺寸 重量 1280px 高度 720px

评论

0赞 imrok 2/19/2022
效果很好,但是,你能提供来源吗?
10赞 emrdev 3/28/2022 #31

虽然已经有很多答案,但对于新访客,我将留下两个获取缩略图的选项。

通过 YouTube Data API 获取缩略图

  1. 将您的应用注册到 Google Cloud Platform 并激活 YouTube Data API v3
  2. 在 Credentials (凭据) 部分中创建 API 密钥。这样,您将获得访问 API 的密钥
  3. 并发送有关视频信息的请求,包括获取缩略图。

$api_key = 'YOUR_API_KEY';
$youtube_video_id = 'jNQXAC9IVRw';
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://www.googleapis.com/youtube/v3/videos?key='.$api_key.'&part=snippet&id='.$youtube_video_id,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => '',
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => 'GET',
)); 

$response = curl_exec($curl); 
curl_close($curl);

$response = json_decode($response,true); 

print_r($response); // result with video information and thumbnails

在没有 API 的情况下从直接链接获取缩略图

除了 API 之外,还可以通过直接链接获取缩略图,如下所示:

https://i.ytimg.com/vi/jNQXAC9IVRw/hqdefault.jpg

让我们详细考虑一下这个选项:

 https://i.ytimg.com/vi/<YOUTUBE_VIDEO_ID>/<SIZE_VALUE>.jpg 

哪里:

  • YOUTUBE_VIDEO_ID:您的视频ID
  • SIZE_VALUE:缩略图大小。变量可以包含以下值:、、、、defaultmqdefaulthqdefaultsddefaultmaxresdefault

$youtube_video_id = 'jNQXAC9IVRw';
$size = 'hqdefault';

$curl = curl_init();
curl_setopt_array($curl, array(
    CURLOPT_URL => "https://i.ytimg.com/vi/{$youtube_video_id}/{$size}.jpg",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => '',
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => 'GET',
));
$response = curl_exec($curl);
curl_close($curl);

// Write the file
$handle = fopen("image/filename.jpg", 'w'); // set your directory and filename
fwrite($handle, $response);
fclose($handle);