How to Download YouTube Videos with Python in 5 Minutes

Published on: May 12, 2026
Reading time: 8 minutes

Have you ever wanted to turn hours of YouTube content into local files so you can watch offline? Whether you want to save a valuable tutorial, keep a lecture for later study, or back up your own uploads, knowing how to download YouTube videos with Python in 5 minutes is a powerful skill. Python is the ideal language for this because of its clean syntax and its ecosystem of ready-to-use libraries. This practical guide uses the pytube library to build a functional, fast, and efficient download script from scratch.

Automating repetitive tasks is one of the pillars of modern development. Many people waste time navigating ad-filled, malware-prone websites just to perform simple downloads, when a few lines of Python could solve the same problem cleanly and safely. If you are just getting started with Python for beginners, this project is an ideal starting point because it produces immediate, visible results and teaches core concepts like functions, error handling, and file paths in a practical context.

Why Use Python to Download Videos?

Many online tools promise to download videos, but most either compromise your security or limit quality. Writing your own tool gives you total control over what runs on your machine. Python also lets you customize the process: you can choose audio only, select a specific resolution, or download an entire playlist in one run. The open-source library ecosystem, available through the official PyPI (Python Package Index), makes all of this remarkably approachable.

Integration is another major advantage. Imagine building a larger system where, after the download, Python automatically converts the file to a different format or extracts audio for transcription. For anyone who already understands programming logic with Python, these possibilities are effectively unlimited.

Setting Up Your Development Environment

Step 1: Verifying Your Python Installation

Before writing any code, confirm that Python is installed on your machine. Always use version 3.x to avoid compatibility issues. If you have not set up your environment yet, the guide on how to install Python covers the full process on Windows, Linux, and Mac. Open your terminal and run:

Bash
python --version

Step 2: Installing the pytube Library

The library you will use is called pytube. It is lightweight, has no heavy external dependencies, and interacts directly with YouTube’s video delivery structure. To install it, open your terminal and run:

Bash
pip install pytube

If you encounter permission errors during this step, review how to install Python libraries with administrator privileges or inside a virtual environment. Using a Python virtual environment is always recommended to keep project dependencies isolated.

Connecting to a YouTube Video

The first step in your script is creating a connection to the video URL and reading its metadata. This confirms the link is valid before starting any heavy data transfer:

Python
from pytube import YouTube

# Define the video URL
url = 'https://www.youtube.com/watch?v=your_video_id'
yt = YouTube(url)

print(f"Video title: {yt.title}")
print(f"View count: {yt.views}")

Here you import the YouTube class and instantiate an object by passing the target URL. The f-string formatting used to print the results is a clean, modern Python convention worth getting comfortable with early on.

Selecting the Best Resolution and Downloading

To download the video, you need to select a stream. YouTube offers several options: video only, audio only, different resolutions, and formats like MP4 or WebM. For this tutorial, the get_highest_resolution() method automatically picks the best quality progressive stream available, meaning it contains both video and audio in the same file (typically up to 720p):

Python
stream = yt.streams.get_highest_resolution()
print("Downloading...")
stream.download()
print("Download complete!")

When you call download(), Python saves the file in the same folder where your script lives. To save it elsewhere, pass a directory path as the output_path argument.

Downloading Audio Only (MP3)

If you only need the audio, use the filter method with only_audio=True. The file will be saved as an MP4 or WebM container with audio only, which you can rename to .mp3 using the Python os module:

Python
import os

audio_stream = yt.streams.filter(only_audio=True).first()
output_file = audio_stream.download(output_path="./audio")

# Rename extension to .mp3
base, ext = os.path.splitext(output_file)
mp3_file = base + ".mp3"
os.rename(output_file, mp3_file)
print(f"Audio saved as: {mp3_file}")

Downloading Entire Playlists

pytube includes a Playlist class that lets you download every video in a playlist with a simple loop. This is where knowing how to write Python for loops becomes directly useful:

Python
from pytube import Playlist

playlist_url = "https://www.youtube.com/playlist?list=YOUR_PLAYLIST_ID"
pl = Playlist(playlist_url)

print(f"Downloading playlist: {pl.title}")
for video in pl.videos:
    video.streams.get_highest_resolution().download()
    print(f"Downloaded: {video.title}")

Error Handling

On the internet, things do not always go as planned. A link may be broken, a video may be private, or your connection may drop mid-download. Using try and except in Python prevents the script from crashing and gives the user a readable message instead of a confusing stack trace:

Python
try:
    yt = YouTube(url)
    stream = yt.streams.get_highest_resolution()
    stream.download()
    print("Download complete!")
except Exception as e:
    print(f"An error occurred: {e}")

Complete Project Code

Here is the full unified script. It asks the user for a URL and destination folder, handles errors cleanly, and reports the saved file path when finished:

Python
from pytube import YouTube
import os

