From 993edd3f6e17e966c763bc86dc34125445cec6b6 Mon Sep 17 00:00:00 2001 From: pukkandan Date: Wed, 6 Dec 2023 03:44:11 +0530 Subject: [PATCH] [outtmpl] Support multiplication Related: #8683 --- README.md | 2 +- test/test_YoutubeDL.py | 1 + yt_dlp/YoutubeDL.py | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f67cab572d..78d4799a1b 100644 --- a/README.md +++ b/README.md @@ -1268,7 +1268,7 @@ # OUTPUT TEMPLATE 1. **Object traversal**: The dictionaries and lists available in metadata can be traversed by using a dot `.` separator; e.g. `%(tags.0)s`, `%(subtitles.en.-1.ext)s`. You can do Python slicing with colon `:`; E.g. `%(id.3:7:-1)s`, `%(formats.:.format_id)s`. Curly braces `{}` can be used to build dictionaries with only specific keys; e.g. `%(formats.:.{format_id,height})#j`. An empty field name `%()s` refers to the entire infodict; e.g. `%(.{id,title})s`. Note that all the fields that become available using this method are not listed below. Use `-j` to see such fields -1. **Addition**: Addition and subtraction of numeric fields can be done using `+` and `-` respectively. E.g. `%(playlist_index+10)03d`, `%(n_entries+1-playlist_index)d` +1. **Arithmetic**: Simple arithmetic can be done on numeric fields using `+`, `-` and `*`. E.g. `%(playlist_index+10)03d`, `%(n_entries+1-playlist_index)d` 1. **Date/time Formatting**: Date/time fields can be formatted according to [strftime formatting](https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes) by specifying it separated from the field name using a `>`. E.g. `%(duration>%H-%M-%S)s`, `%(upload_date>%Y-%m-%d)s`, `%(epoch-3600>%H-%M-%S)s` diff --git a/test/test_YoutubeDL.py b/test/test_YoutubeDL.py index 0cf130db03..48c710e00c 100644 --- a/test/test_YoutubeDL.py +++ b/test/test_YoutubeDL.py @@ -797,6 +797,7 @@ def expect_same_infodict(out): test('%(title|%)s %(title|%%)s', '% %%') test('%(id+1-height+3)05d', '00158') test('%(width+100)05d', 'NA') + test('%(filesize*8)d', '8192') test('%(formats.0) 15s', ('% 15s' % FORMATS[0], None)) test('%(formats.0)r', (repr(FORMATS[0]), None)) test('%(height.0)03d', '001') diff --git a/yt_dlp/YoutubeDL.py b/yt_dlp/YoutubeDL.py index e65bef862c..29dd761862 100644 --- a/yt_dlp/YoutubeDL.py +++ b/yt_dlp/YoutubeDL.py @@ -1179,6 +1179,7 @@ def prepare_outtmpl(self, outtmpl, info_dict, sanitize=False): MATH_FUNCTIONS = { '+': float.__add__, '-': float.__sub__, + '*': float.__mul__, } # Field is of the form key1.key2... # where keys (except first) can be string, int, slice or "{field, ...}"