diff --git a/youtube-dl b/youtube-dl index d3acd9d0a..8143de35e 100755 --- a/youtube-dl +++ b/youtube-dl @@ -1015,13 +1015,13 @@ if __name__ == '__main__': video_format = optparse.OptionGroup(parser, 'Video Format Options') video_format.add_option('-f', '--format', - dest='format', metavar='FMT', help='video format code') + action='append', dest='format', metavar='FMT', help='video format code') video_format.add_option('-b', '--best-quality', - action='store_const', dest='format', help='download the best quality video possible', const='0') + action='append_const', dest='format', help='download the best quality video possible', const='0') video_format.add_option('-m', '--mobile-version', - action='store_const', dest='format', help='alias for -f 17', const='17') + action='append_const', dest='format', help='alias for -f 17', const='17') video_format.add_option('-d', '--high-def', - action='store_const', dest='format', help='alias for -f 22', const='22') + action='append_const', dest='format', help='alias for -f 22', const='22') parser.add_option_group(video_format) verbosity = optparse.OptionGroup(parser, 'Verbosity / Simulation Options') @@ -1063,22 +1063,24 @@ if __name__ == '__main__': # Conflicting, missing and erroneous options if len(all_urls) < 1: - sys.exit(u'ERROR: you must provide at least one URL') + parser.error(u'you must provide at least one URL') if opts.usenetrc and (opts.username is not None or opts.password is not None): - sys.exit(u'ERROR: using .netrc conflicts with giving username/password') + parser.error(u'using .netrc conflicts with giving username/password') if opts.password is not None and opts.username is None: - sys.exit(u'ERROR: account username missing') + parser.error(u'account username missing') if opts.outtmpl is not None and (opts.useliteral or opts.usetitle): - sys.exit(u'ERROR: using output template conflicts with using title or literal title') + parser.error(u'using output template conflicts with using title or literal title') if opts.usetitle and opts.useliteral: - sys.exit(u'ERROR: using title conflicts with using literal title') + parser.error(u'using title conflicts with using literal title') if opts.username is not None and opts.password is None: opts.password = getpass.getpass(u'Type account password and press return:') if opts.ratelimit is not None: numeric_limit = FileDownloader.parse_bytes(opts.ratelimit) if numeric_limit is None: - sys.exit(u'ERROR: invalid rate limit specified') + parser.error(u'invalid rate limit specified') opts.ratelimit = numeric_limit + if len(opts.format) > 1: + parser.error(u'pass at most one of the video format option flags (-f, -b, -m, -d)') # Information extractors youtube_ie = YoutubeIE() @@ -1095,7 +1097,7 @@ if __name__ == '__main__': 'forceurl': opts.geturl, 'forcetitle': opts.gettitle, 'simulate': (opts.simulate or opts.geturl or opts.gettitle), - 'format': opts.format, + 'format': opts.format[0], 'outtmpl': ((opts.outtmpl is not None and opts.outtmpl.decode(locale.getpreferredencoding())) or (opts.usetitle and u'%(stitle)s-%(id)s.%(ext)s') or (opts.useliteral and u'%(title)s-%(id)s.%(ext)s')