21

我想获得 youtube 最高的缩略图“maxresdefault.jpg”

像这个

http://i.ytimg.com/vi/Cj6ho1-G6tw/maxresdefault.jpg

我正在使用这个简单的 php 代码

<?php

$youtub_id = "Cj6ho1-G6tw";
echo "http://i.ytimg.com/vi/".$youtub_id."/maxresdefault.jpg";

?>

上面代码的问题是有这样的视频http://youtu.be/VGazSZUYyf4 NOT HD

结果是youtube的灰色小404图像

http://i.ytimg.com/vi/VGazSZUYyf4/maxresdefault.jpg

那么如何获得最高的 youtube 缩略图,所以如果“maxresdefault”不可用,则获得下一个大缩略图“hqdefault”,如果没有获得下一个“mqdefault”等......

我尝试使用gdata youtube,但无论哪种方式,视频高清或“maxresdefault”都没有显示。

4

4 回答 4

21

原因是《充分利用地图》的分辨率至少不是 720p。

查看此特定视频的api,您可以看到没有maxresdefault.

只有分辨率为 720p 或更高的视频具有maxresdefault. 这未在更高级别的视频中的 API 中列出。因此,为了获得最高分辨率,您还应该检查是否也能maxresdefault正常工作。

<media:thumbnail url='http://i1.ytimg.com/vi/VGazSZUYyf4/default.jpg' height='90' width='120' time='00:15:12.500' yt:name='default'/>
<media:thumbnail url='http://i1.ytimg.com/vi/VGazSZUYyf4/mqdefault.jpg' height='180' width='320' yt:name='mqdefault'/>
<media:thumbnail url='http://i1.ytimg.com/vi/VGazSZUYyf4/hqdefault.jpg' height='360' width='480' yt:name='hqdefault'/>
<media:thumbnail url='http://i1.ytimg.com/vi/VGazSZUYyf4/1.jpg' height='90' width='120' time='00:07:36.250' yt:name='start'/>
<media:thumbnail url='http://i1.ytimg.com/vi/VGazSZUYyf4/2.jpg' height='90' width='120' time='00:15:12.500' yt:name='middle'/>
<media:thumbnail url='http://i1.ytimg.com/vi/VGazSZUYyf4/3.jpg' height='90' width='120' time='00:22:48.750' yt:name='end'/>

获得最高质量缩略图的最佳选择是使用 API 并获取具有最大yt:name属性的图像。

顺序是:

default
mqdefault
hqdefault
sddefault

此操作的示例代码:

<?php

$youtub_id = "VGazSZUYyf4";

$images = json_decode(file_get_contents("http://gdata.youtube.com/feeds/api/videos/".$youtub_id."?v=2&alt=json"), true);
$images = $images['entry']['media$group']['media$thumbnail'];
$image  = $images[count($images)-4]['url'];

$maxurl = "http://i.ytimg.com/vi/".$youtub_id."/maxresdefault.jpg";
$max    = get_headers($maxurl);

if (substr($max[0], 9, 3) !== '404') {
    $image = $maxurl;   
}

echo '<img src="'.$image.'">';

这适用于$youtub_id = "Cj6ho1-G6tw";$youtub_id = "VGazSZUYyf4";

于 2013-08-03T05:30:56.953 回答
9

您可以使用getimagesize()并检查图像是否存在(也存在file_exists(),但在这种情况下可能效果不佳)。

您可以使用此功能获取特定视频的最高分辨率屏幕截图。

代码:

function fetch_highest_res ($videoid) {
    $resolutions = array('maxresdefault', 'hqdefault', 'mqdefault');     
    foreach($resolutions as $res) {
        $imgUrl = "http://i.ytimg.com/vi/$videoid/$res.jpg";
        if(@getimagesize(($imgUrl))) 
            return $imgUrl;
    }
}

用法:

echo fetch_highest_res('Cj6ho1-G6tw').'<br>';
echo fetch_highest_res('VGazSZUYyf4');

输出:

http://i.ytimg.com/vi/Cj6ho1-G6tw/maxresdefault.jpg
http://i.ytimg.com/vi/VGazSZUYyf4/hqdefault.jpg

注意:这可能不是最好的解决方案,如果您不想使用 API,这是一种解决方法。

于 2013-08-03T06:37:54.517 回答
7

不支持依赖于静态 url 抓取的所有其他答案。它们可以更改,您可能需要随时更改您的应用程序。

为此,您应该使用Data API v3。您应该使用 id=videoId 和 part=snippet的视频->列表请求。在回复中,您将检查snippet.thumbnails.['high'].url

于 2013-08-03T20:59:30.057 回答
4

感谢 Ibrahim Ulukaya 的回答,我能够理解为什么 David Chen 之前的正确答案不再有效;谷歌已经弃用了之前的工作 API。邪恶的,坏的,顽皮的,邪恶的,谷歌

以下 URL 将使用Data API v3返回缩略图对象列表:

https://www.googleapis.com/youtube/v3/videos?id={VIDEO_ID}&key={API_KEY}&part=snippet&fields=items/snippet/thumbnails

{VIDEO_ID}可以作为任何 YouTube 视频 URL 的一部分找到,并且要求{API_KEY}您:

一旦你有了你的 URLVIDEO_IDAPI_KEY替换了占位符,你应该得到如下所示的 JSON:

{
 "items": [
  {
   "snippet": {
    "thumbnails": {
     "default": {
      "url": "https://i.ytimg.com/vi/7Ey-Xkwn1s0/default.jpg",
      "width": 120,
      "height": 90
     },
     "medium": {
      "url": "https://i.ytimg.com/vi/7Ey-Xkwn1s0/mqdefault.jpg",
      "width": 320,
      "height": 180
     },
     "high": {
      "url": "https://i.ytimg.com/vi/7Ey-Xkwn1s0/hqdefault.jpg",
      "width": 480,
      "height": 360
     },
     "standard": {
      "url": "https://i.ytimg.com/vi/7Ey-Xkwn1s0/sddefault.jpg",
      "width": 640,
      "height": 480
     },
     "maxres": {
      "url": "https://i.ytimg.com/vi/7Ey-Xkwn1s0/maxresdefault.jpg",
      "width": 1280,
      "height": 720
     }
    }
   }
  }
 ]
}

从那里我猜你会知道该怎么做......?

希望这可以帮助。

于 2018-06-02T04:34:38.937 回答