PyTubeFix is a particularly elegant library that will allow you to download Youtube videos directly via your Python scripts, without having to resort to a third-party program like yt-dlp.
This library, which honors the Python philosophy “ batteries included ”, requires no external dependencies. A simple pip install pytubefix
and you are ready to download your first videos.
Let's start with the BA-BA.
To download a video in maximum quality, a few lines of code are enough:
from pytubefix import YouTube from pytubefix.cli import on_progress url = "" yt = YouTube(url, on_progress_callback=on_progress) print(f"Téléchargement de : {yt.title}") ys = yt.streams.get_highest_resolution() ys.download()
The function on_progress
is particularly cool since it displays a progress bar in your terminal. No more staring into space wondering if the download is progressing!
Do you prefer to recover audio only, for example to extract Music from a clip? PyTubeFix has thought of everything:
ys = yt.streams.get_audio_only()ys.download()
Music lovers will especially appreciate the ability to download entire playlists, so if you come across an awesome compilation of 80s songs, and with just a few lines of code, you can get it all:
from pytubefix import Playlist pl = Playlist("https://www.youtube.com/playlist?list=votre_playlist") for video in pl.videos: ys = video.streams.get_audio_only() ys.download()
The library also shines with its advanced features. For example, you can specify a custom destination folder:
ys.download(output_path="chemin/vers/dossier")
Subtitles are not left out since PyTubeFix allows you to recover and save captions in SRT format:
yt = YouTube('')caption = yt.captions['a.en'] # 'a.en' pour l'anglaiscaption.save_captions("sous-titres.srt")
For more advanced users, the library even offers OAuth integration to access videos requiring authentication:
yt = YouTube(url, use_oauth=True, allow_oauth_cache=True)
But that's not all because PyTubeFix also allows you to crawl YouTube channels programmatically:
from pytubefix import Channel c = Channel("https://www.youtube.com/@NomDeLaChaine") print(f'Chaîne : {c.channel_name}') for video in c.videos: video.streams.get_highest_resolution().download()
And for cases where you are looking for specific content, the search function is extremely effective:
from pytubefix import Search results = Search('Python Tutorial') for video in results.videos: print(f'Titre : {video.title}') print(f'URL : {video.watch_url}')
You can even refine your searches with sophisticated filters:
from pytubefix.contrib.search import Search, Filter filtres = { 'upload_date': Filter.get_upload_date('Today'), 'type': Filter.get_type("Video"), 'duration': Filter.get_duration("Under 4 minutes") }
In terms of best practices, here are some tips to optimize your use of PyTubeFix:
- Systematically handle exceptions to avoid unexpected interruptions
- Check available disk space before launching massive downloads
- Use file names compatible with your operating system
- Consider implementing timeouts between requests to avoid throttling
One last tip: don't forget that downloading YouTube videos must respect the copyright and conditions of use of the platform, AS ALWAYS, HUH!
Check out PyTubeFix on GitHub
Thanks to Lorenper for this excellent discovery!