From cffab0eefcb7207949dd100523d6be89ddd55ee5 Mon Sep 17 00:00:00 2001 From: pukkandan Date: Wed, 10 Feb 2021 00:07:10 +0530 Subject: [PATCH] [embedsubtitle] Keep original subtitle after conversion if write_subtitles given Closes: https://github.com/pukkandan/yt-dlp/issues/57#issuecomment-775227745 :ci skip dl --- youtube_dlc/__init__.py | 13 ++++++++----- youtube_dlc/postprocessor/ffmpeg.py | 7 ++++++- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/youtube_dlc/__init__.py b/youtube_dlc/__init__.py index d28510467a..eeb7b6f745 100644 --- a/youtube_dlc/__init__.py +++ b/youtube_dlc/__init__.py @@ -233,11 +233,6 @@ def _real_main(argv=None): if opts.extractaudio and not opts.keepvideo and opts.format is None: opts.format = 'bestaudio/best' - # --all-sub automatically sets --write-sub if --write-auto-sub is not given - # this was the old behaviour if only --all-sub was given. - if opts.allsubtitles and not opts.writeautomaticsub: - opts.writesubtitles = True - outtmpl = opts.outtmpl if not outtmpl: outtmpl = {'default': ( @@ -311,9 +306,17 @@ def _real_main(argv=None): 'format': opts.convertsubtitles, }) if opts.embedsubtitles: + already_have_subtitle = opts.writesubtitles postprocessors.append({ 'key': 'FFmpegEmbedSubtitle', + 'already_have_subtitle': already_have_subtitle }) + if not already_have_subtitle: + opts.writesubtitles = True + # --all-sub automatically sets --write-sub if --write-auto-sub is not given + # this was the old behaviour if only --all-sub was given. + if opts.allsubtitles and not opts.writeautomaticsub: + opts.writesubtitles = True if opts.embedthumbnail: already_have_thumbnail = opts.writethumbnail or opts.write_all_thumbnails postprocessors.append({ diff --git a/youtube_dlc/postprocessor/ffmpeg.py b/youtube_dlc/postprocessor/ffmpeg.py index 948c342872..cabe7266e2 100644 --- a/youtube_dlc/postprocessor/ffmpeg.py +++ b/youtube_dlc/postprocessor/ffmpeg.py @@ -442,6 +442,10 @@ class FFmpegVideoConvertorPP(FFmpegPostProcessor): class FFmpegEmbedSubtitlePP(FFmpegPostProcessor): + def __init__(self, downloader=None, already_have_subtitle=False): + super(FFmpegEmbedSubtitlePP, self).__init__(downloader) + self._already_have_subtitle = already_have_subtitle + def run(self, information): if information['ext'] not in ('mp4', 'webm', 'mkv'): self.to_screen('Subtitles can only be embedded in mp4, webm or mkv files') @@ -501,7 +505,8 @@ class FFmpegEmbedSubtitlePP(FFmpegPostProcessor): os.remove(encodeFilename(filename)) os.rename(encodeFilename(temp_filename), encodeFilename(filename)) - return sub_filenames, information + files_to_delete = [] if self._already_have_subtitle else sub_filenames + return files_to_delete, information class FFmpegMetadataPP(FFmpegPostProcessor):