mirror of
https://github.com/ytdl-org/youtube-dl.git
synced 2024-01-07 17:16:08 +00:00
Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
614d9c19c1
|
@ -34,7 +34,7 @@ tests = [
|
||||||
".>/?;}[{=+_)(*&^%<#!MNBVCXZASPFGHJKLwOIUYTREWQ0987654321mnbvcxzasdfghjklpoiuytreq"),
|
".>/?;}[{=+_)(*&^%<#!MNBVCXZASPFGHJKLwOIUYTREWQ0987654321mnbvcxzasdfghjklpoiuytreq"),
|
||||||
# 82
|
# 82
|
||||||
("qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKHGFDSAZXCVBNM!@#$%^&*(-+={[};?/>.<",
|
("qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKHGFDSAZXCVBNM!@#$%^&*(-+={[};?/>.<",
|
||||||
"Q>/?;}[{=+-(*<^%$#@!MNBVCXZASDFGHKLPOIUY8REWT0q&7654321mnbvcxzasdfghjklpoiuytrew9"),
|
"wertyuioplkjhgfdsaqxcvbnm1234567890QWERTYUIOPLKHGFDSAZXCVBNM!@#$%^&z(-+={[};?/>.<"),
|
||||||
# 81 - vflLC8JvQ 2013/07/25
|
# 81 - vflLC8JvQ 2013/07/25
|
||||||
("qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKHGFDSAZXCVBNM!@#$%^&*(-+={[};?/>.",
|
("qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKHGFDSAZXCVBNM!@#$%^&*(-+={[};?/>.",
|
||||||
"C>/?;}[{=+-(*&^%$#@!MNBVYXZASDFGHKLPOIU.TREWQ0q87659321mnbvcxzasdfghjkl4oiuytrewp"),
|
"C>/?;}[{=+-(*&^%$#@!MNBVYXZASDFGHKLPOIU.TREWQ0q87659321mnbvcxzasdfghjkl4oiuytrewp"),
|
||||||
|
|
|
@ -120,6 +120,7 @@ def parseOpts(overrideArguments=None):
|
||||||
selection = optparse.OptionGroup(parser, 'Video Selection')
|
selection = optparse.OptionGroup(parser, 'Video Selection')
|
||||||
authentication = optparse.OptionGroup(parser, 'Authentication Options')
|
authentication = optparse.OptionGroup(parser, 'Authentication Options')
|
||||||
video_format = optparse.OptionGroup(parser, 'Video Format Options')
|
video_format = optparse.OptionGroup(parser, 'Video Format Options')
|
||||||
|
subtitles = optparse.OptionGroup(parser, 'Subtitle Options')
|
||||||
downloader = optparse.OptionGroup(parser, 'Download Options')
|
downloader = optparse.OptionGroup(parser, 'Download Options')
|
||||||
postproc = optparse.OptionGroup(parser, 'Post-processing Options')
|
postproc = optparse.OptionGroup(parser, 'Post-processing Options')
|
||||||
filesystem = optparse.OptionGroup(parser, 'Filesystem Options')
|
filesystem = optparse.OptionGroup(parser, 'Filesystem Options')
|
||||||
|
@ -186,25 +187,26 @@ def parseOpts(overrideArguments=None):
|
||||||
action='store', dest='format_limit', metavar='FORMAT', help='highest quality format to download')
|
action='store', dest='format_limit', metavar='FORMAT', help='highest quality format to download')
|
||||||
video_format.add_option('-F', '--list-formats',
|
video_format.add_option('-F', '--list-formats',
|
||||||
action='store_true', dest='listformats', help='list all available formats (currently youtube only)')
|
action='store_true', dest='listformats', help='list all available formats (currently youtube only)')
|
||||||
video_format.add_option('--write-sub', '--write-srt',
|
|
||||||
|
subtitles.add_option('--write-sub', '--write-srt',
|
||||||
action='store_true', dest='writesubtitles',
|
action='store_true', dest='writesubtitles',
|
||||||
help='write subtitle file (currently youtube only)', default=False)
|
help='write subtitle file (currently youtube only)', default=False)
|
||||||
video_format.add_option('--write-auto-sub', '--write-automatic-sub',
|
subtitles.add_option('--write-auto-sub', '--write-automatic-sub',
|
||||||
action='store_true', dest='writeautomaticsub',
|
action='store_true', dest='writeautomaticsub',
|
||||||
help='write automatic subtitle file (currently youtube only)', default=False)
|
help='write automatic subtitle file (currently youtube only)', default=False)
|
||||||
video_format.add_option('--only-sub',
|
subtitles.add_option('--only-sub',
|
||||||
action='store_true', dest='skip_download',
|
action='store_true', dest='skip_download',
|
||||||
help='[deprecated] alias of --skip-download', default=False)
|
help='[deprecated] alias of --skip-download', default=False)
|
||||||
video_format.add_option('--all-subs',
|
subtitles.add_option('--all-subs',
|
||||||
action='store_true', dest='allsubtitles',
|
action='store_true', dest='allsubtitles',
|
||||||
help='downloads all the available subtitles of the video (currently youtube only)', default=False)
|
help='downloads all the available subtitles of the video', default=False)
|
||||||
video_format.add_option('--list-subs',
|
subtitles.add_option('--list-subs',
|
||||||
action='store_true', dest='listsubtitles',
|
action='store_true', dest='listsubtitles',
|
||||||
help='lists all available subtitles for the video (currently youtube only)', default=False)
|
help='lists all available subtitles for the video', default=False)
|
||||||
video_format.add_option('--sub-format',
|
subtitles.add_option('--sub-format',
|
||||||
action='store', dest='subtitlesformat', metavar='FORMAT',
|
action='store', dest='subtitlesformat', metavar='FORMAT',
|
||||||
help='subtitle format [srt/sbv/vtt] (default=srt) (currently youtube only)', default='srt')
|
help='subtitle format (default=srt) ([sbv/vtt] youtube only)', default='srt')
|
||||||
video_format.add_option('--sub-lang', '--srt-lang',
|
subtitles.add_option('--sub-lang', '--srt-lang',
|
||||||
action='store', dest='subtitleslang', metavar='LANG',
|
action='store', dest='subtitleslang', metavar='LANG',
|
||||||
help='language of the subtitles to download (optional) use IETF language tags like \'en\'')
|
help='language of the subtitles to download (optional) use IETF language tags like \'en\'')
|
||||||
|
|
||||||
|
@ -329,6 +331,7 @@ def parseOpts(overrideArguments=None):
|
||||||
parser.add_option_group(filesystem)
|
parser.add_option_group(filesystem)
|
||||||
parser.add_option_group(verbosity)
|
parser.add_option_group(verbosity)
|
||||||
parser.add_option_group(video_format)
|
parser.add_option_group(video_format)
|
||||||
|
parser.add_option_group(subtitles)
|
||||||
parser.add_option_group(authentication)
|
parser.add_option_group(authentication)
|
||||||
parser.add_option_group(postproc)
|
parser.add_option_group(postproc)
|
||||||
|
|
||||||
|
@ -344,7 +347,7 @@ def parseOpts(overrideArguments=None):
|
||||||
userConfFile = os.path.join(os.path.expanduser('~'), '.config', 'youtube-dl.conf')
|
userConfFile = os.path.join(os.path.expanduser('~'), '.config', 'youtube-dl.conf')
|
||||||
systemConf = _readOptions('/etc/youtube-dl.conf')
|
systemConf = _readOptions('/etc/youtube-dl.conf')
|
||||||
userConf = _readOptions(userConfFile)
|
userConf = _readOptions(userConfFile)
|
||||||
commandLineConf = sys.argv[1:]
|
commandLineConf = sys.argv[1:]
|
||||||
argv = systemConf + userConf + commandLineConf
|
argv = systemConf + userConf + commandLineConf
|
||||||
opts, args = parser.parse_args(argv)
|
opts, args = parser.parse_args(argv)
|
||||||
if opts.verbose:
|
if opts.verbose:
|
||||||
|
@ -378,7 +381,7 @@ def _real_main(argv=None):
|
||||||
# Set user agent
|
# Set user agent
|
||||||
if opts.user_agent is not None:
|
if opts.user_agent is not None:
|
||||||
std_headers['User-Agent'] = opts.user_agent
|
std_headers['User-Agent'] = opts.user_agent
|
||||||
|
|
||||||
# Set referer
|
# Set referer
|
||||||
if opts.referer is not None:
|
if opts.referer is not None:
|
||||||
std_headers['Referer'] = opts.referer
|
std_headers['Referer'] = opts.referer
|
||||||
|
|
|
@ -14,7 +14,7 @@ class VideofyMeIE(InfoExtractor):
|
||||||
_TEST = {
|
_TEST = {
|
||||||
u'url': u'http://www.videofy.me/thisisvideofyme/1100701',
|
u'url': u'http://www.videofy.me/thisisvideofyme/1100701',
|
||||||
u'file': u'1100701.mp4',
|
u'file': u'1100701.mp4',
|
||||||
u'md5': u'2046dd5758541d630bfa93e741e2fd79',
|
u'md5': u'c77d700bdc16ae2e9f3c26019bd96143',
|
||||||
u'info_dict': {
|
u'info_dict': {
|
||||||
u'title': u'This is VideofyMe',
|
u'title': u'This is VideofyMe',
|
||||||
u'description': None,
|
u'description': None,
|
||||||
|
@ -32,9 +32,8 @@ class VideofyMeIE(InfoExtractor):
|
||||||
config = xml.etree.ElementTree.fromstring(config_xml.encode('utf-8'))
|
config = xml.etree.ElementTree.fromstring(config_xml.encode('utf-8'))
|
||||||
video = config.find('video')
|
video = config.find('video')
|
||||||
sources = video.find('sources')
|
sources = video.find('sources')
|
||||||
url_node = find_xpath_attr(sources, 'source', 'id', 'HQ on')
|
url_node = next(node for node in [find_xpath_attr(sources, 'source', 'id', 'HQ %s' % key)
|
||||||
if url_node is None:
|
for key in ['on', 'av', 'off']] if node is not None)
|
||||||
url_node = find_xpath_attr(sources, 'source', 'id', 'HQ off')
|
|
||||||
video_url = url_node.find('url').text
|
video_url = url_node.find('url').text
|
||||||
|
|
||||||
return {'id': video_id,
|
return {'id': video_id,
|
||||||
|
|
|
@ -155,19 +155,22 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||||
# Listed in order of quality
|
# Listed in order of quality
|
||||||
_available_formats = ['38', '37', '46', '22', '45', '35', '44', '34', '18', '43', '6', '5', '17', '13',
|
_available_formats = ['38', '37', '46', '22', '45', '35', '44', '34', '18', '43', '6', '5', '17', '13',
|
||||||
'95', '94', '93', '92', '132', '151',
|
'95', '94', '93', '92', '132', '151',
|
||||||
'85', '84', '102', '83', '101', '82', '100', # 3D
|
# 3D
|
||||||
'138', '137', '136', '135', '134', '133', '160', # Dash video mp4
|
'85', '84', '102', '83', '101', '82', '100',
|
||||||
'141', '140', '139', # Dash auido mp4
|
# Dash video
|
||||||
'248', '247', '246', '245', '244', '243', '242', # Dash video webm
|
'138', '137', '248', '136', '247', '135', '246',
|
||||||
'172', '171', # Dash audio webm
|
'245', '244', '134', '243', '133', '242', '160',
|
||||||
|
# Dash audio
|
||||||
|
'141', '172', '140', '171', '139',
|
||||||
]
|
]
|
||||||
_available_formats_prefer_free = ['38', '46', '37', '45', '22', '44', '35', '43', '34', '18', '6', '5', '17', '13',
|
_available_formats_prefer_free = ['38', '46', '37', '45', '22', '44', '35', '43', '34', '18', '6', '5', '17', '13',
|
||||||
'95', '94', '93', '92', '132', '151',
|
'95', '94', '93', '92', '132', '151',
|
||||||
'85', '102', '84', '101', '83', '100', '82',
|
'85', '102', '84', '101', '83', '100', '82',
|
||||||
'248', '247', '246', '245', '244', '243', '242', # Dash video webm
|
# Dash video
|
||||||
'172', '171', # Dash audio webm
|
'138', '248', '137', '247', '136', '246', '245',
|
||||||
'138', '137', '136', '135', '134', '133', '160', # Dash video mp4
|
'244', '135', '243', '134', '242', '133', '160',
|
||||||
'141', '140', '139', # Dash auido mp4
|
# Dash audio
|
||||||
|
'172', '141', '171', '140', '139',
|
||||||
]
|
]
|
||||||
_video_extensions = {
|
_video_extensions = {
|
||||||
'13': '3gp',
|
'13': '3gp',
|
||||||
|
@ -428,7 +431,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||||
elif len(s) == 83:
|
elif len(s) == 83:
|
||||||
return s[81:64:-1] + s[82] + s[63:52:-1] + s[45] + s[51:45:-1] + s[1] + s[44:1:-1] + s[0]
|
return s[81:64:-1] + s[82] + s[63:52:-1] + s[45] + s[51:45:-1] + s[1] + s[44:1:-1] + s[0]
|
||||||
elif len(s) == 82:
|
elif len(s) == 82:
|
||||||
return s[36] + s[79:67:-1] + s[81] + s[66:40:-1] + s[33] + s[39:36:-1] + s[40] + s[35] + s[0] + s[67] + s[32:0:-1] + s[34]
|
return s[1:19] + s[0] + s[20:68] + s[19] + s[69:82]
|
||||||
elif len(s) == 81:
|
elif len(s) == 81:
|
||||||
return s[56] + s[79:56:-1] + s[41] + s[55:41:-1] + s[80] + s[40:34:-1] + s[0] + s[33:29:-1] + s[34] + s[28:9:-1] + s[29] + s[8:0:-1] + s[9]
|
return s[56] + s[79:56:-1] + s[41] + s[55:41:-1] + s[80] + s[40:34:-1] + s[0] + s[33:29:-1] + s[34] + s[28:9:-1] + s[29] + s[8:0:-1] + s[9]
|
||||||
elif len(s) == 79:
|
elif len(s) == 79:
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
|
|
||||||
__version__ = '2013.08.21'
|
__version__ = '2013.08.22'
|
||||||
|
|
Loading…
Reference in a new issue