在 CMS、部落格或視頻聚合頁面中,常需根據視頻鏈接自動抓取封面圖。本文提供一個輕量級 PHP 函數 video_image(),支援 YouTube(含 youtu.be 短鏈)與 Vimeo 兩大平台,自動解析視頻 ID 並返回高清縮略圖 URL。
<?php
/**
* 根據視頻 URL 獲取縮略圖地址
*
* @param string $url YouTube 或 Vimeo 視頻鏈接
* @return string|false 縮略圖 URL 或 false
*/
function video_image($url) {
$parsed = parse_url($url);
if (!$parsed || empty($parsed['host'])) return false;
$host = strtolower($parsed['host']);
// ---- YouTube 標準鏈接 ----
if (in_array($host, ['www.youtube.com', 'youtube.com'])) {
parse_str($parsed['query'], $query);
if (!empty($query['v'])) {
return "https://img.youtube.com/vi/{$query['v']}/maxresdefault.jpg";
}
}
// ---- YouTube 短鏈 youtu.be ----
if (in_array($host, ['www.youtu.be', 'youtu.be'])) {
$path = trim($parsed['path'], '/');
if ($path) {
return "https://img.youtube.com/vi/{$path}/maxresdefault.jpg";
}
}
// ---- Vimeo ----
if (in_array($host, ['www.vimeo.com', 'vimeo.com'])) {
$videoId = trim($parsed['path'], '/');
if ($videoId && is_numeric($videoId)) {
// 使用 Vimeo oEmbed API(無需 API Key,有頻率限制)
$apiUrl = "https://vimeo.com/api/oembed.json?url=" . urlencode($url);
$json = @file_get_contents($apiUrl);
if ($json) {
$data = json_decode($json, true);
if (!empty($data['thumbnail_url'])) {
return $data['thumbnail_url']; // 返回 640x360 或更高清版本
}
}
// 降級:舊版 API(已棄用但仍可用)
// $hash = @unserialize(file_get_contents("https://vimeo.com/api/v2/video/{$videoId}.php"));
// return $hash[0]['thumbnail_medium'] ?? false;
}
}
return false;
}
?>
<img src="<?php echo video_image('https://www.youtube.com/watch?v=dQw4w9WgXcQ'); ?>" alt="Video Thumbnail">
<img src="<?php echo video_image('https://youtu.be/dQw4w9WgXcQ'); ?>" alt="Video Thumbnail">
<img src="<?php echo video_image('https://vimeo.com/123456789'); ?>" alt="Video Thumbnail">
| URL 模式 | 尺寸 | 說明 |
|---|---|---|
| /default.jpg | 120×90 | 預設小圖 |
| /mqdefault.jpg | 320×180 | 中等質量 |
| /hqdefault.jpg | 480×360 | 高質量 |
| /sddefault.jpg | 640×480 | 標準清晰度 |
| /maxresdefault.jpg | 1280×720 | 最高清(僅 720p+ 視頻有效) |
建議:優先請求 maxresdefault.jpg,若返回 404 再降級至 hqdefault.jpg。
若需更穩定、高解析度或批量獲取,請申請 Vimeo Developer API,使用 OAuth 驗證調用 /videos/{video_id}/pictures 端點,可獲得原始上傳圖、多尺寸裁切、無頻率限制。