diff options
author | coletdjnz <colethedj@protonmail.com> | 2022-01-20 14:59:09 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-20 20:29:09 +0530 |
commit | 301d07fc4bb37ae3bec607b62d52f3ee6c087df1 (patch) | |
tree | 8c50fb8dab1730f53ff8ec7d3faceb0939839086 | |
parent | d14cbdd92d8bbb9deedc77da80085b0280ae52bb (diff) | |
download | hypervideo-pre-301d07fc4bb37ae3bec607b62d52f3ee6c087df1.tar.lz hypervideo-pre-301d07fc4bb37ae3bec607b62d52f3ee6c087df1.tar.xz hypervideo-pre-301d07fc4bb37ae3bec607b62d52f3ee6c087df1.zip |
[youtube:tab] Extract channel banner (#2400)
Closes #2237
Authored by: coletdjnz
-rw-r--r-- | yt_dlp/extractor/youtube.py | 37 |
1 files changed, 32 insertions, 5 deletions
diff --git a/yt_dlp/extractor/youtube.py b/yt_dlp/extractor/youtube.py index c02016260..44ec579c0 100644 --- a/yt_dlp/extractor/youtube.py +++ b/yt_dlp/extractor/youtube.py @@ -3913,10 +3913,37 @@ class YoutubeTabBaseInfoExtractor(YoutubeBaseInfoExtractor): playlist_id = channel_id tags = renderer.get('keywords', '').split() - thumbnails = ( - self._extract_thumbnails(renderer, 'avatar') - or self._extract_thumbnails( - primary_sidebar_renderer, ('thumbnailRenderer', 'playlistVideoThumbnailRenderer', 'thumbnail'))) + # We can get the uncropped banner/avatar by replacing the crop params with '=s0' + # See: https://github.com/yt-dlp/yt-dlp/issues/2237#issuecomment-1013694714 + def _get_uncropped(url): + return url_or_none((url or '').split('=')[0] + '=s0') + + avatar_thumbnails = self._extract_thumbnails(renderer, 'avatar') + if avatar_thumbnails: + uncropped_avatar = _get_uncropped(avatar_thumbnails[0]['url']) + if uncropped_avatar: + avatar_thumbnails.append({ + 'url': uncropped_avatar, + 'id': 'avatar_uncropped', + 'preference': 1 + }) + + channel_banners = self._extract_thumbnails( + data, ('header', ..., ['banner', 'mobileBanner', 'tvBanner'])) + for banner in channel_banners: + banner['preference'] = -10 + + if channel_banners: + uncropped_banner = _get_uncropped(channel_banners[0]['url']) + if uncropped_banner: + channel_banners.append({ + 'url': uncropped_banner, + 'id': 'banner_uncropped', + 'preference': -5 + }) + + primary_thumbnails = self._extract_thumbnails( + primary_sidebar_renderer, ('thumbnailRenderer', 'playlistVideoThumbnailRenderer', 'thumbnail')) if playlist_id is None: playlist_id = item_id @@ -3935,7 +3962,7 @@ class YoutubeTabBaseInfoExtractor(YoutubeBaseInfoExtractor): 'uploader': channel_name, 'uploader_id': channel_id, 'uploader_url': channel_url, - 'thumbnails': thumbnails, + 'thumbnails': primary_thumbnails + avatar_thumbnails + channel_banners, 'tags': tags, 'view_count': self._get_count(playlist_stats, 1), 'availability': self._extract_availability(data), |