How to Build a YouTube Video Downloader in Python: A Beginner's Guide

Usecase:
Online websites for downloading YouTube videos are often full of ads and complicated to use. For educational purposes, here’s a simple, ad-free way to create your own YouTube video downloader using Python.
Result:


Lets get started!
Let me show you the essential script.
#pip install pytube (if module not installed yet)
from pytube import YouTube
#insert the link you want to download
yt = YouTube("https://www.youtube.com/watch?v=K9tOnIJyvRw")
#streams object able to use multiple method to call
yt.streams.get_highest_resolution().download()
print(f"Video downloaded successfully: '{yt.title}'")
That's all you need.
yt.streams: This gets all available video streams for the YouTube video.get_highest_resolution(): This method selects the stream with the highest resolution.download(): This method downloads the selected video stream.
From the test, it seems that unable to call method directly but need to call method from object streams which is get_highest_resolution()
Full explanation:
You cannot call the download method directly on the YouTube object because the download method is a part of the Stream object, not the YouTube object. Here’s a more detailed explanation:
YouTubeObject:- When you create a
YouTubeobject, it represents a specific YouTube video. This object contains various attributes and methods to interact with the video.
- When you create a
StreamObject:- The
YouTubeobject has astreamsattribute, which is a list ofStreamobjects. EachStreamobject represents a different format or quality option for downloading the video (e.g., 360p, 720p, audio-only, etc.).
- The
downloadMethod:- The
downloadmethod is a method of theStreamclass, not theYouTubeclass. Therefore, you need to first select a specificStreamobject from thestreamsattribute of theYouTubeobject before you can call thedownloadmethod.
- The
We want to make it better by stating the path to save downloaded video and also URL for video.
#pip install pytube (if module not installed yet)
from pytube import YouTube
Importing Youtube class from pytube library which will be used to interacting with Youtube videos
# Create function to download a YouTube video
def download_video(video_url, output_path):
try:
video = YouTube(video_url)
stream = video.streams.get_highest_resolution()
stream.download(output_path=output_path)
print(f"Video downloaded successfully: '{video.title}'")
except Exception as e:
print(f"Failed to download video. Error: {e}")
def download_video(video_url, output_path) is defining a function name as download video that takes two arguments which is video url and output path
video_url: The URL of the YouTube video to be downloaded.output_path: The directory where the downloaded video will be saved.
video = YouTube(video_url) create 'Youtube' object for specified video URL that will called later as variable video
stream = video.streams.get_highest_resolution() Selects the highest resolution stream available for the video.
stream.download(output_path=output_path) Downloads the selected stream to the specified directory.
print(f"Video downloaded successfully: '{video.title}'") output if the video downloaded successfully
except Exception as e: print(f"Failed to download video. Error: {e}") when the download not able to process, this output will trigger
video_url = input('Enter URL of YouTube video: ')
output_path = input('Enter the directory to save the video: ')
input means that user will need to fill the URL and also the path which will be stored to the variable video_url and output_path
download_video(video_url, output_path)
This last script will call download_video function with the argument that has been given by user.
FULL CODE
# pip install pytube (if module not installed yet)
from pytube import YouTube
# Function to download a YouTube video
def download_video(video_url, output_path):
try:
video = YouTube(video_url)
stream = video.streams.get_highest_resolution()
stream.download(output_path=output_path)
print(f"Video downloaded successfully: '{video.title}'")
except Exception as e:
print(f"Failed to download video. Error: {e}")
# Request URL of YouTube Video
video_url = input('Enter URL of YouTube video: ')
output_path = input('Enter the directory to save the video: ')
# Download the video
download_video(video_url, output_path)
Let me know if you have any comment.




