From fae148b2df915c8c6cddfef8d24c530aba274e08 Mon Sep 17 00:00:00 2001 From: 7x11x13 Date: Sat, 1 Feb 2025 15:54:43 -0500 Subject: [PATCH 1/2] Convert date strings to ISO 8601 before adding to metadata --- yt_dlp/postprocessor/ffmpeg.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/yt_dlp/postprocessor/ffmpeg.py b/yt_dlp/postprocessor/ffmpeg.py index 8965806ae7..87db9bd3e7 100644 --- a/yt_dlp/postprocessor/ffmpeg.py +++ b/yt_dlp/postprocessor/ffmpeg.py @@ -8,6 +8,8 @@ import re import subprocess import time +from yt_dlp.utils._utils import strftime_or_none + from .common import PostProcessor from ..compat import imghdr from ..utils import ( @@ -736,12 +738,12 @@ class FFmpegMetadataPP(FFmpegPostProcessor): meta_prefix = 'meta' metadata = collections.defaultdict(dict) - def add(meta_list, info_list=None): + def add(meta_list, info_list=None, convert=str): value = next(( info[key] for key in [f'{meta_prefix}_', *variadic(info_list or meta_list)] if info.get(key) is not None), None) if value not in ('', None): - value = ', '.join(map(str, variadic(value))) + value = ', '.join(map(convert, variadic(value))) value = value.replace('\0', '') # nul character cannot be passed in command line metadata['common'].update({meta_f: value for meta_f in variadic(meta_list)}) @@ -751,7 +753,7 @@ class FFmpegMetadataPP(FFmpegPostProcessor): # https://kodi.wiki/view/Video_file_tagging add('title', ('track', 'title')) - add('date', 'upload_date') + add('date', ('release_date', 'upload_date'), lambda date: strftime_or_none(date, '%Y-%m-%d')) add(('description', 'synopsis'), 'description') add(('purl', 'comment'), 'webpage_url') add('track', 'track_number') From 1a449af19e10ad082511845b8280e9b068e650be Mon Sep 17 00:00:00 2001 From: 7x11x13 Date: Sun, 2 Feb 2025 13:51:18 -0500 Subject: [PATCH 2/2] Requested changes --- yt_dlp/postprocessor/ffmpeg.py | 5 ++--- yt_dlp/utils/_utils.py | 1 + 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/yt_dlp/postprocessor/ffmpeg.py b/yt_dlp/postprocessor/ffmpeg.py index 87db9bd3e7..dfbd77a397 100644 --- a/yt_dlp/postprocessor/ffmpeg.py +++ b/yt_dlp/postprocessor/ffmpeg.py @@ -8,8 +8,6 @@ import re import subprocess import time -from yt_dlp.utils._utils import strftime_or_none - from .common import PostProcessor from ..compat import imghdr from ..utils import ( @@ -30,6 +28,7 @@ from ..utils import ( prepend_extension, replace_extension, shell_quote, + strftime_or_none, traverse_obj, variadic, write_json_file, @@ -753,7 +752,7 @@ class FFmpegMetadataPP(FFmpegPostProcessor): # https://kodi.wiki/view/Video_file_tagging add('title', ('track', 'title')) - add('date', ('release_date', 'upload_date'), lambda date: strftime_or_none(date, '%Y-%m-%d')) + add('date', ('release_date', 'upload_date'), convert=strftime_or_none(date_format='%Y-%m-%d')) add(('description', 'synopsis'), 'description') add(('purl', 'comment'), 'webpage_url') add('track', 'track_number') diff --git a/yt_dlp/utils/_utils.py b/yt_dlp/utils/_utils.py index a71a381e54..254eca39d2 100644 --- a/yt_dlp/utils/_utils.py +++ b/yt_dlp/utils/_utils.py @@ -2046,6 +2046,7 @@ def url_or_none(url): return url if re.match(r'(?:(?:https?|rt(?:m(?:pt?[es]?|fp)|sp[su]?)|mms|ftps?):)?//', url) else None +@partial_application def strftime_or_none(timestamp, date_format='%Y%m%d', default=None): datetime_object = None try: