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

Rya*_*yan 2291 php youtube curl youtube-api youtube-data-api

如果我有YouTube视频网址,有没有办法使用PHP和cURL从YouTube API获取相关缩略图?

Asa*_*aph 4407

每个YouTube视频都有4个生成的图片.它们的格式如下:

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
Run Code Online (Sandbox Code Playgroud)

列表中的第一个是全尺寸图像,其他是缩略图图像.(即之一的默认缩略图图像1.jpg,2.jpg,3.jpg)为:

https://img.youtube.com/vi/<insert-youtube-video-id-here>/default.jpg
Run Code Online (Sandbox Code Playgroud)

对于高质量版本的缩略图,请使用与此类似的网址:

https://img.youtube.com/vi/<insert-youtube-video-id-here>/hqdefault.jpg
Run Code Online (Sandbox Code Playgroud)

还有一个中等质量版本的缩略图,使用类似于总部的网址:

https://img.youtube.com/vi/<insert-youtube-video-id-here>/mqdefault.jpg
Run Code Online (Sandbox Code Playgroud)

对于缩略图的标准定义版本,请使用与此类似的URL:

https://img.youtube.com/vi/<insert-youtube-video-id-here>/sddefault.jpg
Run Code Online (Sandbox Code Playgroud)

对于缩略图的最大分辨率版本,请使用与此类似的URL:

https://img.youtube.com/vi/<insert-youtube-video-id-here>/maxresdefault.jpg
Run Code Online (Sandbox Code Playgroud)

