From 9c2b75b5616f058c3970e54c664e9543f86b9f0c Mon Sep 17 00:00:00 2001 From: pukkandan Date: Tue, 18 May 2021 23:50:29 +0530 Subject: [PATCH] Field `additional_urls` to download additional videos from metadata --- README.md | 4 +++- yt_dlp/YoutubeDL.py | 17 ++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e1022da37f..d3856dc9fa 100644 --- a/README.md +++ b/README.md @@ -1279,7 +1279,9 @@ # MODIFYING METADATA Note that any field created by this can be used in the [output template](#output-template) and will also affect the media file's metadata added when using `--add-metadata`. -You can also use this to change only the metadata that is embedded in the media file. To do this, set the value of the corresponding field with a `meta_` prefix. For example, any value you set to `meta_description` field will be added to the `description` field in the file. You can use this to set a different "description" and "synopsis", for example. +This option also has a few special uses: +1. You can use this to change the metadata that is embedded in the media file. To do this, set the value of the corresponding field with a `meta_` prefix. For example, any value you set to `meta_description` field will be added to the `description` field in the file. You can use this to set a different "description" and "synopsis", for example +2. You can download an additional URL based on the metadata of the currently downloaded video. To do this, set the field `additional_urls` to the URL that you want to download. Eg: `--parse-metadata "description:(?Phttps?://www\.vimeo\.com/\d+)` will download the first vimeo video found in the description ## Modifying metadata examples diff --git a/yt_dlp/YoutubeDL.py b/yt_dlp/YoutubeDL.py index ada783bf25..9a2d0abc27 100644 --- a/yt_dlp/YoutubeDL.py +++ b/yt_dlp/YoutubeDL.py @@ -1187,7 +1187,22 @@ def process_ie_result(self, ie_result, download=True, extra_info={}): if result_type == 'video': self.add_extra_info(ie_result, extra_info) - return self.process_video_result(ie_result, download=download) + ie_result = self.process_video_result(ie_result, download=download) + additional_urls = ie_result.get('additional_urls') + if additional_urls: + # TODO: Improve MetadataFromFieldPP to allow setting a list + if isinstance(additional_urls, compat_str): + additional_urls = [additional_urls] + self.to_screen( + '[info] %s: %d additional URL(s) requested' % (ie_result['id'], len(additional_urls))) + self.write_debug('Additional URLs: "%s"' % '", "'.join(additional_urls)) + ie_result['additional_entries'] = [ + self.extract_info( + url, download, extra_info, + force_generic_extractor=self.params.get('force_generic_extractor')) + for url in additional_urls + ] + return ie_result elif result_type == 'url': # We have to add extra_info to the results because it may be # contained in a playlist