From 9f83b99f54c0223e5737af91bb773f11f92b677b Mon Sep 17 00:00:00 2001 From: NextLight Date: Wed, 8 Jun 2016 17:42:58 +0200 Subject: [PATCH 1/4] Add metadata to extracted audio file too. This fixes metadata not being present if not supported by the initial container (i.e. artist attribute in webm). --- youtube_dl/__init__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/youtube_dl/__init__.py b/youtube_dl/__init__.py index 4905674ad..33df7ef18 100644 --- a/youtube_dl/__init__.py +++ b/youtube_dl/__init__.py @@ -221,7 +221,7 @@ def _real_main(argv=None): 'key': 'MetadataFromTitle', 'titleformat': opts.metafromtitle }) - if opts.addmetadata: + if opts.addmetadata and opts.keepvideo: postprocessors.append({'key': 'FFmpegMetadata'}) if opts.extractaudio: postprocessors.append({ @@ -230,6 +230,8 @@ def _real_main(argv=None): 'preferredquality': opts.audioquality, 'nopostoverwrites': opts.nopostoverwrites, }) + if opts.addmetadata: + postprocessors.append({'key': 'FFmpegMetadata'}) if opts.recodevideo: postprocessors.append({ 'key': 'FFmpegVideoConvertor', From 5be74d7edc4ef31418ff3731f6e0838c7eaa7c24 Mon Sep 17 00:00:00 2001 From: NextLight Date: Wed, 8 Jun 2016 22:50:41 +0200 Subject: [PATCH 2/4] Fix metadata not being embedded when not extracting audio. --- youtube_dl/__init__.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/youtube_dl/__init__.py b/youtube_dl/__init__.py index 33df7ef18..75e59cef6 100644 --- a/youtube_dl/__init__.py +++ b/youtube_dl/__init__.py @@ -221,17 +221,17 @@ def _real_main(argv=None): 'key': 'MetadataFromTitle', 'titleformat': opts.metafromtitle }) - if opts.addmetadata and opts.keepvideo: - postprocessors.append({'key': 'FFmpegMetadata'}) if opts.extractaudio: + if opts.addmetadata and opts.keepvideo: + postprocessors.append({'key': 'FFmpegMetadata'}) postprocessors.append({ 'key': 'FFmpegExtractAudio', 'preferredcodec': opts.audioformat, 'preferredquality': opts.audioquality, 'nopostoverwrites': opts.nopostoverwrites, }) - if opts.addmetadata: - postprocessors.append({'key': 'FFmpegMetadata'}) + if opts.addmetadata: + postprocessors.append({'key': 'FFmpegMetadata'}) if opts.recodevideo: postprocessors.append({ 'key': 'FFmpegVideoConvertor', From 05de552d57d1b403b810c0f2b264e8b6466e940f Mon Sep 17 00:00:00 2001 From: NextLight Date: Wed, 8 Jun 2016 23:43:11 +0200 Subject: [PATCH 3/4] Write metadata after re-encoding video. --- youtube_dl/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/youtube_dl/__init__.py b/youtube_dl/__init__.py index 75e59cef6..ae0177878 100644 --- a/youtube_dl/__init__.py +++ b/youtube_dl/__init__.py @@ -230,13 +230,13 @@ def _real_main(argv=None): 'preferredquality': opts.audioquality, 'nopostoverwrites': opts.nopostoverwrites, }) - if opts.addmetadata: - postprocessors.append({'key': 'FFmpegMetadata'}) if opts.recodevideo: postprocessors.append({ 'key': 'FFmpegVideoConvertor', 'preferedformat': opts.recodevideo, }) + if opts.addmetadata: + postprocessors.append({'key': 'FFmpegMetadata'}) if opts.convertsubtitles: postprocessors.append({ 'key': 'FFmpegSubtitlesConvertor', From 9c82b42c80d170ac427be4738581d96787d24852 Mon Sep 17 00:00:00 2001 From: NextLight Date: Thu, 9 Jun 2016 01:43:13 +0200 Subject: [PATCH 4/4] Add metadata to every non-deleted file. --- youtube_dl/YoutubeDL.py | 18 ++++++++++++++++-- youtube_dl/__init__.py | 3 +-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/youtube_dl/YoutubeDL.py b/youtube_dl/YoutubeDL.py index 3917ca9dc..787f90221 100755 --- a/youtube_dl/YoutubeDL.py +++ b/youtube_dl/YoutubeDL.py @@ -91,6 +91,7 @@ from .postprocessor import ( FFmpegFixupM4aPP, FFmpegFixupStretchedPP, FFmpegMergerPP, + FFmpegMetadataPP, FFmpegPostProcessor, get_postprocessor, ) @@ -1782,13 +1783,26 @@ class YoutubeDL(object): files_to_delete, info = pp.run(info) except PostProcessingError as e: self.report_error(e.msg) - if files_to_delete and not self.params.get('keepvideo', False): - for old_filename in files_to_delete: + for old_filename in files_to_delete: + if not self.params.get('keepvideo', False): self.to_screen('Deleting original file %s (pass -k to keep)' % old_filename) try: os.remove(encodeFilename(old_filename)) except (IOError, OSError): self.report_warning('Unable to remove downloaded original file') + elif self.params.get('addmetadata', False): + filepath = info['filepath'] + ext = info['ext'] + info['filepath'] = old_filename + info['ext'] = old_filename[old_filename.rfind('.') + 1:] + try: + FFmpegMetadataPP(self).run(info) + except PostProcessingError as e: + self.report_error(e.msg) + finally: + info['filepath'] = filepath + info['ext'] = ext + def _make_archive_id(self, info_dict): # Future-proof against any change in case diff --git a/youtube_dl/__init__.py b/youtube_dl/__init__.py index ae0177878..d7317a490 100644 --- a/youtube_dl/__init__.py +++ b/youtube_dl/__init__.py @@ -222,8 +222,6 @@ def _real_main(argv=None): 'titleformat': opts.metafromtitle }) if opts.extractaudio: - if opts.addmetadata and opts.keepvideo: - postprocessors.append({'key': 'FFmpegMetadata'}) postprocessors.append({ 'key': 'FFmpegExtractAudio', 'preferredcodec': opts.audioformat, @@ -384,6 +382,7 @@ def _real_main(argv=None): 'external_downloader_args': external_downloader_args, 'postprocessor_args': postprocessor_args, 'cn_verification_proxy': opts.cn_verification_proxy, + 'addmetadata': opts.addmetadata, } with YoutubeDL(ydl_opts) as ydl: