aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey M․ <dstftw@gmail.com>2014-08-31 06:41:30 +0700
committerSergey M․ <dstftw@gmail.com>2014-08-31 06:41:30 +0700
commitca7b3246b69215c890193acaf4eab746bc19504e (patch)
treed039cbfe389645e396293eb1211500d0875066b2
parent9c4c233b846bd9be4c48b788d6d2347af764f15d (diff)
downloadyoutube-dl-ca7b3246b69215c890193acaf4eab746bc19504e.tar.xz
[utils] Improve parse_duration
-rw-r--r--test/test_utils.py3
-rw-r--r--youtube_dl/utils.py4
2 files changed, 6 insertions, 1 deletions
diff --git a/test/test_utils.py b/test/test_utils.py
index 3d14f61fb..8d8997977 100644
--- a/test/test_utils.py
+++ b/test/test_utils.py
@@ -211,6 +211,9 @@ class TestUtil(unittest.TestCase):
self.assertEqual(parse_duration('00:01:01'), 61)
self.assertEqual(parse_duration('x:y'), None)
self.assertEqual(parse_duration('3h11m53s'), 11513)
+ self.assertEqual(parse_duration('3h 11m 53s'), 11513)
+ self.assertEqual(parse_duration('3 hours 11 minutes 53 seconds'), 11513)
+ self.assertEqual(parse_duration('3 hours 11 mins 53 secs'), 11513)
self.assertEqual(parse_duration('62m45s'), 3765)
self.assertEqual(parse_duration('6m59s'), 419)
self.assertEqual(parse_duration('49s'), 49)
diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py
index 4f0210872..e07750434 100644
--- a/youtube_dl/utils.py
+++ b/youtube_dl/utils.py
@@ -1332,8 +1332,10 @@ def parse_duration(s):
if s is None:
return None
+ s = s.strip()
+
m = re.match(
- r'(?:(?:(?P<hours>[0-9]+)[:h])?(?P<mins>[0-9]+)[:m])?(?P<secs>[0-9]+)s?(?::[0-9]+)?(?P<ms>\.[0-9]+)?$', s)
+ r'(?:(?:(?P<hours>[0-9]+)\s*(?:[:h]|hours?)\s*)?(?P<mins>[0-9]+)\s*(?:[:m]|mins?|minutes?)\s*)?(?P<secs>[0-9]+)(?P<ms>\.[0-9]+)?\s*(?:s|secs?|seconds?)?$', s)
if not m:
return None
res = int(m.group('secs'))