31
How to Download YouTube Videos With Python?
YouTube has become the go-to source for videos on the internet. While there are many ways to download YouTube videos, using Python is one of the easiest. In this article, we will show you how to use Python to download YouTube videos.
We can use the package Pytube to download YouTube videos in a Python script. It's a free tool you can install from the PyPI repository. You can also specify the output format (eg: mp4) and resolution (eg: 720px) when downloading videos.
Here's a step-by-step approach to downloading YouTube videos in Python.
pip install pytube
from pytube import YouTube
yt = YouTube("<Your youtube URL>")
mp4_files = yt.streams.filter(file_extension="mp4")
mp4_369p_files = mp4_files.get_by_resolution("360p")
mp4_369p_files.download("<Download folder path>")
Here's how the completed script will look like. I've wrapped it with a function definition that accepts the url and outpath as arguments.
from pytube import YouTube
def download_360p_mp4_videos(url: str, outpath: str = "./"):
yt = YouTube(url)
yt.streams.filter(file_extension="mp4").get_by_resolution("360p").download(outpath)
if __name__ == "__main__":
download_360p_mp4_videos(
"https://www.youtube.com/watch?v=JfVOs4VSpmA&t=4s&ab_channel=SonyPicturesEntertainment",
"./trailers",
)
The above code will download the Spiderman: No way home trailer and save it in a folder called 'trailers'.
With a little trick, we can even make this a CLI. Here's how to use Typer to convert the function you wrote into a CLI.
from pytube import YouTube
from typer import Typer
app = Typer()
@app.command()
def download_360p_mp4_videos(url: str, outpath: str = "./"):
yt = YouTube(url)
yt.streams.filter(file_extension="mp4").get_by_resolution("360p").download(outpath)
if __name__ == "__main__":
app()
Now we converted our function into a command line interface that accepts a URL parameter and saves the video into the local filesystem. Here's how to run this.
python get-yt.py "https://www.youtube.com/watch?v=JfVOs4VSpmA&t=4s&ab_channel=SonyPicturesEntertainment"
31