How to download YouTube video thumbnails using PHP

The following post shows how you can retrieve any YouTube video thumbnails in PHP without using the YouTube api. I needed this for a onetime solution to get some thumbnails for a few videos and using the api seemed a little time consuming. So here goes.

YouTube video thumbnail structure

The urls from where you can get the thumbnails are shown below. Each video generates around 4 standard thumbnails. The first image is a full size image while others are smaller thumbnail images. You can easily try the following urls in the browser by replacing the ‘youtube-video-id’ part with the corresponding videos id.

http://img.youtube.com/vi/youtube-video-id/0.jpg
http://img.youtube.com/vi/youtube-video-id/1.jpg
http://img.youtube.com/vi/youtube-video-id/2.jpg
http://img.youtube.com/vi/youtube-video-id/3.jpg
 
# Default thumbnail
http://img.youtube.com/vi/youtube-video-id/default.jpg

The id is the last part of the YouTube url or the id in the ‘v’ GET variable.

# Example, the id here is 'VSB4wGIdDwo'
https://www.youtube.com/watch?v=VSB4wGIdDwo

Other than the above mentioned urls there are a few specific ones listed below which are also available.

Standard quality version:
http://img.youtube.com/vi/youtube-video-id/sddefault.jpg
 
Medium quality version:
http://img.youtube.com/vi/youtube-video-id/mqdefault.jpg
 
High quality version:
http://img.youtube.com/vi/youtube-video-id/hqdefault.jpg
 
Maximum quality version:
http://img.youtube.com/vi/youtube-video-id/maxresdefault.jpg

Note: Not all image types may be available for a video.

Getting images using PHP

Below is the PHP code to download thumbnails when given the video id.

<?php
 
// Set YouTube video id here
$video_id = 'VSB4wGIdDwo';
 
// Set path where to store thumbnails,
// Set this to a blank string to save in the current direcrory.
$path_to_save_thumbnails = 'E:/localhost/test/youtube-thumbs/';
 
 
 
 
// Nothing to change below this
$ch = curl_init();
 
// Thumbnail types
$thubnail_types = array('0', '1', '2', '3','default',
                      'sddefault', 'mqdefault',
                      'hqdefault', 'maxresdefault');
 
foreach($thubnail_types as $type) 
{
    $youtube_thumb_url = 'http://img.youtube.com/vi/'.$video_id.'/'.$type.'.jpg';
 
    echo "Downloading thumbnail [$type]." . PHP_EOL;
    // set URL and other appropriate options
    curl_setopt($ch, CURLOPT_URL, $youtube_thumb_url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 
    $image = curl_exec($ch);
    $info = curl_getinfo($ch);
 
    // If image is found than save it to a file.
    if($info['http_code'] == 200) {
        // Store thumbnails in the given directory, change this
        // to your liking.
        file_put_contents($path_to_save_thumbnails.$type.'.jpg', $image);
    }
}
 
echo 'Done downloading.';
 
// close cURL resource, and free up system resources
curl_close($ch);

2 thoughts on “How to download YouTube video thumbnails using PHP

  1. Thanks for the tip: nice to be able to get those images.

    If you know the URL you can use $image = file_get_contents($youtube_thumb_url); instead of CURL.

    If the URL is not valid/reachable, PHP issues a warning and $image is bool(false).

Leave a Reply

Your email address will not be published. Required fields are marked *