[pluralsight] Add support for widescreen videos (Closes #7766)
This commit is contained in:
parent
cb160dd531
commit
756926ff00
|
@ -1,5 +1,6 @@
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
import re
|
||||||
import json
|
import json
|
||||||
import random
|
import random
|
||||||
import collections
|
import collections
|
||||||
|
@ -14,6 +15,7 @@ from ..utils import (
|
||||||
ExtractorError,
|
ExtractorError,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
parse_duration,
|
parse_duration,
|
||||||
|
qualities,
|
||||||
sanitized_Request,
|
sanitized_Request,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -140,15 +142,28 @@ class PluralsightIE(PluralsightBaseIE):
|
||||||
'low': {'width': 640, 'height': 480},
|
'low': {'width': 640, 'height': 480},
|
||||||
'medium': {'width': 848, 'height': 640},
|
'medium': {'width': 848, 'height': 640},
|
||||||
'high': {'width': 1024, 'height': 768},
|
'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'])
|
AllowedQuality = collections.namedtuple('AllowedQuality', ['ext', 'qualities'])
|
||||||
|
|
||||||
ALLOWED_QUALITIES = (
|
ALLOWED_QUALITIES = (
|
||||||
AllowedQuality('webm', ('high',)),
|
AllowedQuality('webm', ['high', ]),
|
||||||
AllowedQuality('mp4', ('low', 'medium', '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
|
# 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
|
# the probability of being throttled or banned by Pluralsight we will request
|
||||||
# only single format until formats listing was explicitly requested.
|
# 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:
|
if req_ext == allowed_quality.ext and req_quality in allowed_quality.qualities:
|
||||||
return (AllowedQuality(req_ext, (req_quality, )), )
|
return (AllowedQuality(req_ext, (req_quality, )), )
|
||||||
req_ext = 'webm' if self._downloader.params.get('prefer_free_formats') else 'mp4'
|
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()
|
allowed_qualities = guess_allowed_qualities()
|
||||||
|
|
||||||
formats = []
|
formats = []
|
||||||
for ext, qualities in allowed_qualities:
|
for ext, qualities_ in allowed_qualities:
|
||||||
for quality in qualities:
|
for quality in qualities_:
|
||||||
f = QUALITIES[quality].copy()
|
f = QUALITIES[quality].copy()
|
||||||
clip_post = {
|
clip_post = {
|
||||||
'a': author,
|
'a': author,
|
||||||
|
@ -205,6 +220,7 @@ class PluralsightIE(PluralsightBaseIE):
|
||||||
'url': clip_url,
|
'url': clip_url,
|
||||||
'ext': ext,
|
'ext': ext,
|
||||||
'format_id': format_id,
|
'format_id': format_id,
|
||||||
|
'quality': quality_key(quality),
|
||||||
})
|
})
|
||||||
formats.append(f)
|
formats.append(f)
|
||||||
self._sort_formats(formats)
|
self._sort_formats(formats)
|
||||||
|
|
Loading…
Reference in New Issue