diff options
author | dirkf <fieldhouse@gmx.net> | 2022-01-27 02:51:25 +0000 |
---|---|---|
committer | dirkf <fieldhouse@gmx.net> | 2022-01-27 05:38:14 +0000 |
commit | 51d3d0c9f61f373c0fd6130f9fc481051d36ef99 (patch) | |
tree | d114ebc3307d33e0a56b577c22cc0adfe491154f | |
parent | b8344046138083152d9b0d9a5cc8a11e28faf621 (diff) |
Handle ss:xxx in parse_duration(), based on yt-dlp 8bd1c00bf399ba7002fc21cd399c931e9d301bd8df-test-orf
-rw-r--r-- | test/test_utils.py | 2 | ||||
-rw-r--r-- | youtube_dl/utils.py | 15 |
2 files changed, 11 insertions, 6 deletions
diff --git a/test/test_utils.py b/test/test_utils.py index 88d2da0c32..df53a57fb7 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -617,6 +617,8 @@ class TestUtil(unittest.TestCase): self.assertEqual(parse_duration('PT1H0.040S'), 3600.04) self.assertEqual(parse_duration('PT00H03M30SZ'), 210) self.assertEqual(parse_duration('P0Y0M0DT0H4M20.880S'), 260.88) + self.assertEqual(parse_duration('01:02:03:050'), 3723.05) + self.assertEqual(parse_duration('103:050'), 103.05) def test_fix_xml_ampersands(self): self.assertEqual( diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py index a85a70b86d..cf4f7a75d9 100644 --- a/youtube_dl/utils.py +++ b/youtube_dl/utils.py @@ -3754,12 +3754,14 @@ def parse_duration(s): if not isinstance(s, compat_basestring): return None - s = s.strip() - - days, hours, mins, secs, ms = [None] * 5 - m = re.match(r'(?:(?:(?:(?P<days>[0-9]+):)?(?P<hours>[0-9]+):)?(?P<mins>[0-9]+):)?(?P<secs>[0-9]+)(?P<ms>\.[0-9]+)?Z?$', s) + m = re.match(r'''(?x)\s* + (?P<before_secs> + (?:(?:(?P<days>[0-9]+):)?(?P<hours>[0-9]+):)?(?P<mins>[0-9]+):)? + (?P<secs>(?(before_secs)[0-9]{1,2}|[0-9]+)) + (?P<ms>[.:][0-9]+)?Z?\s*$ + ''', s) if m: - days, hours, mins, secs, ms = m.groups() + days, hours, mins, secs, ms = m.group('days', 'hours', 'mins', 'secs', 'ms') else: m = re.match( r'''(?ix)(?:P? @@ -3791,6 +3793,7 @@ def parse_duration(s): m = re.match(r'(?i)(?:(?P<hours>[0-9.]+)\s*(?:hours?)|(?P<mins>[0-9.]+)\s*(?:mins?\.?|minutes?)\s*)Z?$', s) if m: hours, mins = m.groups() + days = secs = ms = None else: return None @@ -3804,7 +3807,7 @@ def parse_duration(s): if days: duration += float(days) * 24 * 60 * 60 if ms: - duration += float(ms) + duration += float(ms.replace(':', '.')) return duration |