aboutsummaryrefslogtreecommitdiff
path: root/yt_dlp/postprocessor/ffmpeg.py
diff options
context:
space:
mode:
authorlouie-github <30176969+louie-github@users.noreply.github.com>2021-05-22 02:09:48 +0800
committerGitHub <noreply@github.com>2021-05-21 23:39:48 +0530
commita927acb1ecf7cef80c24eca604b73d9b5e45b732 (patch)
tree20555dce879f952815532c2335578a6a3b7d0873 /yt_dlp/postprocessor/ffmpeg.py
parent09f1580e2d29e256d753a8112f093d4e0a54478e (diff)
[ThumbnailsConvertor] Support conversion to `png` and make it the default (#333)
PNG, being a lossless format, should be a better default here compared to JPG since we won't be compressing to a lossy format and losing some of the original image data PNG is also supported for embedding in all the formats similar to JPEG Authored by: louie-github
Diffstat (limited to 'yt_dlp/postprocessor/ffmpeg.py')
-rw-r--r--yt_dlp/postprocessor/ffmpeg.py26
1 files changed, 16 insertions, 10 deletions
diff --git a/yt_dlp/postprocessor/ffmpeg.py b/yt_dlp/postprocessor/ffmpeg.py
index b15610829..f2e3559a5 100644
--- a/yt_dlp/postprocessor/ffmpeg.py
+++ b/yt_dlp/postprocessor/ffmpeg.py
@@ -849,24 +849,30 @@ class FFmpegThumbnailsConvertorPP(FFmpegPostProcessor):
info['__files_to_move'].pop(thumbnail_filename), 'webp')
def convert_thumbnail(self, thumbnail_filename, ext):
- if ext != 'jpg':
- raise FFmpegPostProcessorError('Only conversion to jpg is currently supported')
+ if ext == 'jpg':
+ format_name = 'JPEG'
+ opts = ['-bsf:v', 'mjpeg2jpeg']
+ elif ext == 'png':
+ format_name = 'PNG'
+ opts = []
+ else:
+ raise FFmpegPostProcessorError('Only conversion to either jpg or png is currently supported')
# NB: % is supposed to be escaped with %% but this does not work
# for input files so working around with standard substitution
escaped_thumbnail_filename = thumbnail_filename.replace('%', '#')
os.rename(encodeFilename(thumbnail_filename), encodeFilename(escaped_thumbnail_filename))
- escaped_thumbnail_jpg_filename = replace_extension(escaped_thumbnail_filename, 'jpg')
- self.to_screen('Converting thumbnail "%s" to JPEG' % escaped_thumbnail_filename)
- self.run_ffmpeg(escaped_thumbnail_filename, escaped_thumbnail_jpg_filename, ['-bsf:v', 'mjpeg2jpeg'])
- thumbnail_jpg_filename = replace_extension(thumbnail_filename, 'jpg')
+ escaped_thumbnail_conv_filename = replace_extension(escaped_thumbnail_filename, ext)
+ self.to_screen('Converting thumbnail "%s" to %s' % (escaped_thumbnail_filename, format_name))
+ self.run_ffmpeg(escaped_thumbnail_filename, escaped_thumbnail_conv_filename, opts)
+ thumbnail_conv_filename = replace_extension(thumbnail_filename, ext)
# Rename back to unescaped
os.rename(encodeFilename(escaped_thumbnail_filename), encodeFilename(thumbnail_filename))
- os.rename(encodeFilename(escaped_thumbnail_jpg_filename), encodeFilename(thumbnail_jpg_filename))
- return thumbnail_jpg_filename
+ os.rename(encodeFilename(escaped_thumbnail_conv_filename), encodeFilename(thumbnail_conv_filename))
+ return thumbnail_conv_filename
def run(self, info):
- if self.format != 'jpg':
- raise FFmpegPostProcessorError('Only conversion to jpg is currently supported')
+ if self.format not in ('jpg', 'png'):
+ raise FFmpegPostProcessorError('Only conversion to either jpg or png is currently supported')
files_to_delete = []
has_thumbnail = False