]> jfr.im git - yt-dlp.git/commitdiff
Field `additional_urls` to download additional videos from metadata
authorpukkandan <redacted>
Tue, 18 May 2021 18:20:29 +0000 (23:50 +0530)
committerpukkandan <redacted>
Wed, 19 May 2021 12:41:15 +0000 (18:11 +0530)
README.md
yt_dlp/YoutubeDL.py

index e1022da37fa5a59de4841f757f366c4b4009b9a3..d3856dc9fa371277faec9b71c57add9fa2deca31 100644 (file)
--- 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:(?P<additional_urls>https?://www\.vimeo\.com/\d+)` will download the first vimeo video found in the description
 
 ## Modifying metadata examples
 
index ada783bf25deb6e77a67a27c5c7e92947076ee0f..9a2d0abc27ee828a1ef47244a0d58902f10327b0 100644 (file)
@@ -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