def download_youtube_video(link, destination='.'):
    try:
        yt = YouTube(link)
        print(f"Starting download: {yt.title}")

        # Get the highest resolution stream with both video and audio
        video_stream = yt.streams.get_highest_resolution()

        # Download to the specified folder
        output_file = video_stream.download(output_path=destination)

        print(f"Download complete: {output_file}")
        print("Saved to:", os.path.abspath(destination))

    except Exception as error:
        print(f"Failed to download the video: {error}")

if __name__ == "__main__":
    user_url = input("Paste the YouTube video URL here: ")
    output_folder = input("Enter the destination folder (or press Enter for current folder): ")

    if not output_folder:
        download_youtube_video(user_url)
    else:
        download_youtube_video(user_url, output_folder)

It is essential to remember that downloading videos must respect YouTube’s Terms of Service. The platform prohibits downloading copyright-protected content without permission, unless the video is distributed under a license that allows it (such as Creative Commons) or the use qualifies as strictly personal and educational under your country’s laws. Always use this kind of script responsibly. Automating backups of your own content or downloading public domain material are perfectly valid use cases that let you practice programming without crossing ethical lines.

What to Build Next

Downloading videos is just the beginning. Now that you can handle media streams, try converting downloads to MP3 automatically, or build a graphical interface around this script using Tkinter so non-technical users can run it with a button click. You could also combine it with Python automation to organize the downloaded files by channel or topic automatically as soon as each video finishes.

Frequently Asked Questions

Does pytube download videos in 4K?

Yes, but with a catch. YouTube separates audio and video for resolutions above 1080p. To download in 4K, you need to download the video and audio streams separately and merge them using a tool like FFmpeg.

Why did my script suddenly stop working?

YouTube frequently changes its internal structure to deter scrapers. When that happens, pytube needs to be updated. Run pip install --upgrade pytube in your terminal to get the latest version.

Can I download entire playlists with Python?

Yes. pytube includes a Playlist class. Import it, iterate over the playlist’s video objects, and call the download function for each one.

Is it illegal to download YouTube videos?

It depends on the content. Downloading copyright-protected videos violates YouTube’s Terms of Service and may be illegal. Downloading your own content or videos under Creative Commons licenses is generally accepted.

How do I download only the audio as MP3?

Filter streams with only_audio=True, download the file, and rename its extension to .mp3 using Python’s os module as shown in the audio-only section above.

Does this script work on Android or iPhone?

If you have a Python environment installed on your device (such as Pydroid 3 on Android), the script will work normally as long as the required libraries are installed in that environment.

Do I need a Google API key to use pytube?

No. Unlike libraries that use the official YouTube Data API v3, pytube works by directly reading the public video page structure, so no API key or authentication is required.

What should I do if the download is very slow?

Speed depends on your internet connection and Google’s server response at that moment. Check whether other processes are consuming your bandwidth, and try switching to a lower resolution stream if speed is more important than quality.

Share:

Facebook
WhatsApp
Twitter
LinkedIn

Article content

    Related articles

    Automation and Scripts
    Foto do Leandro Hirt

    Build a News Scraper to Telegram with Python

    Learn how to build a Python web scraper that extracts news headlines and sends them to Telegram automatically. Complete guide

    Ler mais

    Tempo de leitura: 9 minutos
    12/05/2026
    Automation and Scripts
    Foto do Leandro Hirt

    How to Access and Edit Google Sheets with Python in Minutes

    Learn how to access and edit Google Sheets with Python using gspread. This complete guide covers API setup, credential configuration,

    Ler mais

    Tempo de leitura: 9 minutos
    12/05/2026
    Automation and Scripts
    Foto do Leandro Hirt

    How to Extract Text from PDFs with Python in Minutes

    Learn how to extract text from PDFs with Python using PyPDF2 and pdfplumber. This complete guide covers single-page reading, table

    Ler mais

    Tempo de leitura: 9 minutos
    12/05/2026
    Automation and Scripts
    Foto do Leandro Hirt

    Tweepy: How to Automate Twitter Posts with Python

    Learn how to automate Twitter posts with Python using Tweepy. This complete guide covers API setup, authentication, scheduling tweets, sending

    Ler mais

    Tempo de leitura: 8 minutos
    12/05/2026
    Automation and Scripts
    Foto do Leandro Hirt

    How to Use Multiprocessing in Python to Speed Up Scripts

    Learn how to use Python's multiprocessing module to run tasks in parallel across all CPU cores. This guide covers Process,

    Ler mais

    Tempo de leitura: 9 minutos
    12/05/2026
    Automation and Scripts
    Foto do Leandro Hirt

    How to Create a WhatsApp Bot with Python in Minutes

    Learn how to build a WhatsApp bot with Python using PyWhatKit. This beginner-friendly guide covers scheduled messages, instant sending, image

    Ler mais

    Tempo de leitura: 9 minutos
    11/05/2026