1
0
mirror of https://github.com/spaam/svtplay-dl.git synced 2024-11-27 21:54:17 +01:00

main: --list-quality option

This commit is contained in:
Johan Andersson 2015-01-05 22:40:40 +01:00
parent 0b9eb59d36
commit b09b4c17f5
2 changed files with 24 additions and 7 deletions

View File

@ -11,7 +11,7 @@ from optparse import OptionParser
from svtplay_dl.error import UIException
from svtplay_dl.log import log
from svtplay_dl.utils import decode_html_entities, filenamify, select_quality, URLError
from svtplay_dl.utils import decode_html_entities, filenamify, select_quality, URLError, list_quality
from svtplay_dl.service import service_handler, Generic
from svtplay_dl.fetcher import VideoRetriever
from svtplay_dl.subtitle import subtitle
@ -48,6 +48,7 @@ class Options(object):
self.force = False
self.quality = 0
self.flexibleq = None
self.list_quality = False
self.hls = False
self.other = None
self.subtitle = False
@ -141,7 +142,7 @@ def get_one_media(stream, options):
for i in streams:
if isinstance(i, VideoRetriever):
if options.preferred:
if options.preferred == i.name():
if options.preferred.lower() == i.name():
videos.append(i)
else:
videos.append(i)
@ -157,6 +158,9 @@ def get_one_media(stream, options):
if len(videos) == 0:
log.error("Can't find any streams for that url")
else:
if options.list_quality:
list_quality(videos)
return
stream = select_quality(options, videos)
log.info("Selected to download %s, bitrate: %s",
stream.name(), stream.bitrate)
@ -218,6 +222,8 @@ def main():
"it will download the best format by default")
parser.add_option("-Q", "--flexible-quality", default=0,
metavar="amount", dest="flexibleq", help="allow given quality (as above) to differ by an amount")
parser.add_option("--list-quality", dest="list_quality", action="store_true", default=False,
help="list the quality for a video")
parser.add_option("-H", "--hls",
action="store_true", dest="hls", default=False, help="obsolete use -P hls")
parser.add_option("-S", "--subtitle",
@ -271,6 +277,7 @@ def mergeParserOption(options, parser):
options.force = parser.force
options.quality = parser.quality
options.flexibleq = parser.flexibleq
options.list_quality = parser.list_quality
options.hls = parser.hls
options.subtitle = parser.subtitle
options.username = parser.username

View File

@ -103,6 +103,19 @@ def check_redirect(url):
else:
return url
def sort_quality(data):
data = sorted(data, key=lambda x: (x.bitrate, x.name()), reverse=True)
datas = []
for i in data:
datas.append([i.bitrate, i.name()])
return datas
def list_quality(videos):
data = sort_quality(videos)
log.info("Quality\tMethod")
for i in data:
log.info("%s\t%s" % (i[0], i[1].upper()))
def select_quality(options, streams):
available = sorted(int(x.bitrate) for x in streams)
try:
@ -129,11 +142,8 @@ def select_quality(options, streams):
selected = q
break
if not selected and selected != 0:
data = sorted(streams, key=lambda x: (x.bitrate, x.name()), reverse=True)
datas = []
for i in data:
datas.append([i.bitrate, i.name()])
quality = ", ".join("%s (%s)" % (str(x), str(y)) for x, y in datas)
data = sort_quality(streams)
quality = ", ".join("%s (%s)" % (str(x), str(y)) for x, y in data)
log.error("Can't find that quality. Try one of: %s (or try --flexible-quality)", quality)
sys.exit(4)