projects
/
youtube-dl
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
cb160dd
)
[pluralsight] Add support for widescreen videos (Closes #7766)
author
Sergey M․
<dstftw@gmail.com>
Sat, 5 Dec 2015 19:39:28 +0000
(
01:39
+0600)
committer
Sergey M․
<dstftw@gmail.com>
Sat, 5 Dec 2015 19:39:28 +0000
(
01:39
+0600)
youtube_dl/extractor/pluralsight.py
patch
|
blob
|
history
diff --git
a/youtube_dl/extractor/pluralsight.py
b/youtube_dl/extractor/pluralsight.py
index aa7dbcb63ad50b196cd15b2d0c44772ae3d5149e..336374bf7737d6d42ed4cdd599e26619360b7181 100644
(file)
--- a/
youtube_dl/extractor/pluralsight.py
+++ b/
youtube_dl/extractor/pluralsight.py
@@
-1,5
+1,6
@@
from __future__ import unicode_literals
from __future__ import unicode_literals
+import re
import json
import random
import collections
import json
import random
import collections
@@
-14,6
+15,7
@@
from ..utils import (
ExtractorError,
int_or_none,
parse_duration,
ExtractorError,
int_or_none,
parse_duration,
+ qualities,
sanitized_Request,
)
sanitized_Request,
)
@@
-140,15
+142,28
@@
class PluralsightIE(PluralsightBaseIE):
'low': {'width': 640, 'height': 480},
'medium': {'width': 848, 'height': 640},
'high': {'width': 1024, 'height': 768},
'low': {'width': 640, 'height': 480},
'medium': {'width': 848, 'height': 640},
'high': {'width': 1024, 'height': 768},
+ 'high-widescreen': {'width': 1280, 'height': 720},
}
}
+ QUALITIES_PREFERENCE = ('low', 'medium', 'high', 'high-widescreen',)
+ quality_key = qualities(QUALITIES_PREFERENCE)
+
AllowedQuality = collections.namedtuple('AllowedQuality', ['ext', 'qualities'])
ALLOWED_QUALITIES = (
AllowedQuality = collections.namedtuple('AllowedQuality', ['ext', 'qualities'])
ALLOWED_QUALITIES = (
- AllowedQuality('webm',
('high',)
),
- AllowedQuality('mp4',
('low', 'medium', 'high',)
),
+ AllowedQuality('webm',
['high', ]
),
+ AllowedQuality('mp4',
['low', 'medium', 'high', ]
),
)
)
+ # Some courses also offer widescreen resolution for high quality (see
+ # https://github.com/rg3/youtube-dl/issues/7766)
+ widescreen = True if re.search(
+ r'courseSupportsWidescreenVideoFormats\s*:\s*true', webpage) else False
+ best_quality = 'high-widescreen' if widescreen else 'high'
+ if widescreen:
+ for allowed_quality in ALLOWED_QUALITIES:
+ allowed_quality.qualities.append(best_quality)
+
# In order to minimize the number of calls to ViewClip API and reduce
# the probability of being throttled or banned by Pluralsight we will request
# only single format until formats listing was explicitly requested.
# In order to minimize the number of calls to ViewClip API and reduce
# the probability of being throttled or banned by Pluralsight we will request
# only single format until formats listing was explicitly requested.
@@
-164,12
+179,12
@@
class PluralsightIE(PluralsightBaseIE):
if req_ext == allowed_quality.ext and req_quality in allowed_quality.qualities:
return (AllowedQuality(req_ext, (req_quality, )), )
req_ext = 'webm' if self._downloader.params.get('prefer_free_formats') else 'mp4'
if req_ext == allowed_quality.ext and req_quality in allowed_quality.qualities:
return (AllowedQuality(req_ext, (req_quality, )), )
req_ext = 'webm' if self._downloader.params.get('prefer_free_formats') else 'mp4'
- return (AllowedQuality(req_ext, (
'high'
, )), )
+ return (AllowedQuality(req_ext, (
best_quality
, )), )
allowed_qualities = guess_allowed_qualities()
formats = []
allowed_qualities = guess_allowed_qualities()
formats = []
- for ext, qualities in allowed_qualities:
- for quality in qualities:
+ for ext, qualities
_
in allowed_qualities:
+ for quality in qualities
_
:
f = QUALITIES[quality].copy()
clip_post = {
'a': author,
f = QUALITIES[quality].copy()
clip_post = {
'a': author,
@@
-205,6
+220,7
@@
class PluralsightIE(PluralsightBaseIE):
'url': clip_url,
'ext': ext,
'format_id': format_id,
'url': clip_url,
'ext': ext,
'format_id': format_id,
+ 'quality': quality_key(quality),
})
formats.append(f)
self._sort_formats(formats)
})
formats.append(f)
self._sort_formats(formats)