
import re
import os
import requests
import argparse
from urllib.parse import urlparse, parse_qs
def extract_video_id(url):
"""
Extract the YouTube video ID from a URL.
Args:
url (str): The YouTube video URL
Returns:
str: The video ID or None if not found
"""
# Try to parse the URL
parsed_url = urlparse(url)
# Check if it's a youtube.com URL
if 'youtube.com' in parsed_url.netloc:
if parsed_url.path == '/watch':
# Regular youtube.com/watch?v=VIDEO_ID format
query_params = parse_qs(parsed_url.query)
if 'v' in query_params:
return query_params['v'][0]
elif '/embed/' in parsed_url.path:
# Embedded video format
return parsed_url.path.split('/embed/')[1]
elif '/v/' in parsed_url.path:
# Old format
return parsed_url.path.split('/v/')[1]
# Check if it's a youtu.be URL (shortened)
elif 'youtu.be' in parsed_url.netloc:
return parsed_url.path.lstrip('/')
# Try to match a video ID pattern as a fallback
youtube_id_pattern = r'(?:(?:youtube\.com\/(?:(?:watch\?v=)|(?:embed\/))([a-zA-Z0-9_-]{11}))|(?:youtu\.be\/([a-zA-Z0-9_-]{11})))'
match = re.search(youtube_id_pattern, url)
if match:
return match.group(1) or match.group(2)
return None
def download_thumbnail(video_id, quality='maxresdefault', output_dir='.'):
"""
Download a YouTube video thumbnail.
Args:
video_id (str): The YouTube video ID
quality (str): Thumbnail quality (maxresdefault, hqdefault, mqdefault, default)
output_dir (str): Directory to save the thumbnail
Returns:
str: Path to the saved thumbnail or None if download failed
"""
thumbnail_url = f"https://img.youtube.com/vi/{video_id}/{quality}.jpg"
output_path = os.path.join(output_dir, f"{video_id}_{quality}.jpg")
try:
response = requests.get(thumbnail_url, stream=True)
response.raise_for_status() # Raise an exception for HTTP errors
# If maxresdefault is not available, try hqdefault
if quality == 'maxresdefault' and response.status_code == 404:
return download_thumbnail(video_id, 'hqdefault', output_dir)
with open(output_path, 'wb') as file:
for chunk in response.iter_content(chunk_size=8192):
file.write(chunk)
print(f"Thumbnail saved to: {output_path}")
return output_path
except requests.exceptions.RequestException as e:
print(f"Error downloading thumbnail: {e}")
return None
def main():
parser = argparse.ArgumentParser(description='Download YouTube video thumbnails')
parser.add_argument('url', nargs='?', help='YouTube video URL')
parser.add_argument('--quality', choices=['maxresdefault', 'hqdefault', 'mqdefault', 'default'],
default='maxresdefault', help='Thumbnail quality')
parser.add_argument('--output', default='.', help='Output directory')
args = parser.parse_args()
# If no URL is provided, prompt the user
url = args.url
if not url:
print("No YouTube URL provided. Please enter a YouTube video URL:")
url = input("> ")
# Extract video ID
video_id = extract_video_id(url)
if not video_id:
print("Error: Could not extract video ID from the provided URL.")
return
# Download thumbnail
download_thumbnail(video_id, args.quality, args.output)
if __name__ == "__main__":
main()
🎞️ YouTube Thumbnail Downloader – Python nástroj
🧩 Co tento program dělá?
Tento nástroj umožňuje automaticky stáhnout náhledový obrázek (thumbnail) z libovolného YouTube videa pomocí jeho URL. Umožňuje zvolit si kvalitu obrázku, který se uloží na disk.
⚙️ Jak to funguje?
1. 🔍 Extrahování ID videa
Funkce extract_video_id(url)
:
Z URL videa vybere jedinečné ID videa (např.
dQw4w9WgXcQ
).Podporuje různé formáty adres:
https://www.youtube.com/watch?v=...
https://youtu.be/...
https://youtube.com/embed/...
2. 🖼️ Stažení obrázku
Funkce download_thumbnail(video_id, quality)
:
Sestaví správnou URL pro obrázek:
https://img.youtube.com/vi/VIDEO_ID/QUALITY.jpg
Stáhne obrázek a uloží ho jako
.jpg
.Pokud nejvyšší kvalita (
maxresdefault
) není dostupná, automaticky použije alternativu (hqdefault
).
3. 💻 Ovládání z příkazové řádky
Spuštěním skriptu např.:
python downloader.py https://www.youtube.com/watch?v=dQw4w9WgXcQ --quality hqdefault --output ./thumbnails
🔧 Parametry (CLI)
Argument | Popis |
---|---|
url | URL YouTube videa |
--quality | Kvalita obrázku: maxresdefault , hqdefault , mqdefault , default |
--output | Cesta k výstupní složce (např. ./vystup ) |
💡 Příklad použití
python downloader.py "https://youtu.be/dQw4w9WgXcQ"
➡️ Vytvoří soubor dQw4w9WgXcQ_maxresdefault.jpg
ve výchozím adresáři.
📦 K čemu je to užitečné?
Automatizace sběru náhledových obrázků (např. pro katalogy videí)
Archivace obalových obrázků
Tvorba náhledů do prezentací nebo reportů
📋 Poznámky
Program si sám ověří, zda existuje obrázek v požadované kvalitě.
Kód je navržen tak, aby byl robustní vůči různým formátům URL.
Nevyžaduje YouTube API – pracuje jen s veřejnými URL obrázků.