获取 YouTube 最高缩略图分辨率

2022-08-30 19:48:50

我想让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 不是高清

结果是YouTube的灰色小404图像

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

因此,如何获得最高的youtube缩略图,因此如果“maxresdefault”不可用,请获取下一个大缩略图“hqdefault”,如果没有获取下一个“mqdefault”等...

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


答案 1

原因是因为“充分利用地图”的分辨率不至少是720p。

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

只有分辨率为 720p 或更高的视频才具有 。这在 API 中未在较高视频中列出。因此,为了获得最高分辨率,您还应该检查其是否也有效。maxresdefaultmaxresdefault

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


答案 2

您可以使用并检查图像是否存在(也有,但在这种情况下,它可能无法很好地工作)。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,这是一个解决方法。


推荐