所有上述网址都可通过http获取.此外,略短的主机名i3.ytimg.com可以代替img.youtube.com上面的示例网址.

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

  • @ clami219也是假的 - 显然有效(2015-04):https://i.ytimg.com/vi_webp/EhjdWfxjuHA/sddefault.webp,事实:**`sddefault`和`maxresdefault`并不总是可以获得**有些视频虽然有...... (58认同)
  • 这是某个正式记录的地方吗? (51认同)
  • @NickG`mqdefault`是16:9 (31认同)
  • 万一其他人犯了这个愚蠢的错误 - 你不能使用`http:// www.img.youtube.com`,只有`http:// img.youtube.com` (22认同)
  • 不保证存在较高分辨率的缩略图. (11认同)
  • `sddefault.jpg`和`maxresdefault.jpg`格式不再有效 (4认同)
  • @munissor不是真的,**0.jpg并不总是全尺寸**版......它可能是,但它不是一个规则...... (3认同)
  • @ jave.web @ clami219因为`sddefault`和`maxresdefault`并不总是可用.`mqdefault`适用于所有视频吗?没有2个黑色标记符(在顶部和底部)获取缩略图的最佳URL是什么? (3认同)
  • 虽然这适用于我过去几个小时尝试的大多数视频,但奇怪的是它并没有解决这个问题:https://img.youtube.com/vi/vJ5ZCBbAPk/0.jpg。但是 Youtube 似乎在网站上生成视频缩略图就好了。有什么想法吗? (3认同)
  • 如果有人想知道如何获取非默认的大小:我只是试过(并且它确实有效)格式名称用作前缀。因此,您可以获得`maxres2.jpg`,`hq2.jpg`,`hq3.jpg`等。 (3认同)
  • 此外,您可以使用以下主机名“ i.ytimg.com”,“ i1.ytimg.com”,“ i2.ytimg.com”,“ i3.ytimg.com”,“ i4.ytimg.com”或“ s”。 ytimg.com`。 (2认同)
  • 我刚刚尝试过,即使它们看起来相同,也有细微的差别。1 和 3 更接近匹配,因为它们的大小相同,但在一些地方不同。 (2认同)
  • @ jave.web你是对的,我刚刚遇到了那些没有这些格式的视频 (2认同)
  • 我注意到根据视频的年龄和上传的质量,有些图像不会是标准的预期尺寸。主要是“maxresdefault.jpg”。所以为了测试图像大小,我做了这个页面 http://www.myonlinelocation.com/YouTube_Play/VideoThumbnails/ (2认同)
  • 当视频 ID 中存在“-”符号(https://m.youtube.com/watch?v=-oCXMrICJgY 中的 -oCXMrICJgY )时,它不起作用,如何解决此问题? (2认同)
  • 我每次必须手动选择“ &lt;插入-youtube-视频-id-此处&gt;”。可以对其进行更新以便于使用吗?如果是“ https://img.youtube.com/vi/YOUTUBEVIDEOID/default.jpg”,则只需双击即可。 (2认同)
  • 有些视频没有缩略图。为什么? (2认同)

Sal*_*n A 385

您可以使用YouTube Data API检索视频缩略图,标题,说明,评分,统计信息等.API版本3需要密钥*.获取密钥并创建视频:列表请求:

https://www.googleapis.com/youtube/v3/videos?key=YOUR_API_KEY&part=snippet&id=VIDEO_ID
Run Code Online (Sandbox Code Playgroud)

示例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);
Run Code Online (Sandbox Code Playgroud)

产量

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)
  }
}
Run Code Online (Sandbox Code Playgroud)

*您不仅需要密钥,还可能会要求您提供结算信息,具体取决于您计划进行的API请求的数量.但是,每天有几百万个请求是免费的.

来源文章.

  • *jQuery和PHP示例必须使用json*...你能提供参考吗?此外,请求特定的API版本号(`v = 2`)负责API更改. (5认同)
  • 仅供参考:我没有更改代码以适应新的JSON结构.getJSON中的代码是错误的.你使用`jsonc`而不是`json`来获取getJSON.由于你的JSON结构错误,它失败了. (4认同)
  • 只有第一个例子可以使用`jsonc`.jQuery和PHP示例**必须**使用`json`.我已经更新了代码以符合新的JSON结构.我正在使用该代码,它正在工作.所以不要说没有阅读变化就行不通.谢谢! (3认同)
  • gdata调用不会返回maxresdefault.jpg是否适用于可用的视频,只有mq/hq/sd. (3认同)
  • API v3 的文档非常糟糕。他们为您提供示例代码,但“参考”部分非常缺乏细节。一些应该相对“明显”的事情似乎需要极端的解决方法。 (2认同)

AGM*_*GMG 233

亚萨说的是对的.但是,并非每个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   |
Run Code Online (Sandbox Code Playgroud)

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

| 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 |
Run Code Online (Sandbox Code Playgroud)

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

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

  • 您还可以通过官方YouTube链接获得相同的结果http://img.youtube.com/vi/mJ8tq8AnNis/mqdefault.jpg其中mJ8tq8AnNis是视频ID (4认同)
  • 有时某些不存在 - 例如http://i1.ytimg.com/vi/r5R8gSgedh4/maxresdefault.jpg是假的,但http://i1.ytimg.com/vi/r5R8gSgedh4/0.jpg是可以的. (3认同)
  • 工具“ YouTube视频信息生成器”当前无法使用。考虑编辑答案。 (2认同)
  • 建议**删除所有三个链接**。他们都没有产生任何我能看到的有用的东西。 (2认同)

Nar*_*ren 72

在YouTube API V3中,我们还可以使用这些网址获取缩略图...它们会根据质量进行分类.

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
Run Code Online (Sandbox Code Playgroud)

并获得最大分辨率..

https://i1.ytimg.com/vi/<insert-youtube-video-id-here>/maxresdefault.jpg
Run Code Online (Sandbox Code Playgroud)

在第一个答案中,这些URL相对于URL的一个优点是这些URL不会被防火墙阻止.

  • @ Lion789这些URL在放入img标签时工作正常.问题可能是错误的视频ID或请求的解决方案可能无法使用但你不会得到404这些错误.请检查网址的网址img标签. (4认同)
  • 这些图像是否被放置在img标签中并且应该正常工作,因为我试图将链接包含在正确的youtube视频ID中,并将它们放在img标签中但我一直在获取404 (2认同)
  • 是否确认在 API v2 停止后 URL 将继续工作? (2认同)

小智 51

如果您想从YouTube获取特定视频ID的最大图片,那么网址应如下所示:

http://i3.ytimg.com/vi/SomeVideoIDHere/0.jpg
Run Code Online (Sandbox Code Playgroud)

使用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);
Run Code Online (Sandbox Code Playgroud)

  • 我找到了一个例子,其中0.jpg的分辨率为480x360,而maxresdefault.jpg的分辨率为1280x720 (2认同)

LuT*_*uTz 43

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

https://i.ytimg.com/vi_webp/<video id>/mqdefault.webp
Run Code Online (Sandbox Code Playgroud)

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

https://i.ytimg.com/vi/<video id>/mqdefault.jpg
Run Code Online (Sandbox Code Playgroud)

此外,如果您需要使用非缩放版本maxresdefault而不是mqdefault.

注意:如果您打算使用,我不确定宽高比maxresdefault.

  • 这不适用于许多视频。例如:http://i.ytimg.com/vi_webp/mJ8tq8AnNis/mqdefault.webp (3认同)
  • @NickG:如果删除`_webp`并将扩展名更改为`.jpg`,它会起作用.工作示例:http://i.ytimg.com/vi/mJ8tq8AnNis/mqdefault.jpg,我不确定宽高比. (2认同)

Hen*_*son 32

我的功能是只从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;
}
Run Code Online (Sandbox Code Playgroud)


Ibr*_*aya 30

YouTube Data API v3中,您可以使用videos-> list功能获取视频缩略图.从snippet.thumbnails.(键),您可以选择默认,中等或高分辨率缩略图,并获取其宽度,高度和URL.

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

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


key*_*rdP 29

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

  • 我无法使用 simpleXML 把它弄出来。这很难! (2认同)

小智 23

// 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;
Run Code Online (Sandbox Code Playgroud)

  • 这是一个糟糕的解决方案!为什么不使用Youtube api v3? (2认同)

lif*_*der 17

YouTube由谷歌拥有,谷歌喜欢为不同的屏幕尺寸提供合理数量的图像,因此它的图像以不同的尺寸存储,下面是他喜欢的缩略图的示例

低质量缩略图:

http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/sddefault.jpg
Run Code Online (Sandbox Code Playgroud)

中等质量缩略图:

http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/mqdefault.jpg
Run Code Online (Sandbox Code Playgroud)

高品质缩略图:

http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/hqdefault.jpg
Run Code Online (Sandbox Code Playgroud)

最高质量缩略图:

http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/maxresdefault.jpg
Run Code Online (Sandbox Code Playgroud)


Chr*_*ris 15

YOUTUBE API版本3**2分钟内启动和运行**

如果你想要做的就是搜索YouTube并获得相关的属性:

  1. 获取PUBLIC API - 此链接提供了良好的方向

2.使用以下查询字符串.出于示例目的,url字符串中的搜索查询(由q =表示)是 stackoverflow.然后,YouTube会向您发回json回复,然后您可以解析缩略图,代码段,作者等.

__PRE__


Nik*_*414 14

使用:

https://www.googleapis.com/youtube/v3/videoCategories?part=snippet,id&maxResults=100&regionCode=us&key=**Your YouTube ID**
Run Code Online (Sandbox Code Playgroud)

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

尝试上述方法,您可以解析YouTube API中的所有内容.


Cod*_*AIK 14

https://i.ytimg.com/vi/<--Video ID-->/default.jpg
Run Code Online (Sandbox Code Playgroud)

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

https://i.ytimg.com/vi/<--Video ID-->/mqdefault.jpg
Run Code Online (Sandbox Code Playgroud)

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

https://i.ytimg.com/vi/<--Video ID-->/hqdefault.jpg
Run Code Online (Sandbox Code Playgroud)

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

https://i.ytimg.com/vi/<--Video ID-->/sddefault.jpg
Run Code Online (Sandbox Code Playgroud)

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

https://i.ytimg.com/vi/<--Video ID-->/maxresdefault.jpg
Run Code Online (Sandbox Code Playgroud)

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


bla*_*ing 13

我以这种方式使用了YouTube缩略图:

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

请记住,YouTube阻止直接从其服务器中包含图像


And*_*erj 13

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

您只需将自己的YouTube网址添加到oEmbed网址,即可获得包含缩略图和嵌入的html代码的JSON.

例:

http://www.youtube.com/oembed?format=json&url=http%3A//youtube.com/watch%3Fv%3DDLzxrzFCyOs
Run Code Online (Sandbox Code Playgroud)

会给你:

{
  thumbnail_url: "https://i.ytimg.com/vi/DLzxrzFCyOs/hqdefault.jpg",
  width: 459,
  author_name: "AllKindsOfStuff",
  version: "1.0",
  author_url: "https://www.youtube.com/channel/UCLNd5EtH77IyN1frExzwPRQ",
  thumbnail_width: 480,
  type: "video",
  provider_url: "https://www.youtube.com/",
  html: "<iframe width="459" height="344" src="https://www.youtube.com/embed/DLzxrzFCyOs?feature=oembed" frameborder="0" allowfullscreen></iframe>",
  title: "Some title bla bla foo bar",
  thumbnail_height: 360,
  provider_name: "YouTube",
  height: 344
}
Run Code Online (Sandbox Code Playgroud)

阅读文档以获取更多信息.


Sco*_*dry 12

我找到了这个漂亮的工具,可让您使用放置在图像上方的YouTube播放按钮创建图像:


Hla*_*MAS 12

只是为了添加/扩展所给出的解决方案,我觉得有必要注意,因为我自己有这个问题,实际上可以通过一个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);

?>
Run Code Online (Sandbox Code Playgroud)


emo*_*iev 11

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

通过 YouTube 数据 API 获取缩略图

  1. 向Google Cloud Platform注册您的应用并激活YouTube Data 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
Run Code Online (Sandbox Code Playgroud)

无需 API 即可从直接链接获取缩略图

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

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

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

 https://i.ytimg.com/vi/<YOUTUBE_VIDEO_ID>/<SIZE_VALUE>.jpg 
Run Code Online (Sandbox Code Playgroud)

在哪里:

  • YOUTUBE_VIDEO_ID:您的视频ID
  • SIZE_VALUE :缩略图大小。该变量可以包含以下值:default, mqdefault, hqdefault, sddefault,maxresdefault

$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);
Run Code Online (Sandbox Code Playgroud)


小智 10

我为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;}
    
    Run Code Online (Sandbox Code Playgroud)


Rin*_*rge 10

您可以使用parse_url,parse_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/<?php print $ytID?>/maxresdefault.jpg";
print "https://img.youtube.com/vi/<?php print $ytID?>/mqdefault.jpg";
print "https://img.youtube.com/vi/<?php print $ytID?>/hqdefault.jpg";
print "https://img.youtube.com/vi/<?php print $ytID?>/sddefault.jpg";
print "https://img.youtube.com/vi/<?php print $ytID?>/default.jpg";
Run Code Online (Sandbox Code Playgroud)

您可以使用此工具生成YouTube缩略图

https://codeatools.com/get-youtube-video-thumbnails


小智 9

如果您正在使用公共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';
    }
Run Code Online (Sandbox Code Playgroud)


小智 9

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
Run Code Online (Sandbox Code Playgroud)

视频帧缩略图 (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
Run Code Online (Sandbox Code Playgroud)

最低质量缩略图 (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
Run Code Online (Sandbox Code Playgroud)

中等质量缩略图 (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
Run Code Online (Sandbox Code Playgroud)

高质量缩略图 (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
Run Code Online (Sandbox Code Playgroud)

标准质量缩略图 (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
Run Code Online (Sandbox Code Playgroud)

未缩放的缩略图分辨率

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
Run Code Online (Sandbox Code Playgroud)


Dak*_*ani 8

YouTube数据API

YouTube通过Data API(v3)为我们提供每个视频的4个生成图像,对于Ex -

  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文档中的Per YouTube缩略图参考,您需要访问snippet.thumbnails上的资源.
  3. 正如你所知,你需要像这样短语你的网址 -

    www.googleapis.com/youtube/v3/videos?part=snippet&id=&key __CODE__=__CODE__

现在将yourVideoId和yourApiKey更改为您的相应视频ID和api-key,其响应将是一个JSON输出,为您提供片段变量缩略图中的4个链接(如果全部可用).


Has*_*eed 7

Method 1:

You can find all information for a YouTube video with a JSON page which has even "thumbnail_url", http://www.youtube.com/oembed?format=json&url={your video URL goes here}

Like final URL look + PHP test code

$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);
Run Code Online (Sandbox Code Playgroud)

Output

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
Run Code Online (Sandbox Code Playgroud)

For details, you can also see How to get a YouTube video thumbnail using id or https://www.youtube.com/watch?v=mXde7q59BI8 video tutorial 1

Method 2:

Using YouTube image link, https://img.youtube.com/vi/"insert-youtube-video-id-here"/default.jpg

Method 3:

Using browser source code for getting thumbnail using video URL link -go to video source code and search for thumbnailurl. Now you can use this URL into your source code:

{img src="https://img.youtube.com/vi/"insert-youtube-video-id-here"/default.jpg"}
Run Code Online (Sandbox Code Playgroud)

For details you can also see How to get a YouTube video thumbnail using id or https://www.youtube.com/watch?v=9f6E8MeM6PI video tutorial 2


Kum*_*mar 6

我认为他们对缩略图有很多答案,但我想添加一些其他网址来轻松获取youtube缩略图.我只是从Asaph的回答中得到一些文字.以下是获取youtube缩略图的一些网址

https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/default.jpg
Run Code Online (Sandbox Code Playgroud)

对于高质量版本的缩略图,请使用与此类似的网址:

https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/hqdefault.jpg
Run Code Online (Sandbox Code Playgroud)

还有一个中等质量版本的缩略图,使用类似于总部的网址:

https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/mqdefault.jpg
Run Code Online (Sandbox Code Playgroud)

对于缩略图的标准定义版本,请使用与此类似的URL:

https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/sddefault.jpg
Run Code Online (Sandbox Code Playgroud)

对于缩略图的最大分辨率版本,请使用与此类似的URL:

https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/maxresdefault.jpg
Run Code Online (Sandbox Code Playgroud)

希望它在不久的将来帮助某人.


Nim*_*iya 5

    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');
Run Code Online (Sandbox Code Playgroud)


小智 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
Run Code Online (Sandbox Code Playgroud)

列表中的第一个是全尺寸图像,其他是缩略图。默认缩略图图像(即1.jpg, 2.jpg, 之一3.jpg)是:

https://img.youtube.com/vi/YOUTUBEVIDEOID/default.jpg
Run Code Online (Sandbox Code Playgroud)

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

https://img.youtube.com/vi/YOUTUBEVIDEOID/hqdefault.jpg
Run Code Online (Sandbox Code Playgroud)

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

https://img.youtube.com/vi/YOUTUBEVIDEOID/mqdefault.jpg
Run Code Online (Sandbox Code Playgroud)

对于缩略图的标准定义版本,请使用类似于以下内容的 URL:

https://img.youtube.com/vi/YOUTUBEVIDEOID/sddefault.jpg
Run Code Online (Sandbox Code Playgroud)

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

https://img.youtube.com/vi/YOUTUBEVIDEOID/maxresdefault.jpg
Run Code Online (Sandbox Code Playgroud)

上述所有 URL 也可通过 HTTP 访问。此外,稍短的主机名i3.ytimg.com可以代替img.youtube.com上面的示例 URL。

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


Ali*_*Ali 5

将此代码保存在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';
}
Run Code Online (Sandbox Code Playgroud)

有一些缩略图保证存在:

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
Run Code Online (Sandbox Code Playgroud)

谢谢。