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


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


2025
2018-01-14 23:34


起源


下面是我创建的一些PHP函数,用于根据此页面上的许多好答案,从URL方法中获取最佳缩略图,而无需ping API: gist.github.com/squarecandy/30ec9f6779c0e8cdf12e337c665d96c5 - squarecandy


答案:


每个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

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

https://img.youtube.com/vi/<insert-youtube-video-id-here>/default.jpg

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

https://img.youtube.com/vi/<insert-youtube-video-id-here>/hqdefault.jpg

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

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

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

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


3883
2018-01-14 23:40



你如何获得高清晰度图像(如果有的话)? - trusktr
以防万一其他人犯这个愚蠢的错误 - 你不能使用 http://www.img.youtube.com, 只要 http://img.youtube.com - Ciaran Phillips
@NickG mqdefault 是16:9 - tomtastico
这是某个正式记录的地方吗? - bjunix
@ clami219也是假的 - 显然是有效的(2015-04): i.ytimg.com/vi_webp/EhjdWfxjuHA/sddefault.webp, 真相: sddefault 和 maxresdefault 并不总是可以获得 有些视频虽然有...... - jave.web


您可以使用 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请求的数量。但是,每天几百万的请求是免费的。

来源文章


358
2018-01-21 09:58



仅供参考:我没有更改代码以适应新的JSON结构。你的getJSON中的代码是错误的。你用过 jsonc 代替 json 对于getJSON。由于你的JSON结构错误,它失败了。 - mauris
只有第一个例子可以使用 jsonc。 jQuery和PHP示例 必须 使用 json。我已经更新了代码以符合新的JSON结构。我正在使用代码,它正在工作。所以不要说没有阅读变化就行不通。谢谢! - mauris
jQuery和PHP示例必须使用json你能提供参考吗?另外,请求特定的API版本号(v=2)负责API更改。 - Salman A
gdata调用不会返回maxresdefault.jpg是否可用于可用的视频,只有mq / hq / sd。 - Aaron
这在实际的api v3中不起作用 - Mario Gonzales Flores


亚萨说的是对的。但是,并非每个YouTube视频都包含所有九个缩略图,但每个视频都有七个缩略图。他们是:

(图像大小取决于视频。)

  • 播放器背景缩略图(480x360像素)
    https://i1.ytimg.com/vi/G0wGs3useV8/0.jpg

  • 开始缩略图(120x90像素)
    https://i1.ytimg.com/vi/G0wGs3useV8/1.jpg

  • 中间缩略图(120x90像素)
    https://i1.ytimg.com/vi/G0wGs3useV8/2.jpg

  • 结束缩略图(120x90像素)
    https://i1.ytimg.com/vi/G0wGs3useV8/3.jpg

  • 高品质缩略图(480x360像素)
    https://i1.ytimg.com/vi/G0wGs3useV8/hqdefault.jpg

  • 中等质量缩略图(320x180像素)
    https://i1.ytimg.com/vi/G0wGs3useV8/mqdefault.jpg

  • 普通质量缩略图(120x90像素)
    https://i1.ytimg.com/vi/G0wGs3useV8/default.jpg

此外,接下来的两个缩略图可能存在也可能不存在。对于HQ视频 它们存在。

  • 标准清晰度缩略图(640x480像素)
    https://i1.ytimg.com/vi/G0wGs3useV8/sddefault.jpg

  • 最大分辨率缩略图(1920x1080像素)
    https://i1.ytimg.com/vi/G0wGs3useV8/maxresdefault.jpg

您可以获取JavaScript和PHP脚本来检索缩略图和其他 YouTube中的信息

也使用该工具 YouTube视频信息生成器 得到所有的 提交视频的YouTube视频信息 网址 或视频ID。


199
2017-12-12 11:17



您还可以使用官方YouTube链接获得相同的结果 img.youtube.com/vi/mJ8tq8AnNis/mqdefault.jpg 其中mJ8tq8AnNis是视频ID - Ragaisis
有时某些不存在 - i1.ytimg.com/vi/r5R8gSgedh4/maxresdefault.jpg 虽然是虚假的 i1.ytimg.com/vi/r5R8gSgedh4/0.jpg 好的例如。 - NoBugs
感谢您发布此内容。你有这个数据的来源吗?这是正确的,但我想在Youtube / Google上找到一些链接,但是找不到。 - Jonathan Vanasco
@JonathanVanasco,对不起。如果你的意思是确切内容的官方资源,我不知道。我不认为从他们的角度出版这样的东西的目的。 - AGMG
如果我已经将其他东西设置为缩略图,以任何方式获得更高分辨率的1.jpg? - dietbacon


在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

并获得最大分辨率..

https://i1.ytimg.com/vi/<insert-youtube-video-id-here>/maxresdefault.jpg

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


66
2017-08-23 10:23



这些图像是否被放置在img标签中并且应该正常工作,因为我试图将链接包含在正确的youtube视频ID中并将它们放在img标签内但我一直在获取404 - Lion789
@ Lion789这些URL在放入img标签时工作正常。问题可能是错误的视频ID或请求的解决方案可能无法使用但你不会得到404这些错误。请检查网址的网址。 img标签。 - Naren
在API v2停止后,是否确认网址将继续有效? - Daniele B
@DanieleB这些URL仍然有效。您知道如何在API v2之后检查这些URL是否有效吗? - Naren


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

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

46
2017-12-22 05:44



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


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

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

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

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

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

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


39
2018-06-08 11:59



.webp格式在Firefox中不起作用 - Guilherme Carlos
在那种情况下使用 https://i.ytimg.com/vi/<video id>/mqdefault.jpg。 - LuTz
谢谢,我一直在寻找缩略图,没有HD(1920x1080)的黑棒,这对我来说很有用!天才@LuTz! - Aaron Belchamber
这不适用于许多视频。例如: i.ytimg.com/vi_webp/mJ8tq8AnNis/mqdefault.webp - NickG
@NickG:如果删除它会有效 _webp 并将扩展名更改为 .jpg。工作范例: i.ytimg.com/vi/mJ8tq8AnNis/mqdefault.jpg ,我不确定纵横比。 - LuTz


我的功能是只从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;
}

27
2017-12-18 10:29





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

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

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


26
2018-05-28 17:45



我想这是正确的方法,因为它来自谷歌开发者关系成员为youtube api - Adonis K. Kakoulidis


你可以得到 视频输入 其中包含视频缩略图的URL。链接中有示例代码。或者,如果要解析XML,那么就有信息 这里。返回的XML有一个 media:thumbnail element,包含缩略图的URL。


25
2018-01-14 23:40



我无法使用simpleXML解决这个问题。这很难! - Aditya M P


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

20
2017-07-04 05:10



这是一个糟糕的解决方案!为什么不使用Youtube api v3? - mpgn


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

低质量缩略图:

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
2017-12-01 23:40