首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

YouTube 與 Vimeo 視頻縮略圖自動獲取代碼

     編輯:PHP 相關知識

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

YouTube 縮略圖尺寸說明

URL 模式尺寸說明
/default.jpg120×90預設小圖
/mqdefault.jpg320×180中等質量
/hqdefault.jpg480×360高質量
/sddefault.jpg640×480標準清晰度
/maxresdefault.jpg1280×720最高清(僅 720p+ 視頻有效)

建議:優先請求 maxresdefault.jpg,若返回 404 再降級至 hqdefault.jpg。

Vimeo 進階方案

若需更穩定、高解析度或批量獲取,請申請 Vimeo Developer API,使用 OAuth 驗證調用 /videos/{video_id}/pictures 端點,可獲得原始上傳圖、多尺寸裁切、無頻率限制。

快取優化建議

  • 將解析結果快取至 Redis/Memcached(Key: 視頻 URL 的 MD5,TTL: 24h)。
  • 異步預熱:發布視頻時由隊列任務預先抓取並存入 CDN。
  • 錯誤降級:API 失敗時返回佔位圖,避免前端顯示破圖。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved