mirror of
				https://gitlab.com/ytdl-org/youtube-dl.git
				synced 2025-11-04 05:37:07 -05:00 
			
		
		
		
	[YoutubeDL] Implement --write-all-thumbnails (Closes #2269)
This commit is contained in:
		@@ -146,6 +146,7 @@ class YoutubeDL(object):
 | 
			
		||||
    writeinfojson:     Write the video description to a .info.json file
 | 
			
		||||
    writeannotations:  Write the video annotations to a .annotations.xml file
 | 
			
		||||
    writethumbnail:    Write the thumbnail image to a file
 | 
			
		||||
    write_all_thumbnails:  Write all thumbnail formats to files
 | 
			
		||||
    writesubtitles:    Write the video subtitles to a file
 | 
			
		||||
    writeautomaticsub: Write the automatic subtitles to a file
 | 
			
		||||
    allsubtitles:      Downloads all the subtitles of the video
 | 
			
		||||
@@ -1210,25 +1211,7 @@ class YoutubeDL(object):
 | 
			
		||||
                    self.report_error('Cannot write metadata to JSON file ' + infofn)
 | 
			
		||||
                    return
 | 
			
		||||
 | 
			
		||||
        if self.params.get('writethumbnail', False):
 | 
			
		||||
            if info_dict.get('thumbnail') is not None:
 | 
			
		||||
                thumb_format = determine_ext(info_dict['thumbnail'], 'jpg')
 | 
			
		||||
                thumb_filename = os.path.splitext(filename)[0] + '.' + thumb_format
 | 
			
		||||
                if self.params.get('nooverwrites', False) and os.path.exists(encodeFilename(thumb_filename)):
 | 
			
		||||
                    self.to_screen('[%s] %s: Thumbnail is already present' %
 | 
			
		||||
                                   (info_dict['extractor'], info_dict['id']))
 | 
			
		||||
                else:
 | 
			
		||||
                    self.to_screen('[%s] %s: Downloading thumbnail ...' %
 | 
			
		||||
                                   (info_dict['extractor'], info_dict['id']))
 | 
			
		||||
                    try:
 | 
			
		||||
                        uf = self.urlopen(info_dict['thumbnail'])
 | 
			
		||||
                        with open(thumb_filename, 'wb') as thumbf:
 | 
			
		||||
                            shutil.copyfileobj(uf, thumbf)
 | 
			
		||||
                        self.to_screen('[%s] %s: Writing thumbnail to: %s' %
 | 
			
		||||
                                       (info_dict['extractor'], info_dict['id'], thumb_filename))
 | 
			
		||||
                    except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err:
 | 
			
		||||
                        self.report_warning('Unable to download thumbnail "%s": %s' %
 | 
			
		||||
                                            (info_dict['thumbnail'], compat_str(err)))
 | 
			
		||||
        self._write_thumbnails(info_dict, filename)
 | 
			
		||||
 | 
			
		||||
        if not self.params.get('skip_download', False):
 | 
			
		||||
            try:
 | 
			
		||||
@@ -1676,3 +1659,39 @@ class YoutubeDL(object):
 | 
			
		||||
        if encoding is None:
 | 
			
		||||
            encoding = preferredencoding()
 | 
			
		||||
        return encoding
 | 
			
		||||
 | 
			
		||||
    def _write_thumbnails(self, info_dict, filename):
 | 
			
		||||
        if self.params.get('writethumbnail', False):
 | 
			
		||||
            thumbnails = info_dict.get('thumbnails')
 | 
			
		||||
            if thumbnails:
 | 
			
		||||
                thumbnails = [thumbnails[-1]]
 | 
			
		||||
        elif self.params.get('write_all_thumbnails', False):
 | 
			
		||||
            thumbnails = info_dict.get('thumbnails')
 | 
			
		||||
        else:
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        if not thumbnails:
 | 
			
		||||
            # No thumbnails present, so return immediately
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        for t in thumbnails:
 | 
			
		||||
            thumb_ext = determine_ext(t['url'], 'jpg')
 | 
			
		||||
            suffix = '_%s' % t['id'] if len(thumbnails) > 1 else ''
 | 
			
		||||
            thumb_display_id = '%s ' % t['id'] if len(thumbnails) > 1 else ''
 | 
			
		||||
            thumb_filename = os.path.splitext(filename)[0] + suffix + '.' + thumb_ext
 | 
			
		||||
 | 
			
		||||
            if self.params.get('nooverwrites', False) and os.path.exists(encodeFilename(thumb_filename)):
 | 
			
		||||
                self.to_screen('[%s] %s: Thumbnail %sis already present' %
 | 
			
		||||
                               (info_dict['extractor'], info_dict['id'], thumb_display_id))
 | 
			
		||||
            else:
 | 
			
		||||
                self.to_screen('[%s] %s: Downloading thumbnail %s...' %
 | 
			
		||||
                               (info_dict['extractor'], info_dict['id'], thumb_display_id))
 | 
			
		||||
                try:
 | 
			
		||||
                    uf = self.urlopen(t['url'])
 | 
			
		||||
                    with open(thumb_filename, 'wb') as thumbf:
 | 
			
		||||
                        shutil.copyfileobj(uf, thumbf)
 | 
			
		||||
                    self.to_screen('[%s] %s: Writing thumbnail %sto: %s' %
 | 
			
		||||
                                   (info_dict['extractor'], info_dict['id'], thumb_display_id, thumb_filename))
 | 
			
		||||
                except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err:
 | 
			
		||||
                    self.report_warning('Unable to download thumbnail "%s": %s' %
 | 
			
		||||
                                        (t['url'], compat_str(err)))
 | 
			
		||||
 
 | 
			
		||||
@@ -286,6 +286,7 @@ def _real_main(argv=None):
 | 
			
		||||
        'writeannotations': opts.writeannotations,
 | 
			
		||||
        'writeinfojson': opts.writeinfojson,
 | 
			
		||||
        'writethumbnail': opts.writethumbnail,
 | 
			
		||||
        'write_all_thumbnails': opts.write_all_thumbnails,
 | 
			
		||||
        'writesubtitles': opts.writesubtitles,
 | 
			
		||||
        'writeautomaticsub': opts.writeautomaticsub,
 | 
			
		||||
        'allsubtitles': opts.allsubtitles,
 | 
			
		||||
 
 | 
			
		||||
@@ -638,6 +638,10 @@ def parseOpts(overrideArguments=None):
 | 
			
		||||
        '--write-thumbnail',
 | 
			
		||||
        action='store_true', dest='writethumbnail', default=False,
 | 
			
		||||
        help='write thumbnail image to disk')
 | 
			
		||||
    thumbnail.add_option(
 | 
			
		||||
        '--write-all-thumbnails',
 | 
			
		||||
        action='store_true', dest='write_all_thumbnails', default=False,
 | 
			
		||||
        help='write all thumbnail image formats to disk')
 | 
			
		||||
    thumbnail.add_option(
 | 
			
		||||
        '--list-thumbnails',
 | 
			
		||||
        action='store_true', dest='list_thumbnails', default=False,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user