def get_one_media(stream, options): # Make an automagic filename if not filename(stream): return if options.merge_subtitle: from svtplay_dl.utils import which if not which('ffmpeg'): log.error("--merge-subtitle needs ffmpeg. Please install ffmpeg.") log.info("https://ffmpeg.org/download.html") sys.exit(2) videos = [] subs = [] subfixes = [] error = [] streams = stream.get() try: for i in streams: if isinstance(i, VideoRetriever): if options.preferred: if options.preferred.lower() == i.name(): videos.append(i) else: videos.append(i) if isinstance(i, subtitle): subs.append(i) if isinstance(i, Exception): error.append(i) except Exception as e: if options.verbose: raise else: log.error("svtplay-dl crashed") log.error("Run again and add --verbose as an argument, to get more information") log.error("If the error persists, you can report it at https://github.com/spaam/svtplay-dl/issues") log.error("Include the URL used, the stack trace and the output of svtplay-dl --version in the issue") sys.exit(3) if options.require_subtitle and not subs: log.info("No subtitles available") return if options.subtitle and options.get_url: if subs: if options.get_all_subtitles: for sub in subs: print(sub.url) else: print(subs[0].url) if options.force_subtitle: return def options_subs_dl(subfixes): if subs: if options.get_all_subtitles: for sub in subs: sub.download() if options.merge_subtitle: if sub.subfix: subfixes += [sub.subfix] else: options.get_all_subtitles = False else: subs[0].download() elif options.merge_subtitle: options.merge_subtitle = False if options.subtitle and options.output != "-" and not options.get_url: options_subs_dl(subfixes) if options.force_subtitle: return if options.merge_subtitle and not options.subtitle: options_subs_dl(subfixes) if not videos: log.error("No videos found.") for exc in error: log.error(str(exc)) else: if options.list_quality: list_quality(videos) return try: stream = select_quality(options, videos) if options.get_url: print(stream.url) return log.info("Selected to download %s, bitrate: %s", stream.name(), stream.bitrate) stream.download() except UIException as e: if options.verbose: raise e log.error(e) sys.exit(2) if options.thumbnail and hasattr(stream, "get_thumbnail"): if options.output != "-": log.info("Getting thumbnail") stream.get_thumbnail(options) else: log.warning("Can not get thumbnail when fetching to stdout") post = postprocess(stream, options, subfixes) if stream.name() == "dash" and post.detect: post.merge() if stream.name() == "dash" and not post.detect and stream.finished: log.warning("Cant find ffmpeg/avconv. audio and video is in seperate files. if you dont want this use -P hls or hds") if options.remux: post.remux() if options.silent_semi and stream.finished: log.log(25, "Download of %s was completed" % stream.options.output)
def get_one_media(stream, options): # Make an automagic filename if not filename(stream): return if options.merge_subtitle: from svtplay_dl.utils import which if not which('ffmpeg'): log.error("--merge-subtitle needs ffmpeg. Please install ffmpeg.") log.info("https://ffmpeg.org/download.html") sys.exit(2) videos = [] subs = [] subfixes = [] error = [] streams = stream.get() try: for i in streams: if isinstance(i, VideoRetriever): if options.preferred: if options.preferred.lower() == i.name(): videos.append(i) else: videos.append(i) if isinstance(i, subtitle): subs.append(i) if isinstance(i, Exception): error.append(i) except Exception as e: if options.verbose: log.error("version: %s" % __version__) raise else: log.error("svtplay-dl crashed") log.error("Run again and add --verbose as an argument, to get more information") log.error("If the error persists, you can report it at https://github.com/spaam/svtplay-dl/issues") log.error("Include the URL used, the stack trace and the output of svtplay-dl --version in the issue") sys.exit(3) if options.require_subtitle and not subs: log.info("No subtitles available") return if options.subtitle and options.get_url: if subs: if options.get_all_subtitles: for sub in subs: print(sub.url) else: print(subs[0].url) if options.force_subtitle: return def options_subs_dl(subfixes): if subs: if options.get_all_subtitles: for sub in subs: sub.download() if options.merge_subtitle: if sub.subfix: subfixes += [sub.subfix] else: options.get_all_subtitles = False else: subs[0].download() elif options.merge_subtitle: options.merge_subtitle = False if options.subtitle and options.output != "-" and not options.get_url: options_subs_dl(subfixes) if options.force_subtitle: return if options.merge_subtitle and not options.subtitle: options_subs_dl(subfixes) if len(videos) == 0: for exc in error: log.error(str(exc)) else: if options.list_quality: list_quality(videos) return try: stream = select_quality(options, videos) if options.get_url: print(stream.url) return log.info("Selected to download %s, bitrate: %s", stream.name(), stream.bitrate) stream.download() except UIException as e: if options.verbose: raise e log.error(e) sys.exit(2) if options.thumbnail and hasattr(stream, "get_thumbnail"): if options.output != "-": log.info("Getting thumbnail") stream.get_thumbnail(options) else: log.warning("Can not get thumbnail when fetching to stdout") post = postprocess(stream, options, subfixes) if stream.name() == "dash" and post.detect: post.merge() if stream.name() == "dash" and not post.detect and stream.finished: log.warning("Cant find ffmpeg/avconv. audio and video is in seperate files. if you dont want this use -P hls or hds") if options.remux: post.remux() if options.silent_semi and stream.finished: log.log(25, "Download of %s was completed" % stream.options.output)