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

如果我有一个YouTube的视频URL,有没有办法使用PHP和cURL从YouTubeAPI获取相关的缩略图?

1932270 次浏览

每个YouTube视频有四个生成的图像。它们的可预测格式如下:

https://img.youtube.com/vi/<insert-youtube-video-id-here>/0.jpghttps://img.youtube.com/vi/<insert-youtube-video-id-here>/1.jpghttps://img.youtube.com/vi/<insert-youtube-video-id-here>/2.jpghttps://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可以代替上面示例URL中的img.youtube.com

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

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

您可以使用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请求数量要求您提供计费信息。但是,每天有几千个请求是免费的。

来源文章

如果您想要从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 filefwrite($fp, $rawdata);
// And then close it.fclose($fp);

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

您还可以使用拇指指甲->设置功能更新缩略图。

例如,您可以查看YouTubeAPI示例项目。(php的。)

// 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 IDif ($urls['host'] == 'youtu.be') :
$imgPath = ltrim($urls['path'],'/');
//Expect the URL to be http://www.youtube.com/embed/abcdelseif (strpos($urls['path'],'embed') == 1) :
$imgPath = end(explode('/',$urls['path']));
//Expect the URL to be abcd onlyelseif (strpos($url,'/') === false):
$imgPath = $url;
//Expect the URL to be http://www.youtube.com/watch?v=abcdelse :
parse_str($urls['query']);
$imgPath = $v;
endif;

在YouTubeAPI V3中,我们还可以使用这些URL来获取缩略图……它们根据质量进行分类。

https://i1.ytimg.com/vi/<insert-youtube-video-id-here>/default.jpg -   defaulthttps://i1.ytimg.com/vi/<insert-youtube-video-id-here>/mqdefault.jpg - mediumhttps://i1.ytimg.com/vi/<insert-youtube-video-id-here>/hqdefault.jpg - highhttps://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不会被防火墙阻止。

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

Width | Height | URL------|--------|----120   | 90     | https://i.ytimg.com/vi/<VIDEO ID>/1.jpg120   | 90     | https://i.ytimg.com/vi/<VIDEO ID>/2.jpg120   | 90     | https://i.ytimg.com/vi/<VIDEO ID>/3.jpg120   | 90     | https://i.ytimg.com/vi/<VIDEO ID>/default.jpg320   | 180    | https://i.ytimg.com/vi/<VIDEO ID>/mq1.jpg320   | 180    | https://i.ytimg.com/vi/<VIDEO ID>/mq2.jpg320   | 180    | https://i.ytimg.com/vi/<VIDEO ID>/mq3.jpg320   | 180    | https://i.ytimg.com/vi/<VIDEO ID>/mqdefault.jpg480   | 360    | https://i.ytimg.com/vi/<VIDEO ID>/0.jpg480   | 360    | https://i.ytimg.com/vi/<VIDEO ID>/hq1.jpg480   | 360    | https://i.ytimg.com/vi/<VIDEO ID>/hq2.jpg480   | 360    | https://i.ytimg.com/vi/<VIDEO ID>/hq3.jpg480   | 360    | https://i.ytimg.com/vi/<VIDEO ID>/hqdefault.jpg

此外,其他一些缩略图可能存在也可能不存在。它们的存在是#36825;视视频质量的好坏而定。

Width | Height | URL------|--------|----640   | 480    | https://i.ytimg.com/vi/<VIDEO ID>/sd1.jpg640   | 480    | https://i.ytimg.com/vi/<VIDEO ID>/sd2.jpg640   | 480    | https://i.ytimg.com/vi/<VIDEO ID>/sd3.jpg640   | 480    | https://i.ytimg.com/vi/<VIDEO ID>/sddefault.jpg1280  | 720    | https://i.ytimg.com/vi/<VIDEO ID>/hq720.jpg1920  | 1080   | https://i.ytimg.com/vi/<VIDEO ID>/maxresdefault.jpg

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

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

我做了一个函数,只从YouTube获取现有图像

function youtube_image($id) {$resolution = array ('maxresdefault','sddefault','mqdefault','hqdefault','default');
for ($x = 0; $x < sizeof($resolution); $x++) {$url = '//img.youtube.com/vi/' . $id . '/' . $resolution[$x] . '.jpg';if (get_headers($url)[0] == 'HTTP/1.0 200 OK') {break;}}return $url;}

我发现了这个漂亮的工具,它允许您创建图像,并在图像上放置YouTube播放按钮:

YouTubeapi版本32分钟内启动并运行

如果您只想搜索YouTube并获取关联属性:

  1. 得到一个公共api--这个链接提供了一个很好的方向

  2. 使用下面的查询字符串。例如,URL字符串中的搜索查询(由q=表示)为stackoverflow。然后YouTube将向您发送一个JSON回复,然后您可以在其中解析缩略图、片段、作者等。

    https://www.googleapis.com/youtube/v3/search?part=id%2Csnippet&; max的结果=50&q=stackoverflow&key=YOUR_API_KEY_HERE

用途:

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

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

尝试上述方法,您可以解析YouTubeapi中的所有内容。

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

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

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

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

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

此外,如果您需要未缩放的版本,请使用maxresdefault而不是mqdefault

注意:如果您计划使用maxresdefault,我不确定长宽比。

