From 1bfc5b5927cf9857043e1c57ccbddaf62f998982 Mon Sep 17 00:00:00 2001 From: 7x11x13 Date: Tue, 24 Dec 2024 12:38:25 -0500 Subject: [PATCH] Don't change sort function --- yt_dlp/YoutubeDL.py | 26 +++++++++++++++++--------- yt_dlp/postprocessor/embedthumbnail.py | 5 ++++- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/yt_dlp/YoutubeDL.py b/yt_dlp/YoutubeDL.py index 8ed8aee934..e09b6cc9ee 100644 --- a/yt_dlp/YoutubeDL.py +++ b/yt_dlp/YoutubeDL.py @@ -2606,7 +2606,6 @@ class YoutubeDL: def _sort_thumbnails(self, thumbnails): thumbnails.sort(key=lambda t: ( - t.get('id') == self.params.get('thumbnail_format') if t.get('id') is not None else False, t.get('preference') if t.get('preference') is not None else -1, t.get('width') if t.get('width') is not None else -1, t.get('height') if t.get('height') is not None else -1, @@ -2632,12 +2631,6 @@ class YoutubeDL: continue yield t - thumbnail_id = self.params.get('thumbnail_format') - if thumbnail_id and thumbnail_id not in [t.get('id') for t in thumbnails]: - self.raise_no_formats(info_dict, msg=( - 'Invalid thumbnail ID specified. ' - 'Use --list-thumbnails to see available IDs')) - self._sort_thumbnails(thumbnails) for i, t in enumerate(thumbnails): if t.get('id') is None: @@ -4371,9 +4364,24 @@ class YoutubeDL: def _write_thumbnails(self, label, info_dict, filename, thumb_filename_base=None): """ Write thumbnails to file and return list of (thumb_filename, final_thumb_filename); or None if error """ write_all = self.params.get('write_all_thumbnails', False) + write_any = write_all or self.params.get('writethumbnail', False) thumbnails, ret = [], [] - if write_all or self.params.get('writethumbnail', False): - thumbnails = info_dict.get('thumbnails') or [] + + if write_any: + all_thumbnails = info_dict.get('thumbnails') or [] + thumbnail_id = self.params.get('thumbnail_format') + if thumbnail_id and not write_all: + for t in all_thumbnails: + if t.get('id') == thumbnail_id: + thumbnails.append(t) + break + else: + self.raise_no_formats( + info_dict, msg=('Invalid thumbnail ID specified. Use --list-thumbnails to see available IDs'), + ) + else: + thumbnails = all_thumbnails + if not thumbnails: self.to_screen(f'[info] There are no {label} thumbnails to download') return ret diff --git a/yt_dlp/postprocessor/embedthumbnail.py b/yt_dlp/postprocessor/embedthumbnail.py index d8ba220cab..42d3812699 100644 --- a/yt_dlp/postprocessor/embedthumbnail.py +++ b/yt_dlp/postprocessor/embedthumbnail.py @@ -62,7 +62,10 @@ class EmbedThumbnailPP(FFmpegPostProcessor): self.to_screen('There aren\'t any thumbnails to embed') return [], info - idx = next((-i for i, t in enumerate(info['thumbnails'][::-1], 1) if t.get('filepath')), None) + if self._downloader and (fmt := self._downloader.params.get('thumbnail_format')): + idx = next((i for i, t in enumerate(info['thumbnails']) if t.get('id') == fmt and t.get('filepath')), None) + else: + idx = next((-i for i, t in enumerate(info['thumbnails'][::-1], 1) if t.get('filepath')), None) if idx is None: self.to_screen('There are no thumbnails on disk') return [], info