From 95e516b8b4e75a7723a21054a634aec5c4d0c1bf Mon Sep 17 00:00:00 2001 From: doe1080 <98906116+doe1080@users.noreply.github.com> Date: Sat, 19 Jul 2025 14:31:54 +0900 Subject: [PATCH] YoutubeIE --- yt_dlp/extractor/generic.py | 108 - yt_dlp/extractor/youtube/_video.py | 2967 ++++++++++++++-------------- 2 files changed, 1491 insertions(+), 1584 deletions(-) diff --git a/yt_dlp/extractor/generic.py b/yt_dlp/extractor/generic.py index 163334eb2..3c7d58ba4 100644 --- a/yt_dlp/extractor/generic.py +++ b/yt_dlp/extractor/generic.py @@ -616,114 +616,6 @@ class GenericIE(InfoExtractor): 'view_count': int, }, 'add_ie': ['Youtube'], - }, { - # ✅40 - # YoutubeIE; embed - 'url': 'https://badzine.de/news/als-marc-zwiebler-taufik-hidayat-schlug', - 'info_dict': { - 'id': 'bSVcWOq397g', - 'ext': 'mp4', - 'title': 'TAUFIK TUNJUKKAN KELASNYA !!! : Taufik Hidayat VS Marc Zwiebler Canada Open 2011', - 'age_limit': 0, - 'availability': 'public', - 'categories': ['Sports'], - 'channel': 'Badminton Addict Id', - 'channel_follower_count': int, - 'channel_id': 'UCfCpKOwQGUe2FUJzYNadQcQ', - 'channel_url': 'https://www.youtube.com/channel/UCfCpKOwQGUe2FUJzYNadQcQ', - 'comment_count': int, - 'description': 'md5:2c3737da9a575f301a8380b4d60592a8', - 'duration': 756, - 'like_count': int, - 'live_status': 'not_live', - 'media_type': 'video', - 'playable_in_embed': True, - 'tags': 'count:9', - 'thumbnail': r're:https?://i\.ytimg\.com/vi/.+', - 'timestamp': 1621418412, - 'upload_date': '20210519', - 'uploader': 'Badminton Addict Id', - 'uploader_id': '@badmintonaddictid8958', - 'uploader_url': 'https://www.youtube.com/@badmintonaddictid8958', - 'view_count': int, - }, - }, { - # ✅41 - # YoutubeIE; WordPress Plugin: YouTube Video Importer - 'url': 'https://lothype.com/2025-chino-hills-hs-snare-quad-features-wgi2025-drumline/', - 'info_dict': { - 'id': 'lC21AX_pCfA', - 'ext': 'mp4', - 'title': '2025 Chino Hills HS Snare & Quad Features! #wgi2025 #drumline', - 'age_limit': 0, - 'availability': 'public', - 'categories': ['Music'], - 'channel': 'DrumlineAV', - 'channel_follower_count': int, - 'channel_id': 'UCqdfUdyiQOZMvW5PcTTYikQ', - 'channel_url': 'https://www.youtube.com/channel/UCqdfUdyiQOZMvW5PcTTYikQ', - 'comment_count': int, - 'description': '', - 'duration': 48, - 'like_count': int, - 'live_status': 'not_live', - 'location': 'WESTMINSTER', - 'media_type': 'short', - 'playable_in_embed': True, - 'tags': 'count:72', - 'thumbnail': r're:https?://i\.ytimg\.com/vi/.+', - 'timestamp': 1739910835, - 'upload_date': '20250218', - 'uploader': 'DrumlineAV', - 'uploader_id': '@DrumlineAV', - 'uploader_url': 'https://www.youtube.com/@DrumlineAV', - 'view_count': int, - }, - }, { - # ✅42 - # YoutubeIE; lazyYT - # https://github.com/ytdl-org/youtube-dl/commit/65f3a228b16c55fee959eee055767a796479270f - 'url': 'https://rabota7.ru/%D0%91%D1%83%D1%85%D0%B3%D0%B0%D0%BB%D1%82%D0%B5%D1%80', - 'info_dict': { - 'id': 'DexR8_tTSsQ', - 'ext': 'mp4', - 'title': 'Работа бухгалтером в Москве', - 'age_limit': 0, - 'availability': 'public', - 'categories': ['People & Blogs'], - 'channel': 'Работа в Москве свежие вакансии', - 'channel_follower_count': int, - 'channel_id': 'UCG3qz_gefGaMiSBvmaxN5WQ', - 'channel_url': 'https://www.youtube.com/channel/UCG3qz_gefGaMiSBvmaxN5WQ', - 'description': 'md5:b779d3d70af4efda26cf62b76808c0e3', - 'duration': 42, - 'like_count': int, - 'live_status': 'not_live', - 'media_type': 'video', - 'playable_in_embed': True, - 'tags': 'count:7', - 'thumbnail': r're:https?://i\.ytimg\.com/vi/.+', - 'timestamp': 1496398980, - 'upload_date': '20170602', - 'uploader': 'Работа в Москве свежие вакансии', - 'uploader_id': '@РаботавМосквесвежиевакансии', - 'uploader_url': 'https://www.youtube.com/@РаботавМосквесвежиевакансии', - 'view_count': int, - }, - 'params': {'extractor_args': {'generic': {'impersonate': ['chrome']}}}, - }, { - # ✅43 - # YoutubeIE; data-video-url= - # https://github.com/ytdl-org/youtube-dl/pull/2948 - 'url': 'https://www.uca.ac.uk/', - 'info_dict': { - 'id': 'www.uca.ac', - 'title': 'UCA | Creative Arts Degrees UK | University for the Creative Arts', - 'age_limit': 0, - 'description': 'md5:179c7a06ea1ed01b94ff5d56cb18d73b', - 'thumbnail': '/media/uca-2020/hero-headers/2025-prospectus-all-2x2.jpg', - }, - 'playlist_count': 10, }] def report_following_redirect(self, new_url): diff --git a/yt_dlp/extractor/youtube/_video.py b/yt_dlp/extractor/youtube/_video.py index fc1f087ac..218549cdd 100644 --- a/yt_dlp/extractor/youtube/_video.py +++ b/yt_dlp/extractor/youtube/_video.py @@ -264,1540 +264,1555 @@ class YoutubeIE(YoutubeBaseInfoExtractor): _GEO_BYPASS = False IE_NAME = 'youtube' - _TESTS = [ - { - 'url': 'https://www.youtube.com/watch?v=BaW_jenozKc&t=1s&end=9', - 'info_dict': { - 'id': 'BaW_jenozKc', - 'ext': 'mp4', - 'title': 'youtube-dl test video "\'/\\ä↭𝕐', - 'channel': 'Philipp Hagemeister', - 'channel_id': 'UCLqxVugv74EIW3VWh2NOa3Q', - 'channel_url': r're:https?://(?:www\.)?youtube\.com/channel/UCLqxVugv74EIW3VWh2NOa3Q', - 'upload_date': '20121002', - 'description': 'md5:8fb536f4877b8a7455c2ec23794dbc22', - 'categories': ['Science & Technology'], - 'tags': ['youtube-dl'], - 'duration': 10, - 'view_count': int, - 'like_count': int, - 'availability': 'public', - 'playable_in_embed': True, - 'thumbnail': 'https://i.ytimg.com/vi/BaW_jenozKc/maxresdefault.jpg', - 'live_status': 'not_live', - 'age_limit': 0, - 'start_time': 1, - 'end_time': 9, - 'comment_count': int, - 'channel_follower_count': int, - 'uploader': 'Philipp Hagemeister', - 'uploader_url': 'https://www.youtube.com/@PhilippHagemeister', - 'uploader_id': '@PhilippHagemeister', - 'heatmap': 'count:100', - 'timestamp': 1349198244, - }, + _TESTS = [{ + 'url': 'https://www.youtube.com/watch?v=BaW_jenozKc&t=1s&end=9', + 'info_dict': { + 'id': 'BaW_jenozKc', + 'ext': 'mp4', + 'title': 'youtube-dl test video "\'/\\ä↭𝕐', + 'age_limit': 0, + 'availability': 'public', + 'categories': ['Science & Technology'], + 'channel': 'Philipp Hagemeister', + 'channel_follower_count': int, + 'channel_id': 'UCLqxVugv74EIW3VWh2NOa3Q', + 'channel_url': 'https://www.youtube.com/channel/UCLqxVugv74EIW3VWh2NOa3Q', + 'comment_count': int, + 'description': 'md5:8fb536f4877b8a7455c2ec23794dbc22', + 'duration': 10, + 'end_time': 9, + 'heatmap': 'count:100', + 'like_count': int, + 'live_status': 'not_live', + 'playable_in_embed': True, + 'start_time': 1, + 'tags': 'count:1', + 'thumbnail': r're:https?://i\.ytimg\.com/.+', + 'timestamp': 1349198244, + 'upload_date': '20121002', + 'uploader': 'Philipp Hagemeister', + 'uploader_id': '@PhilippHagemeister', + 'uploader_url': 'https://www.youtube.com/@PhilippHagemeister', + 'view_count': int, }, - { - 'url': '//www.YouTube.com/watch?v=yZIXLfi8CZQ', - 'note': 'Embed-only video (#1746)', - 'info_dict': { - 'id': 'yZIXLfi8CZQ', - 'ext': 'mp4', - 'upload_date': '20120608', - 'title': 'Principal Sexually Assaults A Teacher - Episode 117 - 8th June 2012', - 'description': 'md5:09b78bd971f1e3e289601dfba15ca4f7', - 'age_limit': 18, - }, - 'skip': 'Private video', + 'skip': 'Video unavailable', + }, { + 'note': 'Embed-only video (#1746)', + 'url': '//www.YouTube.com/watch?v=yZIXLfi8CZQ', + 'info_dict': { + 'id': 'yZIXLfi8CZQ', + 'ext': 'mp4', + 'title': 'Principal Sexually Assaults A Teacher - Episode 117 - 8th June 2012', + 'age_limit': 18, + 'description': 'md5:09b78bd971f1e3e289601dfba15ca4f7', + 'upload_date': '20120608', }, - { - 'url': 'https://www.youtube.com/watch?v=BaW_jenozKc&v=yZIXLfi8CZQ', - 'note': 'Use the first video ID in the URL', - 'info_dict': { - 'id': 'BaW_jenozKc', - 'ext': 'mp4', - 'title': 'youtube-dl test video "\'/\\ä↭𝕐', - 'channel': 'Philipp Hagemeister', - 'channel_id': 'UCLqxVugv74EIW3VWh2NOa3Q', - 'channel_url': r're:https?://(?:www\.)?youtube\.com/channel/UCLqxVugv74EIW3VWh2NOa3Q', - 'upload_date': '20121002', - 'description': 'md5:8fb536f4877b8a7455c2ec23794dbc22', - 'categories': ['Science & Technology'], - 'tags': ['youtube-dl'], - 'duration': 10, - 'view_count': int, - 'like_count': int, - 'availability': 'public', - 'playable_in_embed': True, - 'thumbnail': 'https://i.ytimg.com/vi/BaW_jenozKc/maxresdefault.jpg', - 'live_status': 'not_live', - 'age_limit': 0, - 'comment_count': int, - 'channel_follower_count': int, - 'uploader': 'Philipp Hagemeister', - 'uploader_url': 'https://www.youtube.com/@PhilippHagemeister', - 'uploader_id': '@PhilippHagemeister', - 'heatmap': 'count:100', - 'timestamp': 1349198244, - }, - 'params': { - 'skip_download': True, - }, + 'skip': 'Private video', + }, { + 'note': 'Use the first video ID in the URL', + 'url': 'https://www.youtube.com/watch?v=BaW_jenozKc&v=yZIXLfi8CZQ', + 'info_dict': { + 'id': 'BaW_jenozKc', + 'ext': 'mp4', + 'title': 'youtube-dl test video "\'/\\ä↭𝕐', + 'age_limit': 0, + 'availability': 'public', + 'categories': ['Science & Technology'], + 'channel': 'Philipp Hagemeister', + 'channel_follower_count': int, + 'channel_id': 'UCLqxVugv74EIW3VWh2NOa3Q', + 'channel_url': 'https://www.youtube.com/channel/UCLqxVugv74EIW3VWh2NOa3Q', + 'comment_count': int, + 'description': 'md5:8fb536f4877b8a7455c2ec23794dbc22', + 'duration': 10, + 'heatmap': 'count:100', + 'like_count': int, + 'live_status': 'not_live', + 'playable_in_embed': True, + 'tags': 'count:1', + 'thumbnail': r're:https?://i\.ytimg\.com/.+', + 'timestamp': 1349198244, + 'upload_date': '20121002', + 'uploader': 'Philipp Hagemeister', + 'uploader_id': '@PhilippHagemeister', + 'uploader_url': 'https://www.youtube.com/@PhilippHagemeister', + 'view_count': int, }, - { - 'url': 'https://www.youtube.com/watch?v=a9LDPn-MO4I', - 'note': '256k DASH audio (format 141) via DASH manifest', - 'info_dict': { - 'id': 'a9LDPn-MO4I', - 'ext': 'm4a', - 'upload_date': '20121002', - 'description': '', - 'title': 'UHDTV TEST 8K VIDEO.mp4', - }, - 'params': { - 'youtube_include_dash_manifest': True, - 'format': '141', - }, - 'skip': 'format 141 not served anymore', + 'skip': 'Video unavailable', + }, { + 'note': '256k DASH audio (format 141) via DASH manifest', + 'url': 'https://www.youtube.com/watch?v=a9LDPn-MO4I', + 'info_dict': { + 'id': 'a9LDPn-MO4I', + 'ext': 'm4a', + 'title': 'UHDTV TEST 8K VIDEO.mp4', + 'age_limit': 0, + 'availability': 'public', + 'categories': ['Science & Technology'], + 'channel': '8KVIDEO', + 'channel_follower_count': int, + 'channel_id': 'UC8cn-cnCZ2FnxmjfkoLGpsQ', + 'channel_url': 'https://www.youtube.com/channel/UC8cn-cnCZ2FnxmjfkoLGpsQ', + 'comment_count': int, + 'description': '', + 'duration': 60, + 'like_count': int, + 'live_status': 'not_live', + 'media_type': 'video', + 'playable_in_embed': True, + 'tags': 'count:8', + 'thumbnail': r're:https?://i\.ytimg\.com/.+', + 'timestamp': 1349185252, + 'upload_date': '20121002', + 'uploader': '8KVIDEO', + 'uploader_id': '@8KVIDEO', + 'uploader_url': 'https://www.youtube.com/@8KVIDEO', + 'view_count': int, }, + 'params': { + 'format': '141', + 'skip_download': True, + 'youtube_include_dash_manifest': True, + }, + 'skip': 'format 141 not served anymore', + }, { # DASH manifest with encrypted signature - { - 'url': 'https://www.youtube.com/watch?v=IB3lcPjvWLA', - 'info_dict': { - 'id': 'IB3lcPjvWLA', - 'ext': 'm4a', - 'title': 'Afrojack, Spree Wilson - The Spark (Official Music Video) ft. Spree Wilson', - 'description': 'md5:8f5e2b82460520b619ccac1f509d43bf', - 'duration': 244, - 'upload_date': '20131011', - 'abr': 129.495, - 'like_count': int, - 'channel_id': 'UChuZAo1RKL85gev3Eal9_zg', - 'playable_in_embed': True, - 'channel_url': 'https://www.youtube.com/channel/UChuZAo1RKL85gev3Eal9_zg', - 'view_count': int, - 'track': 'The Spark', - 'live_status': 'not_live', - 'thumbnail': 'https://i.ytimg.com/vi_webp/IB3lcPjvWLA/maxresdefault.webp', - 'channel': 'Afrojack', - 'tags': 'count:19', - 'availability': 'public', - 'categories': ['Music'], - 'age_limit': 0, - 'alt_title': 'The Spark', - 'channel_follower_count': int, - 'uploader': 'Afrojack', - 'uploader_url': 'https://www.youtube.com/@Afrojack', - 'uploader_id': '@Afrojack', - 'media_type': 'video', - }, - 'params': { - 'youtube_include_dash_manifest': True, - 'format': '141/bestaudio[ext=m4a]', - }, + 'url': 'https://www.youtube.com/watch?v=IB3lcPjvWLA', + 'info_dict': { + 'id': 'IB3lcPjvWLA', + 'ext': 'm4a', + 'title': 'Afrojack, Spree Wilson - The Spark (Official Music Video) ft. Spree Wilson', + 'age_limit': 0, + 'availability': 'public', + 'categories': ['Music'], + 'channel': 'Afrojack', + 'channel_follower_count': int, + 'channel_id': 'UChuZAo1RKL85gev3Eal9_zg', + 'channel_is_verified': True, + 'channel_url': 'https://www.youtube.com/channel/UChuZAo1RKL85gev3Eal9_zg', + 'comment_count': int, + 'description': 'md5:8f5e2b82460520b619ccac1f509d43bf', + 'duration': 244, + 'heatmap': 'count:100', + 'like_count': int, + 'live_status': 'not_live', + 'media_type': 'video', + 'playable_in_embed': True, + 'tags': 'count:19', + 'thumbnail': r're:https?://i\.ytimg\.com/.+', + 'timestamp': 1381496404, + 'upload_date': '20131011', + 'uploader': 'Afrojack', + 'uploader_id': '@AfrojackVEVO', + 'uploader_url': 'https://www.youtube.com/@AfrojackVEVO', + 'view_count': int, }, - # Age-gate videos. See https://github.com/yt-dlp/yt-dlp/pull/575#issuecomment-888837000 - { - 'note': 'Embed allowed age-gate video; works with web_embedded', - 'url': 'https://youtube.com/watch?v=HtVdAasjOgU', - 'info_dict': { - 'id': 'HtVdAasjOgU', - 'ext': 'mp4', - 'title': 'The Witcher 3: Wild Hunt - The Sword Of Destiny Trailer', - 'description': r're:(?s).{100,}About the Game\n.*?The Witcher 3: Wild Hunt.{100,}', - 'duration': 142, - 'upload_date': '20140605', - 'age_limit': 18, - 'categories': ['Gaming'], - 'thumbnail': 'https://i.ytimg.com/vi_webp/HtVdAasjOgU/maxresdefault.webp', - 'availability': 'needs_auth', - 'channel_url': 'https://www.youtube.com/channel/UCzybXLxv08IApdjdN0mJhEg', - 'like_count': int, - 'channel': 'The Witcher', - 'live_status': 'not_live', - 'tags': 'count:17', - 'channel_id': 'UCzybXLxv08IApdjdN0mJhEg', - 'playable_in_embed': True, - 'view_count': int, - 'channel_follower_count': int, - 'uploader': 'The Witcher', - 'uploader_url': 'https://www.youtube.com/@thewitcher', - 'uploader_id': '@thewitcher', - 'comment_count': int, - 'channel_is_verified': True, - 'heatmap': 'count:100', - 'timestamp': 1401991663, - 'media_type': 'video', - }, + 'params': { + 'format': '141/bestaudio[ext=m4a]', + 'skip_download': True, + 'youtube_include_dash_manifest': True, }, - { - 'note': 'Formerly an age-gate video with embed allowed in public site', - 'url': 'https://youtube.com/watch?v=HsUATh_Nc2U', - 'info_dict': { - 'id': 'HsUATh_Nc2U', - 'ext': 'mp4', - 'title': 'Godzilla 2 (Official Video)', - 'description': 'md5:bf77e03fcae5529475e500129b05668a', - 'upload_date': '20200408', - 'age_limit': 0, - 'availability': 'public', - 'channel_id': 'UCYQT13AtrJC0gsM1far_zJg', - 'channel': 'FlyingKitty', - 'channel_url': 'https://www.youtube.com/channel/UCYQT13AtrJC0gsM1far_zJg', - 'view_count': int, - 'categories': ['Entertainment'], - 'live_status': 'not_live', - 'tags': ['Flyingkitty', 'godzilla 2'], - 'thumbnail': 'https://i.ytimg.com/vi/HsUATh_Nc2U/maxresdefault.jpg', - 'like_count': int, - 'duration': 177, - 'playable_in_embed': True, - 'channel_follower_count': int, - 'uploader': 'FlyingKitty', - 'uploader_url': 'https://www.youtube.com/@FlyingKitty900', - 'uploader_id': '@FlyingKitty900', - 'comment_count': int, - 'channel_is_verified': True, - 'media_type': 'video', - }, + }, { + # Age-gated video + # https://github.com/yt-dlp/yt-dlp/pull/575#issuecomment-888837000 + 'note': 'Embed allowed age-gated video; works with web_embedded', + 'url': 'https://youtube.com/watch?v=HtVdAasjOgU', + 'info_dict': { + 'id': 'HtVdAasjOgU', + 'ext': 'mp4', + 'title': 'The Witcher 3: Wild Hunt - The Sword Of Destiny Trailer', + 'age_limit': 18, + 'availability': 'needs_auth', + 'categories': ['Gaming'], + 'channel': 'The Witcher', + 'channel_follower_count': int, + 'channel_id': 'UCzybXLxv08IApdjdN0mJhEg', + 'channel_is_verified': True, + 'channel_url': 'https://www.youtube.com/channel/UCzybXLxv08IApdjdN0mJhEg', + 'comment_count': int, + 'description': 'md5:595a43060c51c2a8cb61dd33c18e5fbd', + 'duration': 142, + 'heatmap': 'count:100', + 'like_count': int, + 'live_status': 'not_live', + 'media_type': 'video', + 'playable_in_embed': True, + 'tags': 'count:17', + 'thumbnail': r're:https?://i\.ytimg\.com/.+', + 'timestamp': 1401991663, + 'upload_date': '20140605', + 'uploader': 'The Witcher', + 'uploader_id': '@thewitcher', + 'uploader_url': 'https://www.youtube.com/@thewitcher', + 'view_count': int, }, - { - 'note': 'Age-gate video embedable only with clientScreen=EMBED', - 'url': 'https://youtube.com/watch?v=Tq92D6wQ1mg', - 'info_dict': { - 'id': 'Tq92D6wQ1mg', - 'title': '[MMD] Adios - EVERGLOW [+Motion DL]', - 'ext': 'mp4', - 'upload_date': '20191228', - 'description': 'md5:17eccca93a786d51bc67646756894066', - 'age_limit': 18, - 'like_count': int, - 'availability': 'needs_auth', - 'channel_id': 'UC1yoRdFoFJaCY-AGfD9W0wQ', - 'view_count': int, - 'thumbnail': 'https://i.ytimg.com/vi_webp/Tq92D6wQ1mg/sddefault.webp', - 'channel': 'Projekt Melody', - 'live_status': 'not_live', - 'tags': ['mmd', 'dance', 'mikumikudance', 'kpop', 'vtuber'], - 'playable_in_embed': True, - 'categories': ['Entertainment'], - 'duration': 106, - 'channel_url': 'https://www.youtube.com/channel/UC1yoRdFoFJaCY-AGfD9W0wQ', - 'comment_count': int, - 'channel_follower_count': int, - 'uploader': 'Projekt Melody', - 'uploader_url': 'https://www.youtube.com/@ProjektMelody', - 'uploader_id': '@ProjektMelody', - 'timestamp': 1577508724, - }, - 'skip': 'Age-restricted; requires authentication', + 'params': {'skip_download': True}, + 'skip': 'Age-restricted; requires authentication', + }, { + 'note': 'Formerly an age-gated video with embed allowed in public site', + 'url': 'https://youtube.com/watch?v=HsUATh_Nc2U', + 'info_dict': { + 'id': 'HsUATh_Nc2U', + 'ext': 'mp4', + 'title': 'Godzilla 2 (Official Video)', + 'age_limit': 0, + 'availability': 'public', + 'categories': ['Entertainment'], + 'channel': 'FlyingKitty', + 'channel_follower_count': int, + 'channel_id': 'UCYQT13AtrJC0gsM1far_zJg', + 'channel_is_verified': True, + 'channel_url': 'https://www.youtube.com/channel/UCYQT13AtrJC0gsM1far_zJg', + 'comment_count': int, + 'description': 'md5:bf77e03fcae5529475e500129b05668a', + 'duration': 177, + 'heatmap': 'count:100', + 'like_count': int, + 'live_status': 'not_live', + 'media_type': 'video', + 'playable_in_embed': True, + 'tags': 'count:2', + 'thumbnail': r're:https?://i\.ytimg\.com/.+', + 'timestamp': 1586358900, + 'upload_date': '20200408', + 'uploader': 'FlyingKitty', + 'uploader_id': '@FlyingKitty900', + 'uploader_url': 'https://www.youtube.com/@FlyingKitty900', + 'view_count': int, }, - { - 'note': 'Non-Agegated non-embeddable video', - 'url': 'https://youtube.com/watch?v=MeJVWBSsPAY', - 'info_dict': { - 'id': 'MeJVWBSsPAY', - 'ext': 'mp4', - 'title': 'OOMPH! - Such Mich Find Mich (Lyrics)', - 'description': 'Fan Video. Music & Lyrics by OOMPH!.', - 'upload_date': '20130730', - 'track': 'Such mich find mich', - 'age_limit': 0, - 'tags': ['oomph', 'such mich find mich', 'lyrics', 'german industrial', 'musica industrial'], - 'like_count': int, - 'playable_in_embed': False, - 'creator': 'OOMPH!', - 'thumbnail': 'https://i.ytimg.com/vi/MeJVWBSsPAY/sddefault.jpg', - 'view_count': int, - 'alt_title': 'Such mich find mich', - 'duration': 210, - 'channel': 'Herr Lurik', - 'channel_id': 'UCdR3RSDPqub28LjZx0v9-aA', - 'categories': ['Music'], - 'availability': 'public', - 'channel_url': 'https://www.youtube.com/channel/UCdR3RSDPqub28LjZx0v9-aA', - 'live_status': 'not_live', - 'artist': 'OOMPH!', - 'channel_follower_count': int, - 'uploader': 'Herr Lurik', - 'uploader_url': 'https://www.youtube.com/@HerrLurik', - 'uploader_id': '@HerrLurik', - 'media_type': 'video', - }, + 'params': {'skip_download': True}, + }, { + 'note': 'Age-gated video embedable only with clientScreen=EMBED', + 'url': 'https://youtube.com/watch?v=Tq92D6wQ1mg', + 'info_dict': { + 'id': 'Tq92D6wQ1mg', + 'ext': 'mp4', + 'title': '[MMD] Adios - EVERGLOW [+Motion DL]', + 'age_limit': 18, + 'availability': 'needs_auth', + 'categories': ['Entertainment'], + 'channel': 'Projekt Melody', + 'channel_follower_count': int, + 'channel_id': 'UC1yoRdFoFJaCY-AGfD9W0wQ', + 'channel_url': 'https://www.youtube.com/channel/UC1yoRdFoFJaCY-AGfD9W0wQ', + 'comment_count': int, + 'description': 'md5:17eccca93a786d51bc67646756894066', + 'duration': 106, + 'like_count': int, + 'live_status': 'not_live', + 'media_type': 'video', + 'playable_in_embed': True, + 'tags': 'count:5', + 'thumbnail': r're:https?://i\.ytimg\.com/.+', + 'timestamp': 1577508724, + 'upload_date': '20191228', + 'uploader': 'Projekt Melody', + 'uploader_id': '@ProjektMelody', + 'uploader_url': 'https://www.youtube.com/@ProjektMelody', + 'view_count': int, }, - { - 'note': 'Non-bypassable age-gated video', - 'url': 'https://youtube.com/watch?v=Cr381pDsSsA', - 'only_matching': True, + 'skip': 'Age-restricted; requires authentication', + }, { + 'note': 'Non-age-gated non-embeddable video', + 'url': 'https://youtube.com/watch?v=MeJVWBSsPAY', + 'info_dict': { + 'id': 'MeJVWBSsPAY', + 'ext': 'mp4', + 'title': 'OOMPH! - Such Mich Find Mich (Lyrics)', + 'age_limit': 0, + 'availability': 'public', + 'categories': ['Music'], + 'channel': 'Herr Lurik', + 'channel_follower_count': int, + 'channel_id': 'UCdR3RSDPqub28LjZx0v9-aA', + 'channel_url': 'https://www.youtube.com/channel/UCdR3RSDPqub28LjZx0v9-aA', + 'description': 'md5:205c1049102a4dffa61e4831c1f16851', + 'duration': 210, + 'like_count': int, + 'live_status': 'not_live', + 'media_type': 'video', + 'playable_in_embed': False, + 'tags': 'count:5', + 'thumbnail': r're:https?://i\.ytimg\.com/.+', + 'timestamp': 1375214517, + 'upload_date': '20130730', + 'uploader': 'Herr Lurik', + 'uploader_id': '@HerrLurik', + 'uploader_url': 'https://www.youtube.com/@HerrLurik', + 'view_count': int, }, - # video_info is None (https://github.com/ytdl-org/youtube-dl/issues/4421) + }, { + 'note': 'Non-bypassable age-gated video', + 'url': 'https://youtube.com/watch?v=Cr381pDsSsA', + 'only_matching': True, + }, { + # video_info is None + # https://github.com/ytdl-org/youtube-dl/issues/4421 # YouTube Red ad is not captured for creator - { - 'url': '__2ABJjxzNo', - 'info_dict': { - 'id': '__2ABJjxzNo', - 'ext': 'mp4', - 'duration': 266, - 'upload_date': '20100430', - 'creator': 'deadmau5', - 'description': 'md5:6cbcd3a92ce1bc676fc4d6ab4ace2336', - 'title': 'Deadmau5 - Some Chords (HD)', - 'alt_title': 'Some Chords', - 'availability': 'public', - 'tags': 'count:14', - 'channel_id': 'UCYEK6xds6eo-3tr4xRdflmQ', - 'view_count': int, - 'live_status': 'not_live', - 'channel': 'deadmau5', - 'thumbnail': 'https://i.ytimg.com/vi_webp/__2ABJjxzNo/maxresdefault.webp', - 'like_count': int, - 'track': 'Some Chords', - 'artist': 'deadmau5', - 'playable_in_embed': True, - 'age_limit': 0, - 'channel_url': 'https://www.youtube.com/channel/UCYEK6xds6eo-3tr4xRdflmQ', - 'categories': ['Music'], - 'album': 'Some Chords', - 'channel_follower_count': int, - 'uploader': 'deadmau5', - 'uploader_url': 'https://www.youtube.com/@deadmau5', - 'uploader_id': '@deadmau5', - 'media_type': 'video', - }, - 'expected_warnings': [ - 'DASH manifest missing', - ], + 'url': '__2ABJjxzNo', + 'info_dict': { + 'id': '__2ABJjxzNo', + 'ext': 'mp4', + 'title': 'Deadmau5 - Some Chords (HD)', + 'age_limit': 0, + 'availability': 'public', + 'categories': ['Music'], + 'channel': 'deadmau5', + 'channel_follower_count': int, + 'channel_id': 'UCYEK6xds6eo-3tr4xRdflmQ', + 'channel_is_verified': True, + 'channel_url': 'https://www.youtube.com/channel/UCYEK6xds6eo-3tr4xRdflmQ', + 'comment_count': int, + 'description': 'md5:c27e1e9e095a3d9dd99de2f0f377ba06', + 'duration': 266, + 'heatmap': 'count:100', + 'like_count': int, + 'live_status': 'not_live', + 'media_type': 'video', + 'playable_in_embed': True, + 'tags': 'count:14', + 'thumbnail': r're:https?://i\.ytimg\.com/.+', + 'timestamp': 1272659179, + 'upload_date': '20100430', + 'uploader': 'deadmau5', + 'uploader_id': '@deadmau5', + 'uploader_url': 'https://www.youtube.com/@deadmau5', + 'view_count': int, }, - # Olympics (https://github.com/ytdl-org/youtube-dl/issues/4431) - { - 'url': 'lqQg6PlCWgI', - 'info_dict': { - 'id': 'lqQg6PlCWgI', - 'ext': 'mp4', - 'duration': 6085, - 'upload_date': '20150827', - 'description': 'md5:04bbbf3ccceb6795947572ca36f45904', - 'title': 'Hockey - Women - GER-AUS - London 2012 Olympic Games', - 'like_count': int, - 'release_timestamp': 1343767800, - 'playable_in_embed': True, - 'categories': ['Sports'], - 'release_date': '20120731', - 'channel': 'Olympics', - 'tags': ['Hockey', '2012-07-31', '31 July 2012', 'Riverbank Arena', 'Session', 'Olympics', 'Olympic Games', 'London 2012', '2012 Summer Olympics', 'Summer Games'], - 'channel_id': 'UCTl3QQTvqHFjurroKxexy2Q', - 'thumbnail': 'https://i.ytimg.com/vi/lqQg6PlCWgI/maxresdefault.jpg', - 'age_limit': 0, - 'availability': 'public', - 'live_status': 'was_live', - 'view_count': int, - 'channel_url': 'https://www.youtube.com/channel/UCTl3QQTvqHFjurroKxexy2Q', - 'channel_follower_count': int, - 'uploader': 'Olympics', - 'uploader_url': 'https://www.youtube.com/@Olympics', - 'uploader_id': '@Olympics', - 'channel_is_verified': True, - 'timestamp': 1440707674, - 'media_type': 'livestream', - }, - 'params': { - 'skip_download': 'requires avconv', - }, + 'expected_warnings': ['DASH manifest missing'], + 'params': {'skip_download': True}, + }, { + # https://github.com/ytdl-org/youtube-dl/issues/4431 + 'url': 'lqQg6PlCWgI', + 'info_dict': { + 'id': 'lqQg6PlCWgI', + 'ext': 'mp4', + 'title': 'Hockey - Women - GER-AUS - London 2012 Olympic Games', + 'age_limit': 0, + 'availability': 'public', + 'categories': ['Sports'], + 'channel': 'Olympics', + 'channel_follower_count': int, + 'channel_id': 'UCTl3QQTvqHFjurroKxexy2Q', + 'channel_is_verified': True, + 'channel_url': 'https://www.youtube.com/channel/UCTl3QQTvqHFjurroKxexy2Q', + 'description': 'md5:04bbbf3ccceb6795947572ca36f45904', + 'duration': 6085, + 'like_count': int, + 'live_status': 'was_live', + 'media_type': 'livestream', + 'playable_in_embed': True, + 'release_date': '20120731', + 'release_timestamp': 1343767800, + 'tags': 'count:10', + 'thumbnail': r're:https?://i\.ytimg\.com/.+', + 'timestamp': 1440707674, + 'upload_date': '20150827', + 'uploader': 'Olympics', + 'uploader_id': '@Olympics', + 'uploader_url': 'https://www.youtube.com/@Olympics', + 'view_count': int, }, + 'params': {'skip_download': True}, + }, { # Non-square pixels - { - 'url': 'https://www.youtube.com/watch?v=_b-2C3KPAM0', - 'info_dict': { - 'id': '_b-2C3KPAM0', - 'ext': 'mp4', - 'stretched_ratio': 16 / 9., - 'duration': 85, - 'upload_date': '20110310', - 'description': 'made by Wacom from Korea | 字幕&加油添醋 by TY\'s Allen | 感謝heylisa00cavey1001同學熱情提供梗及翻譯', - 'title': '[A-made] 變態妍字幕版 太妍 我就是這樣的人', - 'playable_in_embed': True, - 'channel': '孫ᄋᄅ', - 'age_limit': 0, - 'tags': 'count:11', - 'channel_url': 'https://www.youtube.com/channel/UCS-xxCmRaA6BFdmgDPA_BIw', - 'channel_id': 'UCS-xxCmRaA6BFdmgDPA_BIw', - 'thumbnail': 'https://i.ytimg.com/vi/_b-2C3KPAM0/maxresdefault.jpg', - 'view_count': int, - 'categories': ['People & Blogs'], - 'like_count': int, - 'live_status': 'not_live', - 'availability': 'unlisted', - 'comment_count': int, - 'channel_follower_count': int, - 'uploader': '孫ᄋᄅ', - 'uploader_url': 'https://www.youtube.com/@AllenMeow', - 'uploader_id': '@AllenMeow', - 'timestamp': 1299776999, - 'media_type': 'video', - }, + 'url': 'https://www.youtube.com/watch?v=_b-2C3KPAM0', + 'info_dict': { + 'id': '_b-2C3KPAM0', + 'ext': 'mp4', + 'title': '[A-made] 變態妍字幕版 太妍 我就是這樣的人', + 'age_limit': 0, + 'availability': 'unlisted', + 'categories': ['People & Blogs'], + 'channel': '孫ᄋᄅ', + 'channel_follower_count': int, + 'channel_id': 'UCS-xxCmRaA6BFdmgDPA_BIw', + 'channel_url': 'https://www.youtube.com/channel/UCS-xxCmRaA6BFdmgDPA_BIw', + 'comment_count': int, + 'description': 'md5:636f03cf211e7687daffe5bded88a94f', + 'duration': 85, + 'like_count': int, + 'live_status': 'not_live', + 'media_type': 'video', + 'playable_in_embed': True, + 'stretched_ratio': 16 / 9., + 'tags': 'count:11', + 'thumbnail': r're:https?://i\.ytimg\.com/.+', + 'timestamp': 1299776999, + 'upload_date': '20110310', + 'uploader': '孫ᄋᄅ', + 'uploader_id': '@AllenMeow', + 'uploader_url': 'https://www.youtube.com/@AllenMeow', + 'view_count': int, }, - # url_encoded_fmt_stream_map is empty string - { - 'url': 'qEJwOuvDf7I', - 'info_dict': { - 'id': 'qEJwOuvDf7I', - 'ext': 'webm', - 'title': 'Обсуждение судебной практики по выборам 14 сентября 2014 года в Санкт-Петербурге', - 'description': '', - 'upload_date': '20150404', - }, - 'params': { - 'skip_download': 'requires avconv', - }, - 'skip': 'This live event has ended.', - }, - # Extraction from multiple DASH manifests (https://github.com/ytdl-org/youtube-dl/pull/6097) - { - 'url': 'https://www.youtube.com/watch?v=FIl7x6_3R5Y', - 'info_dict': { - 'id': 'FIl7x6_3R5Y', - 'ext': 'webm', - 'title': 'md5:7b81415841e02ecd4313668cde88737a', - 'description': 'md5:116377fd2963b81ec4ce64b542173306', - 'duration': 220, - 'upload_date': '20150625', - 'formats': 'mincount:31', - }, - 'skip': 'not actual anymore', + 'params': {'skip_download': True}, + }, { + # url_encoded_fmt_stream_map is empty string (deprecated) + # https://github.com/ytdl-org/youtube-dl/commit/3a9fadd6dfc127ed0707b218b11ac10c654af1e2 + # https://github.com/ytdl-org/youtube-dl/commit/67299f23d8b1894120e875edf97440de87e22308 + 'url': 'qEJwOuvDf7I', + 'only_matching': True, + }, { + # Extraction from multiple DASH manifests + # https://github.com/ytdl-org/youtube-dl/pull/6097 + 'url': 'https://www.youtube.com/watch?v=FIl7x6_3R5Y', + 'info_dict': { + 'id': 'FIl7x6_3R5Y', + 'ext': 'mp4', + 'title': '[60fps] 150614 마마무 솔라 \'Mr. 애매모호\' 라이브 직캠 @대학로 게릴라 콘서트', + 'age_limit': 0, + 'availability': 'public', + 'categories': ['People & Blogs'], + 'channel': 'dorappi2000', + 'channel_follower_count': int, + 'channel_id': 'UCNlmrKRHLHcd2gq6LtPOTlQ', + 'channel_url': 'https://www.youtube.com/channel/UCNlmrKRHLHcd2gq6LtPOTlQ', + 'description': 'md5:116377fd2963b81ec4ce64b542173306', + 'duration': 220, + 'like_count': int, + 'live_status': 'not_live', + 'media_type': 'video', + 'playable_in_embed': True, + 'tags': 'count:12', + 'thumbnail': r're:https?://i\.ytimg\.com/.+', + 'timestamp': 1435276932, + 'upload_date': '20150626', + 'uploader': 'dorappi2000', + 'uploader_id': '@dorappi2000', + 'uploader_url': 'https://www.youtube.com/@dorappi2000', + 'view_count': int, }, + 'params': {'skip_download': True}, + }, { # DASH manifest with segment_list - { - 'url': 'https://www.youtube.com/embed/CsmdDsKjzN8', - 'md5': '8ce563a1d667b599d21064e982ab9e31', - 'info_dict': { - 'id': 'CsmdDsKjzN8', - 'ext': 'mp4', - 'upload_date': '20150501', # According to ' valid video id redirection + # https://github.com/ytdl-org/youtube-dl/pull/25063 + 'url': 'DJztXj2GPfl', + 'info_dict': { + 'id': 'DJztXj2GPfk', + 'ext': 'mp4', + 'title': 'Panjabi MC - Mundian To Bach Ke (The Dictator Soundtrack)', + 'description': 'md5:bf577a41da97918e94fa9798d9228825', + 'upload_date': '20090125', + 'artist': 'Panjabi MC', + 'track': 'Beware of the Boys (Mundian to Bach Ke) - Motivo Hi-Lectro Remix', + 'album': 'Beware of the Boys (Mundian To Bach Ke)', }, - { - 'url': 'https://www.youtube.com/watch?feature=player_embedded&amp;v=V36LpHqtcDY', - 'only_matching': True, + 'skip': 'Video unavailable', + }, { + # empty description results in an empty string + # https://github.com/ytdl-org/youtube-dl/pull/26575 + 'url': 'https://www.youtube.com/watch?v=x41yOUIvK2k', + 'info_dict': { + 'id': 'x41yOUIvK2k', + 'ext': 'mp4', + 'title': 'IMG 3456', + 'age_limit': 0, + 'availability': 'public', + 'categories': ['Pets & Animals'], + 'channel': 'l\'Or Vert asbl', + 'channel_follower_count': int, + 'channel_id': 'UCo03ZQPBW5U4UC3regpt1nw', + 'channel_url': 'https://www.youtube.com/channel/UCo03ZQPBW5U4UC3regpt1nw', + 'description': '', + 'duration': 7, + 'like_count': int, + 'live_status': 'not_live', + 'media_type': 'video', + 'playable_in_embed': True, + 'tags': [], + 'thumbnail': r're:https?://i\.ytimg\.com/.+', + 'timestamp': 1497343210, + 'upload_date': '20170613', + 'uploader': 'l\'Or Vert asbl', + 'uploader_id': '@ElevageOrVert', + 'uploader_url': 'https://www.youtube.com/@ElevageOrVert', + 'view_count': int, }, - { - # YouTube Red paid video (https://github.com/ytdl-org/youtube-dl/issues/10059) - 'url': 'https://www.youtube.com/watch?v=i1Ko8UG-Tdo', - 'only_matching': True, + 'params': {'skip_download': True}, + }, { + # with '};' inside yt initial data (see [1]) + # see [2] for an example with '};' inside ytInitialPlayerResponse + # 1. https://github.com/ytdl-org/youtube-dl/issues/27093 + # 2. https://github.com/ytdl-org/youtube-dl/issues/27216 + 'url': 'https://www.youtube.com/watch?v=CHqg6qOn4no', + 'info_dict': { + 'id': 'CHqg6qOn4no', + 'ext': 'mp4', + 'title': 'Part 77 Sort a list of simple types in c#', + 'age_limit': 0, + 'availability': 'public', + 'categories': ['Education'], + 'channel': 'kudvenkat', + 'channel_follower_count': int, + 'channel_id': 'UCCTVrRB5KpIiK6V2GGVsR1Q', + 'channel_is_verified': True, + 'channel_url': 'https://www.youtube.com/channel/UCCTVrRB5KpIiK6V2GGVsR1Q', + 'chapters': 'count:4', + 'comment_count': int, + 'description': 'md5:b8746fa52e10cdbf47997903f13b20dc', + 'duration': 522, + 'heatmap': 'count:100', + 'like_count': int, + 'live_status': 'not_live', + 'media_type': 'video', + 'playable_in_embed': True, + 'tags': 'count:12', + 'thumbnail': r're:https?://i\.ytimg\.com/.+', + 'timestamp': 1377976349, + 'upload_date': '20130831', + 'uploader': 'kudvenkat', + 'uploader_id': '@Csharp-video-tutorialsBlogspot', + 'uploader_url': 'https://www.youtube.com/@Csharp-video-tutorialsBlogspot', + 'view_count': int, }, - { - # Rental video preview - 'url': 'https://www.youtube.com/watch?v=yYr8q0y5Jfg', - 'info_dict': { - 'id': 'uGpuVWrhIzE', - 'ext': 'mp4', - 'title': 'Piku - Trailer', - 'description': 'md5:c36bd60c3fd6f1954086c083c72092eb', - 'upload_date': '20150811', - 'license': 'Standard YouTube License', - }, - 'params': { - 'skip_download': True, - }, - 'skip': 'This video is not available.', + 'params': {'skip_download': True}, + }, { + # another example of '};' in ytInitialData + 'url': 'https://www.youtube.com/watch?v=gVfgbahppCY', + 'only_matching': True, + }, { + 'url': 'https://www.youtube.com/watch_popup?v=63RmMXCd_bQ', + 'only_matching': True, + }, { + # https://github.com/ytdl-org/youtube-dl/pull/28094 + 'url': 'OtqTfy26tG0', + 'info_dict': { + 'id': 'OtqTfy26tG0', + 'ext': 'mp4', + 'title': 'Burn Out', + 'age_limit': 0, + 'album': 'Every Day', + 'alt_title': 'Burn Out', + 'artists': ['The Cinematic Orchestra'], + 'availability': 'public', + 'categories': ['Music'], + 'channel': 'The Cinematic Orchestra', + 'channel_follower_count': int, + 'channel_id': 'UCIzsJBIyo8hhpFm1NK0uLgw', + 'channel_is_verified': True, + 'channel_url': 'https://www.youtube.com/channel/UCIzsJBIyo8hhpFm1NK0uLgw', + 'comment_count': int, + 'creators': ['The Cinematic Orchestra'], + 'description': 'md5:fee8b19b7ba433cc2957d1c7582067ac', + 'duration': 614, + 'heatmap': 'count:100', + 'like_count': int, + 'live_status': 'not_live', + 'media_type': 'video', + 'playable_in_embed': True, + 'release_date': '20020513', + 'release_year': 2023, + 'tags': 'count:3', + 'thumbnail': r're:https?://i\.ytimg\.com/.+', + 'timestamp': 1416497379, + 'track': 'Burn Out', + 'upload_date': '20141120', + 'uploader': 'The Cinematic Orchestra', + 'view_count': int, }, - { - # YouTube Red video with episode data - 'url': 'https://www.youtube.com/watch?v=iqKdEhx-dD4', - 'info_dict': { - 'id': 'iqKdEhx-dD4', - 'ext': 'mp4', - 'title': 'Isolation - Mind Field (Ep 1)', - 'description': 'md5:f540112edec5d09fc8cc752d3d4ba3cd', - 'duration': 2085, - 'upload_date': '20170118', - 'series': 'Mind Field', - 'season_number': 1, - 'episode_number': 1, - 'thumbnail': 'https://i.ytimg.com/vi_webp/iqKdEhx-dD4/maxresdefault.webp', - 'tags': 'count:12', - 'view_count': int, - 'availability': 'public', - 'age_limit': 0, - 'channel': 'Vsauce', - 'episode': 'Episode 1', - 'categories': ['Entertainment'], - 'season': 'Season 1', - 'channel_id': 'UC6nSFpj9HTCZ5t-N3Rm3-HA', - 'channel_url': 'https://www.youtube.com/channel/UC6nSFpj9HTCZ5t-N3Rm3-HA', - 'like_count': int, - 'playable_in_embed': True, - 'live_status': 'not_live', - 'channel_follower_count': int, - 'uploader': 'Vsauce', - 'uploader_url': 'https://www.youtube.com/@Vsauce', - 'uploader_id': '@Vsauce', - 'comment_count': int, - 'channel_is_verified': True, - 'timestamp': 1484761047, - 'media_type': 'video', - }, - 'params': { - 'skip_download': True, - }, - 'expected_warnings': [ - 'Skipping DASH manifest', - ], + 'params': {'skip_download': True}, + }, { + # controversial video, only works with bpctr when authenticated with cookies + 'url': 'https://www.youtube.com/watch?v=nGC3D_FkCmg', + 'only_matching': True, + }, { + # controversial video, requires bpctr/contentCheckOk + 'url': 'https://www.youtube.com/watch?v=SZJvDhaSDnc', + 'info_dict': { + 'id': 'SZJvDhaSDnc', + 'ext': 'mp4', + 'title': 'San Diego teen commits suicide after bullying over embarrassing video', + 'age_limit': 18, + 'availability': 'needs_auth', + 'categories': ['News & Politics'], + 'channel': 'CBS Mornings', + 'channel_follower_count': int, + 'channel_id': 'UC-SJ6nODDmufqBzPBwCvYvQ', + 'channel_is_verified': True, + 'channel_url': 'https://www.youtube.com/channel/UC-SJ6nODDmufqBzPBwCvYvQ', + 'comment_count': int, + 'description': 'md5:acde3a73d3f133fc97e837a9f76b53b7', + 'duration': 170, + 'like_count': int, + 'live_status': 'not_live', + 'media_type': 'video', + 'playable_in_embed': True, + 'tags': 'count:5', + 'thumbnail': r're:https?://i\.ytimg\.com/.+', + 'timestamp': 1405513526, + 'upload_date': '20140716', + 'uploader': 'CBS Mornings', + 'uploader_id': '@CBSMornings', + 'uploader_url': 'https://www.youtube.com/@CBSMornings', + 'view_count': int, }, - { - # The following content has been identified by the YouTube community - # as inappropriate or offensive to some audiences. - 'url': 'https://www.youtube.com/watch?v=6SJNVb0GnPI', - 'info_dict': { - 'id': '6SJNVb0GnPI', - 'ext': 'mp4', - 'title': 'Race Differences in Intelligence', - 'description': 'md5:5d161533167390427a1f8ee89a1fc6f1', - 'duration': 965, - 'upload_date': '20140124', - }, - 'params': { - 'skip_download': True, - }, - 'skip': 'This video has been removed for violating YouTube\'s policy on hate speech.', + 'skip': 'Age-restricted; requires authentication', + }, { + # restricted location + # https://github.com/ytdl-org/youtube-dl/issues/28685 + 'url': 'cBvYw8_A0vQ', + 'info_dict': { + 'id': 'cBvYw8_A0vQ', + 'ext': 'mp4', + 'title': '4K Ueno Okachimachi Street Scenes 上野御徒町歩き', + 'age_limit': 0, + 'availability': 'public', + 'categories': ['Travel & Events'], + 'channel': 'Walk around Japan', + 'channel_follower_count': int, + 'channel_id': 'UC3o_t8PzBmXf5S9b7GLx1Mw', + 'channel_url': 'https://www.youtube.com/channel/UC3o_t8PzBmXf5S9b7GLx1Mw', + 'description': 'md5:ea770e474b7cd6722b4c95b833c03630', + 'duration': 1456, + 'live_status': 'not_live', + 'media_type': 'video', + 'playable_in_embed': True, + 'tags': 'count:5', + 'thumbnail': r're:https?://i\.ytimg\.com/.+', + 'timestamp': 1605884416, + 'upload_date': '20201120', + 'uploader': 'Walk around Japan', + 'uploader_id': '@walkaroundjapan7124', + 'uploader_url': 'https://www.youtube.com/@walkaroundjapan7124', + 'view_count': int, }, - { - # itag 212 - 'url': '1t24XAntNCY', - 'only_matching': True, + 'params': {'skip_download': True}, + }, { + # Has multiple audio streams + 'url': 'WaOKSUlf4TM', + 'only_matching': True, + }, { + # Requires Premium: has format 141 when requested using YTM url + 'url': 'https://music.youtube.com/watch?v=XclachpHxis', + 'only_matching': True, + }, { + # multiple subtitles with same lang_code + 'url': 'https://www.youtube.com/watch?v=wsQiKKfKxug', + 'only_matching': True, + }, { + # Force use android client fallback + 'url': 'https://www.youtube.com/watch?v=YOelRv7fMxY', + 'info_dict': { + 'id': 'YOelRv7fMxY', + 'ext': '3gp', + 'title': 'DIGGING A SECRET TUNNEL Part 1', + 'age_limit': 0, + 'availability': 'public', + 'categories': ['Entertainment'], + 'channel': 'colinfurze', + 'channel_follower_count': int, + 'channel_id': 'UCp68_FLety0O-n9QU6phsgw', + 'channel_is_verified': True, + 'channel_url': 'https://www.youtube.com/channel/UCp68_FLety0O-n9QU6phsgw', + 'chapters': 'count:4', + 'comment_count': int, + 'description': 'md5:5d5991195d599b56cd0c4148907eec50', + 'duration': 596, + 'heatmap': 'count:100', + 'like_count': int, + 'live_status': 'not_live', + 'media_type': 'video', + 'playable_in_embed': True, + 'tags': 'count:6', + 'thumbnail': r're:https?://i\.ytimg\.com/.+', + 'timestamp': 1624546829, + 'upload_date': '20210624', + 'uploader': 'colinfurze', + 'uploader_id': '@colinfurze', + 'uploader_url': 'https://www.youtube.com/@colinfurze', + 'view_count': int, }, - { - # geo restricted to JP - 'url': 'sJL6WA-aGkQ', - 'only_matching': True, + 'params': { + 'extractor_args': {'youtube': {'player_client': ['android']}}, + 'format': '17', # 3gp format available on android + 'skip_download': True, }, - { - 'url': 'https://invidio.us/watch?v=BaW_jenozKc', - 'only_matching': True, + 'skip': 'Android client broken', + }, { + # Skip download of additional client configs (remix client config in this case) + 'url': 'https://music.youtube.com/watch?v=MgNrAu2pzNs', + 'only_matching': True, + 'params': {'extractor_args': {'youtube': {'player_skip': ['configs']}}}, + }, { + # shorts + 'url': 'https://www.youtube.com/shorts/BGQWPY4IigY', + 'only_matching': True, + }, { + 'note': 'Storyboards', + 'url': 'https://www.youtube.com/watch?v=5KLPxDtMqe8', + 'info_dict': { + 'id': '5KLPxDtMqe8', + 'ext': 'mhtml', + 'title': 'Your Brain is Plastic', + 'age_limit': 0, + 'availability': 'public', + 'categories': ['Education'], + 'channel': 'SciShow', + 'channel_follower_count': int, + 'channel_id': 'UCZYTClx2T1of7BRZ86-8fow', + 'channel_is_verified': True, + 'channel_url': 'https://www.youtube.com/channel/UCZYTClx2T1of7BRZ86-8fow', + 'chapters': 'count:5', + 'comment_count': int, + 'description': 'md5:89cd86034bdb5466cd87c6ba206cd2bc', + 'duration': 248, + 'heatmap': 'count:100', + 'like_count': int, + 'live_status': 'not_live', + 'media_type': 'video', + 'playable_in_embed': True, + 'tags': 'count:12', + 'thumbnail': r're:https?://i\.ytimg\.com/.+', + 'timestamp': 1395685455, + 'upload_date': '20140324', + 'uploader': 'SciShow', + 'uploader_id': '@SciShow', + 'uploader_url': 'https://www.youtube.com/@SciShow', + 'view_count': int, }, - { - 'url': 'https://redirect.invidious.io/watch?v=BaW_jenozKc', - 'only_matching': True, + 'params': { + 'format': 'mhtml', + 'skip_download': True, }, - { - # from https://nitter.pussthecat.org/YouTube/status/1360363141947944964#m - 'url': 'https://redirect.invidious.io/Yh0AhrY9GjA', - 'only_matching': True, + }, { + # Ensure video upload_date is in UTC timezone (video was uploaded 1641170939) + 'url': 'https://www.youtube.com/watch?v=2NUZ8W2llS4', + 'info_dict': { + 'id': '2NUZ8W2llS4', + 'ext': 'mp4', + 'title': 'The NP that test your phone performance 🙂', + 'age_limit': 0, + 'availability': 'public', + 'categories': ['Gaming'], + 'channel': 'Leon Nguyen', + 'channel_follower_count': int, + 'channel_id': 'UCRqNBSOHgilHfAczlUmlWHA', + 'channel_url': 'https://www.youtube.com/channel/UCRqNBSOHgilHfAczlUmlWHA', + 'comment_count': int, + 'description': 'md5:144494b24d4f9dfacb97c1bbef5de84d', + 'duration': 21, + 'heatmap': 'count:100', + 'like_count': int, + 'live_status': 'not_live', + 'media_type': 'video', + 'playable_in_embed': True, + 'tags': 'count:23', + 'thumbnail': r're:https?://i\.ytimg\.com/.+', + 'timestamp': 1641170939, + 'upload_date': '20220103', + 'uploader': 'Leon Nguyen', + 'uploader_id': '@LeonNguyen', + 'uploader_url': 'https://www.youtube.com/@LeonNguyen', + 'view_count': int, }, - { - # DRM protected - 'url': 'https://www.youtube.com/watch?v=s7_qI6_mIXc', - 'only_matching': True, + 'params': {'skip_download': True}, + }, { + # date text is premiered video, ensure upload date in UTC (published 1641172509) + 'url': 'https://www.youtube.com/watch?v=mzZzzBU6lrM', + 'info_dict': { + 'id': 'mzZzzBU6lrM', + 'ext': 'mp4', + 'title': 'I Met GeorgeNotFound In Real Life...', + 'age_limit': 0, + 'availability': 'public', + 'categories': ['Entertainment'], + 'channel': 'Quackity', + 'channel_follower_count': int, + 'channel_id': 'UC_8NknAFiyhOUaZqHR3lq3Q', + 'channel_is_verified': True, + 'channel_url': 'https://www.youtube.com/channel/UC_8NknAFiyhOUaZqHR3lq3Q', + 'comment_count': int, + 'description': 'md5:42e72df3d4d5965903a2b9359c3ccd25', + 'duration': 955, + 'heatmap': 'count:100', + 'like_count': int, + 'live_status': 'not_live', + 'media_type': 'video', + 'playable_in_embed': True, + 'release_date': '20220103', + 'release_timestamp': 1641172509, + 'tags': 'count:26', + 'thumbnail': r're:https?://i\.ytimg\.com/.+', + 'timestamp': 1641172509, + 'upload_date': '20220103', + 'uploader': 'Quackity', + 'uploader_id': '@Quackity', + 'uploader_url': 'https://www.youtube.com/@Quackity', + 'view_count': int, }, - { - # Video with unsupported adaptive stream type formats - 'url': 'https://www.youtube.com/watch?v=Z4Vy8R84T1U', - 'info_dict': { - 'id': 'Z4Vy8R84T1U', - 'ext': 'mp4', - 'title': 'saman SMAN 53 Jakarta(Sancety) opening COFFEE4th at SMAN 53 Jakarta', - 'description': 'md5:d41d8cd98f00b204e9800998ecf8427e', - 'duration': 433, - 'upload_date': '20130923', - 'formats': 'maxcount:10', - }, - 'params': { - 'skip_download': True, - 'youtube_include_dash_manifest': False, - }, - 'skip': 'not actual anymore', + 'params': {'skip_download': True}, + }, { + # continuous livestream. + # Upload date was 2022-07-12T05:12:29-07:00, while stream start is 2022-07-12T15:59:30+00:00 + 'url': 'https://www.youtube.com/watch?v=jfKfPfyJRdk', + 'info_dict': { + 'id': 'jfKfPfyJRdk', + 'ext': 'mp4', + 'title': str, + 'age_limit': 0, + 'availability': 'public', + 'categories': ['Music'], + 'channel': 'Lofi Girl', + 'channel_follower_count': int, + 'channel_id': 'UCSJ4gkVC6NrvII8umztf0Ow', + 'channel_is_verified': True, + 'channel_url': 'https://www.youtube.com/channel/UCSJ4gkVC6NrvII8umztf0Ow', + 'concurrent_view_count': int, + 'description': 'md5:48841fcfc1be6131d729fa7b4a7784cb', + 'like_count': int, + 'live_status': 'is_live', + 'media_type': 'livestream', + 'playable_in_embed': True, + 'release_date': '20220712', + 'release_timestamp': 1657641570, + 'tags': 'count:32', + 'thumbnail': r're:https?://i\.ytimg\.com/.+', + 'timestamp': 1657627949, + 'upload_date': '20220712', + 'uploader': 'Lofi Girl', + 'uploader_id': '@LofiGirl', + 'uploader_url': 'https://www.youtube.com/@LofiGirl', + 'view_count': int, }, - { - # Youtube Music Auto-generated description - # TODO: fix metadata extraction - 'url': 'https://music.youtube.com/watch?v=MgNrAu2pzNs', - 'info_dict': { - 'id': 'MgNrAu2pzNs', - 'ext': 'mp4', - 'title': 'Voyeur Girl', - 'description': 'md5:7ae382a65843d6df2685993e90a8628f', - 'upload_date': '20190312', - 'artists': ['Stephen'], - 'creators': ['Stephen'], - 'track': 'Voyeur Girl', - 'album': 'it\'s too much love to know my dear', - 'release_date': '20190313', - 'alt_title': 'Voyeur Girl', - 'view_count': int, - 'playable_in_embed': True, - 'like_count': int, - 'categories': ['Music'], - 'channel_url': 'https://www.youtube.com/channel/UC-pWHpBjdGG69N9mM2auIAA', - 'channel': 'Stephen', # TODO: should be "Stephen - Topic" - 'uploader': 'Stephen', - 'availability': 'public', - 'duration': 169, - 'thumbnail': 'https://i.ytimg.com/vi_webp/MgNrAu2pzNs/maxresdefault.webp', - 'age_limit': 0, - 'channel_id': 'UC-pWHpBjdGG69N9mM2auIAA', - 'tags': 'count:11', - 'live_status': 'not_live', - 'channel_follower_count': int, - 'media_type': 'video', - }, - 'params': { - 'skip_download': True, - }, + 'params': {'skip_download': True}, + }, { + 'url': 'https://www.youtube.com/watch?v=tjjjtzRLHvA', + 'info_dict': { + 'id': 'tjjjtzRLHvA', + 'ext': 'mp4', + 'title': 'ハッシュタグ無し };if window.ytcsi', + 'age_limit': 0, + 'availability': 'unlisted', + 'categories': ['Music'], + 'channel': 'Lesmiscore', + 'channel_follower_count': int, + 'channel_id': 'UCdqltm_7iv1Vs6kp6Syke5A', + 'channel_url': 'https://www.youtube.com/channel/UCdqltm_7iv1Vs6kp6Syke5A', + 'description': '', + 'duration': 6, + 'like_count': int, + 'live_status': 'not_live', + 'media_type': 'short', + 'playable_in_embed': True, + 'tags': [], + 'thumbnail': r're:https?://i\.ytimg\.com/.+', + 'timestamp': 1648005313, + 'upload_date': '20220323', + 'uploader': 'Lesmiscore', + 'uploader_id': '@lesmiscore', + 'uploader_url': 'https://www.youtube.com/@lesmiscore', + 'view_count': int, }, - { - 'url': 'https://www.youtubekids.com/watch?v=3b8nCWDgZ6Q', - 'only_matching': True, + 'params': {'skip_download': True}, + }, { + # Prefer primary title+description language metadata by default + # Do not prefer translated description if primary is empty + 'url': 'https://www.youtube.com/watch?v=el3E4MbxRqQ', + 'info_dict': { + 'id': 'el3E4MbxRqQ', + 'ext': 'mp4', + 'title': 'dlp test video 2 - primary sv no desc', + 'age_limit': 0, + 'availability': 'unlisted', + 'categories': ['People & Blogs'], + 'channel': 'cole-dlp-test-acc', + 'channel_id': 'UCiu-3thuViMebBjw_5nWYrA', + 'channel_url': 'https://www.youtube.com/channel/UCiu-3thuViMebBjw_5nWYrA', + 'description': '', + 'duration': 5, + 'like_count': int, + 'live_status': 'not_live', + 'media_type': 'video', + 'playable_in_embed': True, + 'tags': [], + 'thumbnail': r're:https?://i\.ytimg\.com/.+', + 'timestamp': 1662677394, + 'upload_date': '20220908', + 'uploader': 'cole-dlp-test-acc', + 'uploader_id': '@coletdjnz', + 'uploader_url': 'https://www.youtube.com/@coletdjnz', + 'view_count': int, }, - { - # invalid -> valid video id redirection - 'url': 'DJztXj2GPfl', - 'info_dict': { - 'id': 'DJztXj2GPfk', - 'ext': 'mp4', - 'title': 'Panjabi MC - Mundian To Bach Ke (The Dictator Soundtrack)', - 'description': 'md5:bf577a41da97918e94fa9798d9228825', - 'upload_date': '20090125', - 'artist': 'Panjabi MC', - 'track': 'Beware of the Boys (Mundian to Bach Ke) - Motivo Hi-Lectro Remix', - 'album': 'Beware of the Boys (Mundian To Bach Ke)', - }, - 'params': { - 'skip_download': True, - }, - 'skip': 'Video unavailable', + 'params': {'skip_download': True}, + }, { + # Extractor argument: prefer translated title+description + 'url': 'https://www.youtube.com/watch?v=gHKT4uU8Zng', + 'info_dict': { + 'id': 'gHKT4uU8Zng', + 'ext': 'mp4', + 'title': 'dlp test video title primary (en-GB)', + 'age_limit': 0, + 'availability': 'public', + 'categories': ['People & Blogs'], + 'channel': 'cole-dlp-test-acc', + 'channel_id': 'UCiu-3thuViMebBjw_5nWYrA', + 'channel_url': 'https://www.youtube.com/channel/UCiu-3thuViMebBjw_5nWYrA', + 'description': 'md5:e8c098ba19888e08554f960ffbf6f90e', + 'duration': 5, + 'like_count': int, + 'live_status': 'not_live', + 'media_type': 'video', + 'playable_in_embed': True, + 'tags': [], + 'thumbnail': r're:https?://i\.ytimg\.com/.+', + 'timestamp': 1659073275, + 'upload_date': '20220729', + 'uploader': 'cole-dlp-test-acc', + 'uploader_id': '@coletdjnz', + 'uploader_url': 'https://www.youtube.com/@coletdjnz', + 'view_count': int, }, - { - # empty description results in an empty string - 'url': 'https://www.youtube.com/watch?v=x41yOUIvK2k', - 'info_dict': { - 'id': 'x41yOUIvK2k', - 'ext': 'mp4', - 'title': 'IMG 3456', - 'description': '', - 'upload_date': '20170613', - 'view_count': int, - 'thumbnail': 'https://i.ytimg.com/vi_webp/x41yOUIvK2k/maxresdefault.webp', - 'like_count': int, - 'channel_id': 'UCo03ZQPBW5U4UC3regpt1nw', - 'tags': [], - 'channel_url': 'https://www.youtube.com/channel/UCo03ZQPBW5U4UC3regpt1nw', - 'availability': 'public', - 'age_limit': 0, - 'categories': ['Pets & Animals'], - 'duration': 7, - 'playable_in_embed': True, - 'live_status': 'not_live', - 'channel': 'l\'Or Vert asbl', - 'channel_follower_count': int, - 'uploader': 'l\'Or Vert asbl', - 'uploader_url': 'https://www.youtube.com/@ElevageOrVert', - 'uploader_id': '@ElevageOrVert', - 'timestamp': 1497343210, - 'media_type': 'video', - }, - 'params': { - 'skip_download': True, - }, + 'params': { + 'extractor_args': {'youtube': {'lang': ['fr']}}, + 'skip_download': True, }, - { - # with '};' inside yt initial data (see [1]) - # see [2] for an example with '};' inside ytInitialPlayerResponse - # 1. https://github.com/ytdl-org/youtube-dl/issues/27093 - # 2. https://github.com/ytdl-org/youtube-dl/issues/27216 - 'url': 'https://www.youtube.com/watch?v=CHqg6qOn4no', - 'info_dict': { - 'id': 'CHqg6qOn4no', - 'ext': 'mp4', - 'title': 'Part 77 Sort a list of simple types in c#', - 'description': 'md5:b8746fa52e10cdbf47997903f13b20dc', - 'upload_date': '20130831', - 'channel_id': 'UCCTVrRB5KpIiK6V2GGVsR1Q', - 'like_count': int, - 'channel_url': 'https://www.youtube.com/channel/UCCTVrRB5KpIiK6V2GGVsR1Q', - 'live_status': 'not_live', - 'categories': ['Education'], - 'availability': 'public', - 'thumbnail': 'https://i.ytimg.com/vi/CHqg6qOn4no/sddefault.jpg', - 'tags': 'count:12', - 'playable_in_embed': True, - 'age_limit': 0, - 'view_count': int, - 'duration': 522, - 'channel': 'kudvenkat', - 'comment_count': int, - 'channel_follower_count': int, - 'chapters': list, - 'uploader': 'kudvenkat', - 'uploader_url': 'https://www.youtube.com/@Csharp-video-tutorialsBlogspot', - 'uploader_id': '@Csharp-video-tutorialsBlogspot', - 'channel_is_verified': True, - 'heatmap': 'count:100', - 'timestamp': 1377976349, - 'media_type': 'video', - }, - 'params': { - 'skip_download': True, - }, + 'expected_warnings': [r'Preferring "fr" translated fields'], + }, { + 'note': '6 channel audio', + 'url': 'https://www.youtube.com/watch?v=zgdo7-RRjgo', + 'only_matching': True, + }, { + 'note': 'Multiple HLS formats with same itag', + 'url': 'https://www.youtube.com/watch?v=kX3nB4PpJko', + 'info_dict': { + 'id': 'kX3nB4PpJko', + 'ext': 'mp4', + 'title': 'Last To Take Hand Off Jet, Keeps It!', + 'age_limit': 0, + 'availability': 'public', + 'categories': ['Entertainment'], + 'channel': 'MrBeast', + 'channel_follower_count': int, + 'channel_id': 'UCX6OQ3DkcsbYNE6H8uQQuVA', + 'channel_is_verified': True, + 'channel_url': 'https://www.youtube.com/channel/UCX6OQ3DkcsbYNE6H8uQQuVA', + 'comment_count': int, + 'description': 'md5:42731fced13eff2c48c099fbb5c1b3a0', + 'duration': 937, + 'heatmap': 'count:100', + 'like_count': int, + 'live_status': 'not_live', + 'media_type': 'video', + 'playable_in_embed': True, + 'tags': [], + 'thumbnail': r're:https?://i\.ytimg\.com/.+', + 'timestamp': 1668286800, + 'upload_date': '20221112', + 'uploader': 'MrBeast', + 'uploader_id': '@MrBeast', + 'uploader_url': 'https://www.youtube.com/@MrBeast', + 'view_count': int, }, - { - # another example of '};' in ytInitialData - 'url': 'https://www.youtube.com/watch?v=gVfgbahppCY', - 'only_matching': True, + 'params': { + 'extractor_args': {'youtube': {'player_client': ['ios']}}, + 'format': '233-1', + 'skip_download': True, }, - { - 'url': 'https://www.youtube.com/watch_popup?v=63RmMXCd_bQ', - 'only_matching': True, + 'skip': 'PO Token Required', + }, { + 'note': 'Audio formats with Dynamic Range Compression', + 'url': 'https://www.youtube.com/watch?v=Tq92D6wQ1mg', + 'info_dict': { + 'id': 'Tq92D6wQ1mg', + 'ext': 'webm', + 'title': '[MMD] Adios - EVERGLOW [+Motion DL]', + 'age_limit': 18, + 'availability': 'needs_auth', + 'categories': ['Entertainment'], + 'channel': 'Projekt Melody', + 'channel_follower_count': int, + 'channel_id': 'UC1yoRdFoFJaCY-AGfD9W0wQ', + 'channel_url': 'https://www.youtube.com/channel/UC1yoRdFoFJaCY-AGfD9W0wQ', + 'comment_count': int, + 'description': 'md5:17eccca93a786d51bc67646756894066', + 'duration': 106, + 'like_count': int, + 'live_status': 'not_live', + 'media_type': 'video', + 'playable_in_embed': True, + 'tags': 'count:5', + 'thumbnail': r're:https?://i\.ytimg\.com/.+', + 'timestamp': 1577508724, + 'upload_date': '20191228', + 'uploader': 'Projekt Melody', + 'uploader_id': '@ProjektMelody', + 'uploader_url': 'https://www.youtube.com/@ProjektMelody', + 'view_count': int, }, - { - # https://github.com/ytdl-org/youtube-dl/pull/28094 - 'url': 'OtqTfy26tG0', - 'info_dict': { - 'id': 'OtqTfy26tG0', - 'ext': 'mp4', - 'title': 'Burn Out', - 'description': 'md5:8d07b84dcbcbfb34bc12a56d968b6131', - 'upload_date': '20141120', - 'artist': 'The Cinematic Orchestra', - 'track': 'Burn Out', - 'album': 'Every Day', - 'like_count': int, - 'live_status': 'not_live', - 'alt_title': 'Burn Out', - 'duration': 614, - 'age_limit': 0, - 'view_count': int, - 'channel_url': 'https://www.youtube.com/channel/UCIzsJBIyo8hhpFm1NK0uLgw', - 'creator': 'The Cinematic Orchestra', - 'channel': 'The Cinematic Orchestra', - 'tags': ['The Cinematic Orchestra', 'Every Day', 'Burn Out'], - 'channel_id': 'UCIzsJBIyo8hhpFm1NK0uLgw', - 'availability': 'public', - 'thumbnail': 'https://i.ytimg.com/vi/OtqTfy26tG0/maxresdefault.jpg', - 'categories': ['Music'], - 'playable_in_embed': True, - 'channel_follower_count': int, - 'uploader': 'The Cinematic Orchestra', - 'comment_count': int, - 'media_type': 'video', - }, - 'params': { - 'skip_download': True, - }, + 'params': { + 'extractor_args': {'youtube': {'player_client': ['tv_embedded']}}, + 'format': '251-drc', + 'skip_download': True, }, - { - # controversial video, only works with bpctr when authenticated with cookies - 'url': 'https://www.youtube.com/watch?v=nGC3D_FkCmg', - 'only_matching': True, + 'skip': 'Age-restricted; requires authentication', + }, { + 'note': 'Support /live/ URL + media type for post-live content', + 'url': 'https://www.youtube.com/live/qVv6vCqciTM', + 'info_dict': { + 'id': 'qVv6vCqciTM', + 'ext': 'mp4', + 'title': '【 #インターネット女クリスマス 】3Dで歌ってはしゃぐインターネットの女たち【月ノ美兎/名取さな】', + 'age_limit': 0, + 'availability': 'public', + 'categories': ['Entertainment'], + 'channel': 'さなちゃんねる', + 'channel_follower_count': int, + 'channel_id': 'UCIdEIHpS0TdkqRkHL5OkLtA', + 'channel_is_verified': True, + 'channel_url': 'https://www.youtube.com/channel/UCIdEIHpS0TdkqRkHL5OkLtA', + 'chapters': 'count:13', + 'comment_count': int, + 'description': 'md5:6aebf95cc4a1d731aebc01ad6cc9806d', + 'duration': 4438, + 'heatmap': 'count:100', + 'like_count': int, + 'live_status': 'was_live', + 'media_type': 'livestream', + 'playable_in_embed': True, + 'release_date': '20221223', + 'release_timestamp': 1671793345, + 'tags': 'count:6', + 'thumbnail': r're:https?://i\.ytimg\.com/.+', + 'timestamp': 1671798112, + 'upload_date': '20221223', + 'uploader': 'さなちゃんねる', + 'uploader_id': '@sana_natori', + 'uploader_url': 'https://www.youtube.com/@sana_natori', + 'view_count': int, }, - { - # controversial video, requires bpctr/contentCheckOk - 'url': 'https://www.youtube.com/watch?v=SZJvDhaSDnc', - 'info_dict': { - 'id': 'SZJvDhaSDnc', - 'ext': 'mp4', - 'title': 'San Diego teen commits suicide after bullying over embarrassing video', - 'channel_id': 'UC-SJ6nODDmufqBzPBwCvYvQ', - 'upload_date': '20140716', - 'description': 'md5:acde3a73d3f133fc97e837a9f76b53b7', - 'duration': 170, - 'categories': ['News & Politics'], - 'view_count': int, - 'channel': 'CBS Mornings', - 'tags': ['suicide', 'bullying', 'video', 'cbs', 'news'], - 'thumbnail': 'https://i.ytimg.com/vi/SZJvDhaSDnc/hqdefault.jpg', - 'age_limit': 18, - 'availability': 'needs_auth', - 'channel_url': 'https://www.youtube.com/channel/UC-SJ6nODDmufqBzPBwCvYvQ', - 'like_count': int, - 'live_status': 'not_live', - 'playable_in_embed': True, - 'channel_follower_count': int, - 'uploader': 'CBS Mornings', - 'uploader_url': 'https://www.youtube.com/@CBSMornings', - 'uploader_id': '@CBSMornings', - 'comment_count': int, - 'channel_is_verified': True, - 'timestamp': 1405513526, - }, - 'skip': 'Age-restricted; requires authentication', + 'params': {'skip_download': True}, + }, { + # Fallbacks when webpage and web client is unavailable + 'url': 'https://www.youtube.com/watch?v=wSSmNUl9Snw', + 'info_dict': { + 'id': 'wSSmNUl9Snw', + 'ext': 'webm', + 'title': 'The Computer Hack That Saved Apollo 14', + 'age_limit': 0, + # 'availability': 'public', + # 'categories': ['Science & Technology'], + 'channel': 'Scott Manley', + 'channel_follower_count': int, + 'channel_id': 'UCxzC4EngIsMrPmbm6Nxvb-A', + 'channel_is_verified': True, + 'channel_url': 'https://www.youtube.com/channel/UCxzC4EngIsMrPmbm6Nxvb-A', + 'chapters': 'count:2', + 'comment_count': int, + 'description': 'md5:f4bed7b200404b72a394c2f97b782c02', + 'duration': 682, + 'heatmap': 'count:100', + 'like_count': int, + 'live_status': 'not_live', + 'media_type': 'video', + 'playable_in_embed': True, + 'tags': 'count:8', + 'thumbnail': r're:https?://i\.ytimg\.com/.+', + 'timestamp': 1504198713, + 'upload_date': '20170831', + 'uploader': 'Scott Manley', + 'uploader_id': '@scottmanley', + 'uploader_url': 'https://www.youtube.com/@scottmanley', + 'view_count': int, }, - { - # restricted location, https://github.com/ytdl-org/youtube-dl/issues/28685 - 'url': 'cBvYw8_A0vQ', - 'info_dict': { - 'id': 'cBvYw8_A0vQ', - 'ext': 'mp4', - 'title': '4K Ueno Okachimachi Street Scenes 上野御徒町歩き', - 'description': 'md5:ea770e474b7cd6722b4c95b833c03630', - 'upload_date': '20201120', - 'duration': 1456, - 'categories': ['Travel & Events'], - 'channel_id': 'UC3o_t8PzBmXf5S9b7GLx1Mw', - 'view_count': int, - 'channel': 'Walk around Japan', - 'tags': ['Ueno Tokyo', 'Okachimachi Tokyo', 'Ameyoko Street', 'Tokyo attraction', 'Travel in Tokyo'], - 'thumbnail': 'https://i.ytimg.com/vi/cBvYw8_A0vQ/hqdefault.jpg', - 'age_limit': 0, - 'availability': 'public', - 'channel_url': 'https://www.youtube.com/channel/UC3o_t8PzBmXf5S9b7GLx1Mw', - 'live_status': 'not_live', - 'playable_in_embed': True, - 'channel_follower_count': int, - 'uploader': 'Walk around Japan', - 'uploader_url': 'https://www.youtube.com/@walkaroundjapan7124', - 'uploader_id': '@walkaroundjapan7124', - 'timestamp': 1605884416, - 'media_type': 'video', - }, - 'params': { - 'skip_download': True, - }, - }, { - # Has multiple audio streams - 'url': 'WaOKSUlf4TM', - 'only_matching': True, - }, { - # Requires Premium: has format 141 when requested using YTM url - 'url': 'https://music.youtube.com/watch?v=XclachpHxis', - 'only_matching': True, - }, { - # multiple subtitles with same lang_code - 'url': 'https://www.youtube.com/watch?v=wsQiKKfKxug', - 'only_matching': True, - }, { - # Force use android client fallback - 'url': 'https://www.youtube.com/watch?v=YOelRv7fMxY', - 'info_dict': { - 'id': 'YOelRv7fMxY', - 'title': 'DIGGING A SECRET TUNNEL Part 1', - 'ext': '3gp', - 'upload_date': '20210624', - 'channel_id': 'UCp68_FLety0O-n9QU6phsgw', - 'channel_url': r're:https?://(?:www\.)?youtube\.com/channel/UCp68_FLety0O-n9QU6phsgw', - 'description': 'md5:5d5991195d599b56cd0c4148907eec50', - 'duration': 596, - 'categories': ['Entertainment'], - 'view_count': int, - 'channel': 'colinfurze', - 'tags': ['Colin', 'furze', 'Terry', 'tunnel', 'underground', 'bunker'], - 'thumbnail': 'https://i.ytimg.com/vi/YOelRv7fMxY/maxresdefault.jpg', - 'age_limit': 0, - 'availability': 'public', - 'like_count': int, - 'live_status': 'not_live', - 'playable_in_embed': True, - 'channel_follower_count': int, - 'chapters': list, - 'uploader': 'colinfurze', - 'uploader_url': 'https://www.youtube.com/@colinfurze', - 'uploader_id': '@colinfurze', - 'comment_count': int, - 'channel_is_verified': True, - 'heatmap': 'count:100', - }, - 'params': { - 'format': '17', # 3gp format available on android - 'extractor_args': {'youtube': {'player_client': ['android']}}, - }, - 'skip': 'android client broken', + 'params': { + 'extractor_args': {'youtube': { + 'player_client': ['ios'], + 'player_skip': ['webpage'], + }}, + 'skip_download': True, }, - { - # Skip download of additional client configs (remix client config in this case) - 'url': 'https://music.youtube.com/watch?v=MgNrAu2pzNs', - 'only_matching': True, - 'params': { - 'extractor_args': {'youtube': {'player_skip': ['configs']}}, - }, - }, { - # shorts - 'url': 'https://www.youtube.com/shorts/BGQWPY4IigY', - 'only_matching': True, - }, { - 'note': 'Storyboards', - 'url': 'https://www.youtube.com/watch?v=5KLPxDtMqe8', - 'info_dict': { - 'id': '5KLPxDtMqe8', - 'ext': 'mhtml', - 'format_id': 'sb0', - 'title': 'Your Brain is Plastic', - 'description': 'md5:89cd86034bdb5466cd87c6ba206cd2bc', - 'upload_date': '20140324', - 'like_count': int, - 'channel_id': 'UCZYTClx2T1of7BRZ86-8fow', - 'channel_url': 'https://www.youtube.com/channel/UCZYTClx2T1of7BRZ86-8fow', - 'view_count': int, - 'thumbnail': 'https://i.ytimg.com/vi/5KLPxDtMqe8/maxresdefault.jpg', - 'playable_in_embed': True, - 'tags': 'count:12', - 'availability': 'public', - 'channel': 'SciShow', - 'live_status': 'not_live', - 'duration': 248, - 'categories': ['Education'], - 'age_limit': 0, - 'channel_follower_count': int, - 'chapters': list, - 'uploader': 'SciShow', - 'uploader_url': 'https://www.youtube.com/@SciShow', - 'uploader_id': '@SciShow', - 'comment_count': int, - 'channel_is_verified': True, - 'heatmap': 'count:100', - 'timestamp': 1395685455, - 'media_type': 'video', - }, 'params': {'format': 'mhtml', 'skip_download': True}, - }, { - # Ensure video upload_date is in UTC timezone (video was uploaded 1641170939) - 'url': 'https://www.youtube.com/watch?v=2NUZ8W2llS4', - 'info_dict': { - 'id': '2NUZ8W2llS4', - 'ext': 'mp4', - 'title': 'The NP that test your phone performance 🙂', - 'description': 'md5:144494b24d4f9dfacb97c1bbef5de84d', - 'channel_id': 'UCRqNBSOHgilHfAczlUmlWHA', - 'channel_url': 'https://www.youtube.com/channel/UCRqNBSOHgilHfAczlUmlWHA', - 'duration': 21, - 'view_count': int, - 'age_limit': 0, - 'categories': ['Gaming'], - 'tags': 'count:23', - 'playable_in_embed': True, - 'live_status': 'not_live', - 'upload_date': '20220103', - 'like_count': int, - 'availability': 'public', - 'channel': 'Leon Nguyen', - 'thumbnail': 'https://i.ytimg.com/vi_webp/2NUZ8W2llS4/maxresdefault.webp', - 'comment_count': int, - 'channel_follower_count': int, - 'uploader': 'Leon Nguyen', - 'uploader_url': 'https://www.youtube.com/@LeonNguyen', - 'uploader_id': '@LeonNguyen', - 'heatmap': 'count:100', - 'timestamp': 1641170939, - 'media_type': 'video', - }, - }, { - # date text is premiered video, ensure upload date in UTC (published 1641172509) - 'url': 'https://www.youtube.com/watch?v=mzZzzBU6lrM', - 'info_dict': { - 'id': 'mzZzzBU6lrM', - 'ext': 'mp4', - 'title': 'I Met GeorgeNotFound In Real Life...', - 'description': 'md5:978296ec9783a031738b684d4ebf302d', - 'channel_id': 'UC_8NknAFiyhOUaZqHR3lq3Q', - 'channel_url': 'https://www.youtube.com/channel/UC_8NknAFiyhOUaZqHR3lq3Q', - 'duration': 955, - 'view_count': int, - 'age_limit': 0, - 'categories': ['Entertainment'], - 'tags': 'count:26', - 'playable_in_embed': True, - 'live_status': 'not_live', - 'release_timestamp': 1641172509, - 'release_date': '20220103', - 'upload_date': '20220103', - 'like_count': int, - 'availability': 'public', - 'channel': 'Quackity', - 'thumbnail': 'https://i.ytimg.com/vi/mzZzzBU6lrM/maxresdefault.jpg', - 'channel_follower_count': int, - 'uploader': 'Quackity', - 'uploader_id': '@Quackity', - 'uploader_url': 'https://www.youtube.com/@Quackity', - 'comment_count': int, - 'channel_is_verified': True, - 'heatmap': 'count:100', - 'timestamp': 1641172509, - 'media_type': 'video', - }, + 'skip': 'PO Token Required', + }, { + # uploader_id has non-ASCII characters that are percent-encoded in YT's JSON + # https://github.com/yt-dlp/yt-dlp/pull/11818 + 'url': 'https://www.youtube.com/shorts/18NGQq7p3LY', + 'info_dict': { + 'id': '18NGQq7p3LY', + 'ext': 'mp4', + 'title': '아이브 이서 장원영 리즈 삐끼삐끼 챌린지', + 'age_limit': 0, + 'availability': 'public', + 'categories': ['People & Blogs'], + 'channel': 'ㅇㅇ', + 'channel_follower_count': int, + 'channel_id': 'UCC25oTm2J7ZVoi5TngOHg9g', + 'channel_url': 'https://www.youtube.com/channel/UCC25oTm2J7ZVoi5TngOHg9g', + 'description': '', + 'duration': 3, + 'like_count': int, + 'live_status': 'not_live', + 'media_type': 'short', + 'playable_in_embed': True, + 'tags': [], + 'thumbnail': r're:https?://i\.ytimg\.com/.+', + 'timestamp': 1724306170, + 'upload_date': '20240822', + 'uploader': 'ㅇㅇ', + 'uploader_id': '@으아-v1k', + 'uploader_url': 'https://www.youtube.com/@으아-v1k', + 'view_count': int, }, - { # continuous livestream. - # Upload date was 2022-07-12T05:12:29-07:00, while stream start is 2022-07-12T15:59:30+00:00 - 'url': 'https://www.youtube.com/watch?v=jfKfPfyJRdk', - 'info_dict': { - 'id': 'jfKfPfyJRdk', - 'ext': 'mp4', - 'channel_id': 'UCSJ4gkVC6NrvII8umztf0Ow', - 'like_count': int, - 'uploader': 'Lofi Girl', - 'categories': ['Music'], - 'concurrent_view_count': int, - 'playable_in_embed': True, - 'timestamp': 1657627949, - 'release_date': '20220712', - 'channel_url': 'https://www.youtube.com/channel/UCSJ4gkVC6NrvII8umztf0Ow', - 'description': 'md5:452d5c82f72bb7e62a4e0297c3f01c23', - 'age_limit': 0, - 'thumbnail': 'https://i.ytimg.com/vi/jfKfPfyJRdk/maxresdefault.jpg', - 'release_timestamp': 1657641570, - 'uploader_url': 'https://www.youtube.com/@LofiGirl', - 'channel_follower_count': int, - 'channel_is_verified': True, - 'title': r're:^lofi hip hop radio 📚 beats to relax/study to', - 'view_count': int, - 'live_status': 'is_live', - 'media_type': 'livestream', - 'tags': 'count:32', - 'channel': 'Lofi Girl', - 'availability': 'public', - 'upload_date': '20220712', - 'uploader_id': '@LofiGirl', - }, - 'params': {'skip_download': True}, - }, { - 'url': 'https://www.youtube.com/watch?v=tjjjtzRLHvA', - 'info_dict': { - 'id': 'tjjjtzRLHvA', - 'ext': 'mp4', - 'title': 'ハッシュタグ無し };if window.ytcsi', - 'upload_date': '20220323', - 'like_count': int, - 'availability': 'unlisted', - 'channel': 'Lesmiscore', - 'thumbnail': r're:^https?://.*\.jpg', - 'age_limit': 0, - 'categories': ['Music'], - 'view_count': int, - 'description': '', - 'channel_url': 'https://www.youtube.com/channel/UCdqltm_7iv1Vs6kp6Syke5A', - 'channel_id': 'UCdqltm_7iv1Vs6kp6Syke5A', - 'live_status': 'not_live', - 'playable_in_embed': True, - 'channel_follower_count': int, - 'duration': 6, - 'tags': [], - 'uploader_id': '@lesmiscore', - 'uploader': 'Lesmiscore', - 'uploader_url': 'https://www.youtube.com/@lesmiscore', - 'timestamp': 1648005313, - 'media_type': 'short', - }, - }, { - # Prefer primary title+description language metadata by default - # Do not prefer translated description if primary is empty - 'url': 'https://www.youtube.com/watch?v=el3E4MbxRqQ', - 'info_dict': { - 'id': 'el3E4MbxRqQ', - 'ext': 'mp4', - 'title': 'dlp test video 2 - primary sv no desc', - 'description': '', - 'channel': 'cole-dlp-test-acc', - 'tags': [], - 'view_count': int, - 'channel_url': 'https://www.youtube.com/channel/UCiu-3thuViMebBjw_5nWYrA', - 'like_count': int, - 'playable_in_embed': True, - 'availability': 'unlisted', - 'thumbnail': r're:^https?://.*\.jpg', - 'age_limit': 0, - 'duration': 5, - 'live_status': 'not_live', - 'upload_date': '20220908', - 'categories': ['People & Blogs'], - 'channel_id': 'UCiu-3thuViMebBjw_5nWYrA', - 'uploader_url': 'https://www.youtube.com/@coletdjnz', - 'uploader_id': '@coletdjnz', - 'uploader': 'cole-dlp-test-acc', - 'timestamp': 1662677394, - 'media_type': 'video', - }, - 'params': {'skip_download': True}, - }, { - # Extractor argument: prefer translated title+description - 'url': 'https://www.youtube.com/watch?v=gHKT4uU8Zng', - 'info_dict': { - 'id': 'gHKT4uU8Zng', - 'ext': 'mp4', - 'channel': 'cole-dlp-test-acc', - 'tags': [], - 'duration': 5, - 'live_status': 'not_live', - 'channel_id': 'UCiu-3thuViMebBjw_5nWYrA', - 'upload_date': '20220729', - 'view_count': int, - 'categories': ['People & Blogs'], - 'thumbnail': r're:^https?://.*\.jpg', - 'title': 'dlp test video title translated (fr)', - 'availability': 'public', - 'age_limit': 0, - 'description': 'dlp test video description translated (fr)', - 'playable_in_embed': True, - 'channel_url': 'https://www.youtube.com/channel/UCiu-3thuViMebBjw_5nWYrA', - 'uploader_url': 'https://www.youtube.com/@coletdjnz', - 'uploader_id': '@coletdjnz', - 'uploader': 'cole-dlp-test-acc', - 'timestamp': 1659073275, - 'like_count': int, - 'media_type': 'video', - }, - 'params': {'skip_download': True, 'extractor_args': {'youtube': {'lang': ['fr']}}}, - 'expected_warnings': [r'Preferring "fr" translated fields'], - }, { - 'note': '6 channel audio', - 'url': 'https://www.youtube.com/watch?v=zgdo7-RRjgo', - 'only_matching': True, - }, { - 'note': 'Multiple HLS formats with same itag', - 'url': 'https://www.youtube.com/watch?v=kX3nB4PpJko', - 'info_dict': { - 'id': 'kX3nB4PpJko', - 'ext': 'mp4', - 'categories': ['Entertainment'], - 'description': 'md5:e8031ff6e426cdb6a77670c9b81f6fa6', - 'live_status': 'not_live', - 'duration': 937, - 'channel_follower_count': int, - 'thumbnail': 'https://i.ytimg.com/vi_webp/kX3nB4PpJko/maxresdefault.webp', - 'title': 'Last To Take Hand Off Jet, Keeps It!', - 'channel': 'MrBeast', - 'playable_in_embed': True, - 'view_count': int, - 'upload_date': '20221112', - 'channel_url': 'https://www.youtube.com/channel/UCX6OQ3DkcsbYNE6H8uQQuVA', - 'age_limit': 0, - 'availability': 'public', - 'channel_id': 'UCX6OQ3DkcsbYNE6H8uQQuVA', - 'like_count': int, - 'tags': [], - 'uploader': 'MrBeast', - 'uploader_url': 'https://www.youtube.com/@MrBeast', - 'uploader_id': '@MrBeast', - 'comment_count': int, - 'channel_is_verified': True, - 'heatmap': 'count:100', - 'media_type': 'video', - }, - 'params': {'extractor_args': {'youtube': {'player_client': ['ios']}}, 'format': '233-1'}, - }, { - 'note': 'Audio formats with Dynamic Range Compression', - 'url': 'https://www.youtube.com/watch?v=Tq92D6wQ1mg', - 'info_dict': { - 'id': 'Tq92D6wQ1mg', - 'ext': 'webm', - 'title': '[MMD] Adios - EVERGLOW [+Motion DL]', - 'channel_url': 'https://www.youtube.com/channel/UC1yoRdFoFJaCY-AGfD9W0wQ', - 'channel_id': 'UC1yoRdFoFJaCY-AGfD9W0wQ', - 'channel_follower_count': int, - 'description': 'md5:17eccca93a786d51bc67646756894066', - 'upload_date': '20191228', - 'tags': ['mmd', 'dance', 'mikumikudance', 'kpop', 'vtuber'], - 'playable_in_embed': True, - 'like_count': int, - 'categories': ['Entertainment'], - 'thumbnail': 'https://i.ytimg.com/vi/Tq92D6wQ1mg/sddefault.jpg', - 'age_limit': 18, - 'channel': 'Projekt Melody', - 'view_count': int, - 'availability': 'needs_auth', - 'comment_count': int, - 'live_status': 'not_live', - 'duration': 106, - 'uploader': 'Projekt Melody', - 'uploader_id': '@ProjektMelody', - 'uploader_url': 'https://www.youtube.com/@ProjektMelody', - 'timestamp': 1577508724, - }, - 'params': {'extractor_args': {'youtube': {'player_client': ['tv_embedded']}}, 'format': '251-drc'}, - 'skip': 'Age-restricted; requires authentication', + 'params': {'skip_download': True}, + }] + _WEBPAGE_TESTS = [{ + # + # https://github.com/ytdl-org/youtube-dl/pull/12696 + 'url': 'http://www.improbable.com/2017/04/03/untrained-modern-youths-and-ancient-masters-in-selfie-portraits/', + 'info_dict': { + 'id': 'msN87y-iEx0', + 'ext': 'mp4', + 'title': 'Feynman: Mirrors FUN TO IMAGINE 6', + 'upload_date': '20080526', + 'description': 'md5:873c81d308b979f0e23ee7e620b312a3', + 'age_limit': 0, + 'tags': 'count:8', + 'channel_id': 'UCCeo--lls1vna5YJABWAcVA', + 'playable_in_embed': True, + 'thumbnail': r're:https?://i\.ytimg\.com/.+', + 'like_count': int, + 'comment_count': int, + 'channel': 'Christopher Sykes', + 'live_status': 'not_live', + 'channel_url': 'https://www.youtube.com/channel/UCCeo--lls1vna5YJABWAcVA', + 'availability': 'public', + 'duration': 195, + 'view_count': int, + 'categories': ['Science & Technology'], + 'channel_follower_count': int, + 'uploader': 'Christopher Sykes', + 'uploader_url': 'https://www.youtube.com/@ChristopherSykesDocumentaries', + 'uploader_id': '@ChristopherSykesDocumentaries', + 'heatmap': 'count:100', + 'timestamp': 1211825920, + 'media_type': 'video', }, - { - 'note': 'Support /live/ URL + media type for post-live content', - 'url': 'https://www.youtube.com/live/qVv6vCqciTM', - 'info_dict': { - 'id': 'qVv6vCqciTM', - 'ext': 'mp4', - 'age_limit': 0, - 'comment_count': int, - 'chapters': 'count:13', - 'upload_date': '20221223', - 'thumbnail': 'https://i.ytimg.com/vi/qVv6vCqciTM/maxresdefault.jpg', - 'channel_url': 'https://www.youtube.com/channel/UCIdEIHpS0TdkqRkHL5OkLtA', - 'like_count': int, - 'release_date': '20221223', - 'tags': ['Vtuber', '月ノ美兎', '名取さな', 'にじさんじ', 'クリスマス', '3D配信'], - 'title': '【 #インターネット女クリスマス 】3Dで歌ってはしゃぐインターネットの女たち【月ノ美兎/名取さな】', - 'view_count': int, - 'playable_in_embed': True, - 'duration': 4438, - 'availability': 'public', - 'channel_follower_count': int, - 'channel_id': 'UCIdEIHpS0TdkqRkHL5OkLtA', - 'categories': ['Entertainment'], - 'live_status': 'was_live', - 'media_type': 'livestream', - 'release_timestamp': 1671793345, - 'channel': 'さなちゃんねる', - 'description': 'md5:6aebf95cc4a1d731aebc01ad6cc9806d', - 'uploader': 'さなちゃんねる', - 'uploader_url': 'https://www.youtube.com/@sana_natori', - 'uploader_id': '@sana_natori', - 'channel_is_verified': True, - 'heatmap': 'count:100', - 'timestamp': 1671798112, - }, + 'params': {'skip_download': True}, + }, { + # + # https://github.com/ytdl-org/youtube-dl/commit/2b88feedf7993c24b03e0a7ff169a548794de70c + 'url': 'https://badzine.de/news/als-marc-zwiebler-taufik-hidayat-schlug', + 'info_dict': { + 'id': 'bSVcWOq397g', + 'ext': 'mp4', + 'title': 'TAUFIK TUNJUKKAN KELASNYA !!! : Taufik Hidayat VS Marc Zwiebler Canada Open 2011', + 'age_limit': 0, + 'availability': 'public', + 'categories': ['Sports'], + 'channel': 'Badminton Addict Id', + 'channel_follower_count': int, + 'channel_id': 'UCfCpKOwQGUe2FUJzYNadQcQ', + 'channel_url': 'https://www.youtube.com/channel/UCfCpKOwQGUe2FUJzYNadQcQ', + 'comment_count': int, + 'description': 'md5:2c3737da9a575f301a8380b4d60592a8', + 'duration': 756, + 'like_count': int, + 'live_status': 'not_live', + 'media_type': 'video', + 'playable_in_embed': True, + 'tags': 'count:9', + 'thumbnail': r're:https?://i\.ytimg\.com/.+', + 'timestamp': 1621418412, + 'upload_date': '20210519', + 'uploader': 'Badminton Addict Id', + 'uploader_id': '@badmintonaddictid8958', + 'uploader_url': 'https://www.youtube.com/@badmintonaddictid8958', + 'view_count': int, }, - { - # Fallbacks when webpage and web client is unavailable - 'url': 'https://www.youtube.com/watch?v=wSSmNUl9Snw', - 'info_dict': { - 'id': 'wSSmNUl9Snw', - 'ext': 'mp4', - # 'categories': ['Science & Technology'], - 'view_count': int, - 'chapters': 'count:2', - 'channel': 'Scott Manley', - 'like_count': int, - 'age_limit': 0, - # 'availability': 'public', - 'channel_follower_count': int, - 'live_status': 'not_live', - 'upload_date': '20170831', - 'duration': 682, - 'tags': 'count:8', - 'uploader_url': 'https://www.youtube.com/@scottmanley', - 'description': 'md5:f4bed7b200404b72a394c2f97b782c02', - 'uploader': 'Scott Manley', - 'uploader_id': '@scottmanley', - 'title': 'The Computer Hack That Saved Apollo 14', - 'channel_id': 'UCxzC4EngIsMrPmbm6Nxvb-A', - 'thumbnail': r're:^https?://.*\.webp', - 'channel_url': 'https://www.youtube.com/channel/UCxzC4EngIsMrPmbm6Nxvb-A', - 'playable_in_embed': True, - 'comment_count': int, - 'channel_is_verified': True, - 'heatmap': 'count:100', - 'media_type': 'video', - }, - 'params': { - 'extractor_args': {'youtube': {'player_client': ['ios'], 'player_skip': ['webpage']}}, - }, + 'params': {'skip_download': True}, + }, { + # WordPress Plugin: YouTube Video Importer + # https://github.com/ytdl-org/youtube-dl/commit/7deef1ba6743bf11247565e63ed7e31d2e8a9382 + 'url': 'https://lothype.com/2025-chino-hills-hs-snare-quad-features-wgi2025-drumline/', + 'info_dict': { + 'id': 'lC21AX_pCfA', + 'ext': 'mp4', + 'title': '2025 Chino Hills HS Snare & Quad Features! #wgi2025 #drumline', + 'age_limit': 0, + 'availability': 'public', + 'categories': ['Music'], + 'channel': 'DrumlineAV', + 'channel_follower_count': int, + 'channel_id': 'UCqdfUdyiQOZMvW5PcTTYikQ', + 'channel_url': 'https://www.youtube.com/channel/UCqdfUdyiQOZMvW5PcTTYikQ', + 'comment_count': int, + 'description': '', + 'duration': 48, + 'like_count': int, + 'live_status': 'not_live', + 'location': 'WESTMINSTER', + 'media_type': 'short', + 'playable_in_embed': True, + 'tags': 'count:72', + 'thumbnail': r're:https?://i\.ytimg\.com/.+', + 'timestamp': 1739910835, + 'upload_date': '20250218', + 'uploader': 'DrumlineAV', + 'uploader_id': '@DrumlineAV', + 'uploader_url': 'https://www.youtube.com/@DrumlineAV', + 'view_count': int, }, - { - # uploader_id has non-ASCII characters that are percent-encoded in YT's JSON - 'url': 'https://www.youtube.com/shorts/18NGQq7p3LY', - 'info_dict': { - 'id': '18NGQq7p3LY', - 'ext': 'mp4', - 'title': '아이브 이서 장원영 리즈 삐끼삐끼 챌린지', - 'description': '', - 'uploader': 'ㅇㅇ', - 'uploader_id': '@으아-v1k', - 'uploader_url': 'https://www.youtube.com/@으아-v1k', - 'channel': 'ㅇㅇ', - 'channel_id': 'UCC25oTm2J7ZVoi5TngOHg9g', - 'channel_url': 'https://www.youtube.com/channel/UCC25oTm2J7ZVoi5TngOHg9g', - 'thumbnail': r're:https?://.+/.+\.jpg', - 'playable_in_embed': True, - 'age_limit': 0, - 'duration': 3, - 'timestamp': 1724306170, - 'upload_date': '20240822', - 'availability': 'public', - 'live_status': 'not_live', - 'view_count': int, - 'like_count': int, - 'channel_follower_count': int, - 'categories': ['People & Blogs'], - 'tags': [], - 'media_type': 'short', - }, + 'params': {'skip_download': True}, + }, { + # lazyYT + # https://github.com/ytdl-org/youtube-dl/commit/65f3a228b16c55fee959eee055767a796479270f + 'url': 'https://rabota7.ru/%D0%91%D1%83%D1%85%D0%B3%D0%B0%D0%BB%D1%82%D0%B5%D1%80', + 'info_dict': { + 'id': 'DexR8_tTSsQ', + 'ext': 'mp4', + 'title': 'Работа бухгалтером в Москве', + 'age_limit': 0, + 'availability': 'public', + 'categories': ['People & Blogs'], + 'channel': 'Работа в Москве свежие вакансии', + 'channel_follower_count': int, + 'channel_id': 'UCG3qz_gefGaMiSBvmaxN5WQ', + 'channel_url': 'https://www.youtube.com/channel/UCG3qz_gefGaMiSBvmaxN5WQ', + 'description': 'md5:b779d3d70af4efda26cf62b76808c0e3', + 'duration': 42, + 'like_count': int, + 'live_status': 'not_live', + 'media_type': 'video', + 'playable_in_embed': True, + 'tags': 'count:7', + 'thumbnail': r're:https?://i\.ytimg\.com/.+', + 'timestamp': 1496398980, + 'upload_date': '20170602', + 'uploader': 'Работа в Москве свежие вакансии', + 'uploader_id': '@РаботавМосквесвежиевакансии', + 'uploader_url': 'https://www.youtube.com/@РаботавМосквесвежиевакансии', + 'view_count': int, }, - ] - - _WEBPAGE_TESTS = [ - # YouTube embed - { - 'url': 'http://www.improbable.com/2017/04/03/untrained-modern-youths-and-ancient-masters-in-selfie-portraits/', - 'md5': '873c81d308b979f0e23ee7e620b312a3', - 'info_dict': { - 'id': 'msN87y-iEx0', - 'ext': 'mp4', - 'title': 'Feynman: Mirrors FUN TO IMAGINE 6', - 'upload_date': '20080526', - 'description': 'md5:873c81d308b979f0e23ee7e620b312a3', - 'age_limit': 0, - 'tags': ['feynman', 'mirror', 'science', 'physics', 'imagination', 'fun', 'cool', 'puzzle'], - 'channel_id': 'UCCeo--lls1vna5YJABWAcVA', - 'playable_in_embed': True, - 'thumbnail': 'https://i.ytimg.com/vi/msN87y-iEx0/hqdefault.jpg', - 'like_count': int, - 'comment_count': int, - 'channel': 'Christopher Sykes', - 'live_status': 'not_live', - 'channel_url': 'https://www.youtube.com/channel/UCCeo--lls1vna5YJABWAcVA', - 'availability': 'public', - 'duration': 195, - 'view_count': int, - 'categories': ['Science & Technology'], - 'channel_follower_count': int, - 'uploader': 'Christopher Sykes', - 'uploader_url': 'https://www.youtube.com/@ChristopherSykesDocumentaries', - 'uploader_id': '@ChristopherSykesDocumentaries', - 'heatmap': 'count:100', - 'timestamp': 1211825920, - 'media_type': 'video', - }, - 'params': { - 'skip_download': True, - }, + 'params': { + 'extractor_args': {'generic': {'impersonate': ['chrome']}}, + 'skip_download': True, }, - ] + }, { + # data-video-url= + # https://github.com/ytdl-org/youtube-dl/pull/2948 + 'url': 'https://www.uca.ac.uk/', + 'info_dict': { + 'id': 'www.uca.ac', + 'title': 'UCA | Creative Arts Degrees UK | University for the Creative Arts', + 'age_limit': 0, + 'description': 'md5:179c7a06ea1ed01b94ff5d56cb18d73b', + 'thumbnail': '/media/uca-2020/hero-headers/2025-prospectus-all-2x2.jpg', + }, + 'playlist_count': 10, + 'params': {'skip_download': True}, + }] _PLAYER_JS_VARIANT_MAP = { 'main': 'player_ias.vflset/en_US/base.js',