yt-dlp Terminal
Discover the yt-dlp online web console
Please run the samples and/or type your own Python code to learn yt-dlp.
Print the version of yt-dlp
yt_dlp.version.__version__
Extracting information
URL = 'https://www.youtube.com/watch?v=qhKci8jY510'ydl_opts = {}with yt_dlp.YoutubeDL(ydl_opts) as ydl:info = ydl.extract_info(URL, download=False)print(json.dumps(ydl.sanitize_info(info)))
Filter videos
URL = 'https://www.youtube.com/watch?v=qhKci8jY510'def longer_than_a_minute(info, *, incomplete):"""Download only videos longer than a minute (or with unknown duration)"""duration = info.get('duration')if duration and duration < 60:return 'The video is too short'ydl_opts = {'match_filter': longer_than_a_minute,}with yt_dlp.YoutubeDL(ydl_opts) as ydl:info = ydl.extract_info(URL, download=False)print(json.dumps(ydl.sanitize_info(info)))
Use a custom format selector
URL = 'https://www.youtube.com/watch?v=qhKci8jY510'def format_selector(ctx):""" Select the best video and the best audio that won't result in an mkv.NOTE: This is just an example and does not handle all cases """# formats are already sorted worst to bestformats = ctx.get('formats')[::-1]# acodec='none' means there is no audiobest_video = next(f for f in formatsif f['vcodec'] != 'none' and f['acodec'] == 'none')# find compatible audio extensionaudio_ext = {'mp4': 'm4a', 'webm': 'webm'}[best_video['ext']]# vcodec='none' means there is no videobest_audio = next(f for f in formats if (f['acodec'] != 'none' and f['vcodec'] == 'none' and f['ext'] == audio_ext))# These are the minimum required fields for a merged formatyield {'format_id': f'{best_video["format_id"]}+{best_audio["format_id"]}','ext': best_video['ext'],'requested_formats': [best_video, best_audio],# Must be + separated list of protocols'protocol': f'{best_video["protocol"]}+{best_audio["protocol"]}'}ydl_opts = {'format': format_selector,}with yt_dlp.YoutubeDL(ydl_opts) as ydl:info = ydl.extract_info(URL, download=False)print(json.dumps(ydl.sanitize_info(info)))