我为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;}

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

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

使用Rest Client,在本例中为HTTPFUL,您可以执行以下操作:

<?phpheader("Content-type", "application/json");
//download the httpfull.phar file from http://phphttpclient.cominclude("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);
?>

如果您使用的是公共API,最好的方法是使用if语句。

如果视频是公开的或未列出的,则使用URL方法设置缩略图。如果视频是私有的,您可以使用API获取缩略图。

<?phpif($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';}

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

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

您只需将YouTubeURL添加到oEmbedeURL,您将收到一个JSON,其中包括缩略图和用于嵌入的超文本标记语言代码。

示例:

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"}

阅读留档更多信息

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. 首先在谷歌API控制台获取您的公共API密钥。
  2. 根据API留档中YouTube的缩略图引用,您需要访问snippet.thumbnails.上的资源
  3. 根据这个,你需要这样表达你的URL-

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

Now change your video ID and your API key to the your respective video-id and api-key and its response will be a JSON output providing you the four links in the thumbnails of snippet variable (if all are available).

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

这是为手动使用优化的最高答案。没有分隔符的视频ID令牌可以双击选择。

每个YouTube视频有四个生成的图像。它们的可预测格式如下:

https://img.youtube.com/vi/YOUTUBEVIDEOID/0.jpghttps://img.youtube.com/vi/YOUTUBEVIDEOID/1.jpghttps://img.youtube.com/vi/YOUTUBEVIDEOID/2.jpghttps://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可以代替上面示例URL中的img.youtube.com

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

方法一:

你可以找到一个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 480public 'version' => string '1.0' (length=3)public 'thumbnail_width' => int 480public '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 270public '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

方法二:

使用YouTube图像链接,https://img.youtube.com/vi/"插入YouTube视频"/default.jpg

方法三:

使用浏览器源代码使用视频URL链接获取缩略图-转到视频源代码并搜索拇指链接。现在您可以将此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

这是我为获取缩略图创建的一个简单函数。它很容易理解和使用。

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

您可以使用parse_urlparse_str从YouTube视频URL中获取视频ID,然后插入到图像的预测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

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

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

这是我的仅客户端不需要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/My2FRPA3Gf8export default{parse: async function(url){// Get video ID.let idconst 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 = rejectimage.src = url})}

实用程序url.js

// Only on client side.export function parseURL(url){const link = document.createElement('a')link.href = urlreturn link}
export function parseQueryString(queryString){return queryString.split('&').reduce((query, part) =>{const [key, value] = part.split('=')query[decodeURIComponent(key)] = decodeURIComponent(value)return query},{})}

将此代码保存在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.jpg120   | 90     | https://i.ytimg.com/vi/<VIDEO ID>/2.jpg120   | 90     | https://i.ytimg.com/vi/<VIDEO ID>/3.jpg120   | 90     | https://i.ytimg.com/vi/<VIDEO ID>/default.jpg320   | 180    | https://i.ytimg.com/vi/<VIDEO ID>/mq1.jpg320   | 180    | https://i.ytimg.com/vi/<VIDEO ID>/mq2.jpg320   | 180    | https://i.ytimg.com/vi/<VIDEO ID>/mq3.jpg320   | 180    | https://i.ytimg.com/vi/<VIDEO ID>/mqdefault.jpg480   | 360    | https://i.ytimg.com/vi/<VIDEO ID>/0.jpg480   | 360    | https://i.ytimg.com/vi/<VIDEO ID>/hq1.jpg480   | 360    | https://i.ytimg.com/vi/<VIDEO ID>/hq2.jpg480   | 360    | https://i.ytimg.com/vi/<VIDEO ID>/hq3.jpg480   | 360    | https://i.ytimg.com/vi/<VIDEO ID>/hqdefault.jpg

谢了

YouTube从2台服务器提供缩略图。您只需要将替换为您自己的YouTube视频ID。由于图像尺寸小,现在webP是快速加载图像的最佳格式。

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

示例是https://i.ytimg.com服务器只是因为它更短,没有其他特殊原因。您可以同时使用两者。

播放器背景缩略图(480x360):

WebPhttps://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/0.webp
JPGhttps://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/0.jpg

视频帧缩略图(120x90)

WebP:Start: https://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/1.webpMiddle: https://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/2.webpEnd: https://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/3.webp
JPG:Start: https://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/1.jpgMiddle: https://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/2.jpgEnd: https://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/3.jpg

最低质量的缩略图(120x90)

WebPhttps://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/default.webp
JPGhttps://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/default.jpg

中等质量缩略图(320x180)

WebPhttps://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/mqdefault.webp
JPGhttps://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/mqdefault.jpg

高质量缩略图(480x360)

WebPhttps://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/hqdefault.webp
JPGhttps://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/hqdefault.jpg

标准质量缩略图(640x480)

WebPhttps://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/sddefault.webp
JPGhttps://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/sddefault.jpg

缩略图分辨率

WebPhttps://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/maxresdefault.webp
JPGhttps://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/maxresdefault.jpg
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

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

通过YouTube数据API获取缩略图

  1. 使用谷歌云平台注册您的应用程序并激活YouTube数据API v3
  2. 在凭据部分创建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 filenamefwrite($handle, $response);fclose($handle);