forked from minhngoc25a/youtube-dl
[youtube] Add fallback for duration extraction (closes #11841)
This commit is contained in:
parent
2417d41535
commit
556dbe7fe3
|
@ -40,6 +40,7 @@ from ..utils import (
|
||||||
sanitized_Request,
|
sanitized_Request,
|
||||||
smuggle_url,
|
smuggle_url,
|
||||||
str_to_int,
|
str_to_int,
|
||||||
|
try_get,
|
||||||
unescapeHTML,
|
unescapeHTML,
|
||||||
unified_strdate,
|
unified_strdate,
|
||||||
unsmuggle_url,
|
unsmuggle_url,
|
||||||
|
@ -383,6 +384,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||||
'description': 'test chars: "\'/\\ä↭𝕐\ntest URL: https://github.com/rg3/youtube-dl/issues/1892\n\nThis is a test video for youtube-dl.\n\nFor more information, contact phihag@phihag.de .',
|
'description': 'test chars: "\'/\\ä↭𝕐\ntest URL: https://github.com/rg3/youtube-dl/issues/1892\n\nThis is a test video for youtube-dl.\n\nFor more information, contact phihag@phihag.de .',
|
||||||
'categories': ['Science & Technology'],
|
'categories': ['Science & Technology'],
|
||||||
'tags': ['youtube-dl'],
|
'tags': ['youtube-dl'],
|
||||||
|
'duration': 10,
|
||||||
'like_count': int,
|
'like_count': int,
|
||||||
'dislike_count': int,
|
'dislike_count': int,
|
||||||
'start_time': 1,
|
'start_time': 1,
|
||||||
|
@ -402,6 +404,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||||
'tags': ['Icona Pop i love it', 'sweden', 'pop music', 'big beat records', 'big beat', 'charli',
|
'tags': ['Icona Pop i love it', 'sweden', 'pop music', 'big beat records', 'big beat', 'charli',
|
||||||
'xcx', 'charli xcx', 'girls', 'hbo', 'i love it', "i don't care", 'icona', 'pop',
|
'xcx', 'charli xcx', 'girls', 'hbo', 'i love it', "i don't care", 'icona', 'pop',
|
||||||
'iconic ep', 'iconic', 'love', 'it'],
|
'iconic ep', 'iconic', 'love', 'it'],
|
||||||
|
'duration': 180,
|
||||||
'uploader': 'Icona Pop',
|
'uploader': 'Icona Pop',
|
||||||
'uploader_id': 'IconaPop',
|
'uploader_id': 'IconaPop',
|
||||||
'uploader_url': r're:https?://(?:www\.)?youtube\.com/user/IconaPop',
|
'uploader_url': r're:https?://(?:www\.)?youtube\.com/user/IconaPop',
|
||||||
|
@ -419,6 +422,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||||
'title': 'Justin Timberlake - Tunnel Vision (Explicit)',
|
'title': 'Justin Timberlake - Tunnel Vision (Explicit)',
|
||||||
'alt_title': 'Tunnel Vision',
|
'alt_title': 'Tunnel Vision',
|
||||||
'description': 'md5:64249768eec3bc4276236606ea996373',
|
'description': 'md5:64249768eec3bc4276236606ea996373',
|
||||||
|
'duration': 419,
|
||||||
'uploader': 'justintimberlakeVEVO',
|
'uploader': 'justintimberlakeVEVO',
|
||||||
'uploader_id': 'justintimberlakeVEVO',
|
'uploader_id': 'justintimberlakeVEVO',
|
||||||
'uploader_url': r're:https?://(?:www\.)?youtube\.com/user/justintimberlakeVEVO',
|
'uploader_url': r're:https?://(?:www\.)?youtube\.com/user/justintimberlakeVEVO',
|
||||||
|
@ -458,6 +462,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||||
'description': 'test chars: "\'/\\ä↭𝕐\ntest URL: https://github.com/rg3/youtube-dl/issues/1892\n\nThis is a test video for youtube-dl.\n\nFor more information, contact phihag@phihag.de .',
|
'description': 'test chars: "\'/\\ä↭𝕐\ntest URL: https://github.com/rg3/youtube-dl/issues/1892\n\nThis is a test video for youtube-dl.\n\nFor more information, contact phihag@phihag.de .',
|
||||||
'categories': ['Science & Technology'],
|
'categories': ['Science & Technology'],
|
||||||
'tags': ['youtube-dl'],
|
'tags': ['youtube-dl'],
|
||||||
|
'duration': 10,
|
||||||
'like_count': int,
|
'like_count': int,
|
||||||
'dislike_count': int,
|
'dislike_count': int,
|
||||||
},
|
},
|
||||||
|
@ -493,6 +498,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||||
'ext': 'm4a',
|
'ext': 'm4a',
|
||||||
'title': 'Afrojack, Spree Wilson - The Spark ft. Spree Wilson',
|
'title': 'Afrojack, Spree Wilson - The Spark ft. Spree Wilson',
|
||||||
'description': 'md5:12e7067fa6735a77bdcbb58cb1187d2d',
|
'description': 'md5:12e7067fa6735a77bdcbb58cb1187d2d',
|
||||||
|
'duration': 244,
|
||||||
'uploader': 'AfrojackVEVO',
|
'uploader': 'AfrojackVEVO',
|
||||||
'uploader_id': 'AfrojackVEVO',
|
'uploader_id': 'AfrojackVEVO',
|
||||||
'upload_date': '20131011',
|
'upload_date': '20131011',
|
||||||
|
@ -512,6 +518,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||||
'title': 'Taylor Swift - Shake It Off',
|
'title': 'Taylor Swift - Shake It Off',
|
||||||
'alt_title': 'Shake It Off',
|
'alt_title': 'Shake It Off',
|
||||||
'description': 'md5:95f66187cd7c8b2c13eb78e1223b63c3',
|
'description': 'md5:95f66187cd7c8b2c13eb78e1223b63c3',
|
||||||
|
'duration': 242,
|
||||||
'uploader': 'TaylorSwiftVEVO',
|
'uploader': 'TaylorSwiftVEVO',
|
||||||
'uploader_id': 'TaylorSwiftVEVO',
|
'uploader_id': 'TaylorSwiftVEVO',
|
||||||
'upload_date': '20140818',
|
'upload_date': '20140818',
|
||||||
|
@ -529,6 +536,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': 'T4XJQO3qol8',
|
'id': 'T4XJQO3qol8',
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
|
'duration': 219,
|
||||||
'upload_date': '20100909',
|
'upload_date': '20100909',
|
||||||
'uploader': 'The Amazing Atheist',
|
'uploader': 'The Amazing Atheist',
|
||||||
'uploader_id': 'TheAmazingAtheist',
|
'uploader_id': 'TheAmazingAtheist',
|
||||||
|
@ -546,6 +554,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
'title': 'The Witcher 3: Wild Hunt - The Sword Of Destiny Trailer',
|
'title': 'The Witcher 3: Wild Hunt - The Sword Of Destiny Trailer',
|
||||||
'description': r're:(?s).{100,}About the Game\n.*?The Witcher 3: Wild Hunt.{100,}',
|
'description': r're:(?s).{100,}About the Game\n.*?The Witcher 3: Wild Hunt.{100,}',
|
||||||
|
'duration': 142,
|
||||||
'uploader': 'The Witcher',
|
'uploader': 'The Witcher',
|
||||||
'uploader_id': 'WitcherGame',
|
'uploader_id': 'WitcherGame',
|
||||||
'uploader_url': r're:https?://(?:www\.)?youtube\.com/user/WitcherGame',
|
'uploader_url': r're:https?://(?:www\.)?youtube\.com/user/WitcherGame',
|
||||||
|
@ -562,6 +571,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
'title': 'Dedication To My Ex (Miss That) (Lyric Video)',
|
'title': 'Dedication To My Ex (Miss That) (Lyric Video)',
|
||||||
'description': 'md5:33765bb339e1b47e7e72b5490139bb41',
|
'description': 'md5:33765bb339e1b47e7e72b5490139bb41',
|
||||||
|
'duration': 247,
|
||||||
'uploader': 'LloydVEVO',
|
'uploader': 'LloydVEVO',
|
||||||
'uploader_id': 'LloydVEVO',
|
'uploader_id': 'LloydVEVO',
|
||||||
'uploader_url': r're:https?://(?:www\.)?youtube\.com/user/LloydVEVO',
|
'uploader_url': r're:https?://(?:www\.)?youtube\.com/user/LloydVEVO',
|
||||||
|
@ -576,6 +586,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': '__2ABJjxzNo',
|
'id': '__2ABJjxzNo',
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
|
'duration': 266,
|
||||||
'upload_date': '20100430',
|
'upload_date': '20100430',
|
||||||
'uploader_id': 'deadmau5',
|
'uploader_id': 'deadmau5',
|
||||||
'uploader_url': r're:https?://(?:www\.)?youtube\.com/user/deadmau5',
|
'uploader_url': r're:https?://(?:www\.)?youtube\.com/user/deadmau5',
|
||||||
|
@ -596,6 +607,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': 'lqQg6PlCWgI',
|
'id': 'lqQg6PlCWgI',
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
|
'duration': 6085,
|
||||||
'upload_date': '20150827',
|
'upload_date': '20150827',
|
||||||
'uploader_id': 'olympic',
|
'uploader_id': 'olympic',
|
||||||
'uploader_url': r're:https?://(?:www\.)?youtube\.com/user/olympic',
|
'uploader_url': r're:https?://(?:www\.)?youtube\.com/user/olympic',
|
||||||
|
@ -615,6 +627,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||||
'id': '_b-2C3KPAM0',
|
'id': '_b-2C3KPAM0',
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
'stretched_ratio': 16 / 9.,
|
'stretched_ratio': 16 / 9.,
|
||||||
|
'duration': 85,
|
||||||
'upload_date': '20110310',
|
'upload_date': '20110310',
|
||||||
'uploader_id': 'AllenMeow',
|
'uploader_id': 'AllenMeow',
|
||||||
'uploader_url': r're:https?://(?:www\.)?youtube\.com/user/AllenMeow',
|
'uploader_url': r're:https?://(?:www\.)?youtube\.com/user/AllenMeow',
|
||||||
|
@ -649,6 +662,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
'title': 'md5:7b81415841e02ecd4313668cde88737a',
|
'title': 'md5:7b81415841e02ecd4313668cde88737a',
|
||||||
'description': 'md5:116377fd2963b81ec4ce64b542173306',
|
'description': 'md5:116377fd2963b81ec4ce64b542173306',
|
||||||
|
'duration': 220,
|
||||||
'upload_date': '20150625',
|
'upload_date': '20150625',
|
||||||
'uploader_id': 'dorappi2000',
|
'uploader_id': 'dorappi2000',
|
||||||
'uploader_url': r're:https?://(?:www\.)?youtube\.com/user/dorappi2000',
|
'uploader_url': r're:https?://(?:www\.)?youtube\.com/user/dorappi2000',
|
||||||
|
@ -691,6 +705,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
'title': 'teamPGP: Rocket League Noob Stream (Main Camera)',
|
'title': 'teamPGP: Rocket League Noob Stream (Main Camera)',
|
||||||
'description': 'md5:dc7872fb300e143831327f1bae3af010',
|
'description': 'md5:dc7872fb300e143831327f1bae3af010',
|
||||||
|
'duration': 7335,
|
||||||
'upload_date': '20150721',
|
'upload_date': '20150721',
|
||||||
'uploader': 'Beer Games Beer',
|
'uploader': 'Beer Games Beer',
|
||||||
'uploader_id': 'beergamesbeer',
|
'uploader_id': 'beergamesbeer',
|
||||||
|
@ -703,6 +718,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
'title': 'teamPGP: Rocket League Noob Stream (kreestuh)',
|
'title': 'teamPGP: Rocket League Noob Stream (kreestuh)',
|
||||||
'description': 'md5:dc7872fb300e143831327f1bae3af010',
|
'description': 'md5:dc7872fb300e143831327f1bae3af010',
|
||||||
|
'duration': 7337,
|
||||||
'upload_date': '20150721',
|
'upload_date': '20150721',
|
||||||
'uploader': 'Beer Games Beer',
|
'uploader': 'Beer Games Beer',
|
||||||
'uploader_id': 'beergamesbeer',
|
'uploader_id': 'beergamesbeer',
|
||||||
|
@ -715,6 +731,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
'title': 'teamPGP: Rocket League Noob Stream (grizzle)',
|
'title': 'teamPGP: Rocket League Noob Stream (grizzle)',
|
||||||
'description': 'md5:dc7872fb300e143831327f1bae3af010',
|
'description': 'md5:dc7872fb300e143831327f1bae3af010',
|
||||||
|
'duration': 7337,
|
||||||
'upload_date': '20150721',
|
'upload_date': '20150721',
|
||||||
'uploader': 'Beer Games Beer',
|
'uploader': 'Beer Games Beer',
|
||||||
'uploader_id': 'beergamesbeer',
|
'uploader_id': 'beergamesbeer',
|
||||||
|
@ -727,6 +744,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
'title': 'teamPGP: Rocket League Noob Stream (zim)',
|
'title': 'teamPGP: Rocket League Noob Stream (zim)',
|
||||||
'description': 'md5:dc7872fb300e143831327f1bae3af010',
|
'description': 'md5:dc7872fb300e143831327f1bae3af010',
|
||||||
|
'duration': 7334,
|
||||||
'upload_date': '20150721',
|
'upload_date': '20150721',
|
||||||
'uploader': 'Beer Games Beer',
|
'uploader': 'Beer Games Beer',
|
||||||
'uploader_id': 'beergamesbeer',
|
'uploader_id': 'beergamesbeer',
|
||||||
|
@ -768,6 +786,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||||
'title': '{dark walk}; Loki/AC/Dishonored; collab w/Elflover21',
|
'title': '{dark walk}; Loki/AC/Dishonored; collab w/Elflover21',
|
||||||
'alt_title': 'Dark Walk',
|
'alt_title': 'Dark Walk',
|
||||||
'description': 'md5:8085699c11dc3f597ce0410b0dcbb34a',
|
'description': 'md5:8085699c11dc3f597ce0410b0dcbb34a',
|
||||||
|
'duration': 133,
|
||||||
'upload_date': '20151119',
|
'upload_date': '20151119',
|
||||||
'uploader_id': 'IronSoulElf',
|
'uploader_id': 'IronSoulElf',
|
||||||
'uploader_url': r're:https?://(?:www\.)?youtube\.com/user/IronSoulElf',
|
'uploader_url': r're:https?://(?:www\.)?youtube\.com/user/IronSoulElf',
|
||||||
|
@ -809,10 +828,11 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
'title': 'md5:e41008789470fc2533a3252216f1c1d1',
|
'title': 'md5:e41008789470fc2533a3252216f1c1d1',
|
||||||
'description': 'md5:a677553cf0840649b731a3024aeff4cc',
|
'description': 'md5:a677553cf0840649b731a3024aeff4cc',
|
||||||
|
'duration': 721,
|
||||||
'upload_date': '20150127',
|
'upload_date': '20150127',
|
||||||
'uploader_id': 'BerkmanCenter',
|
'uploader_id': 'BerkmanCenter',
|
||||||
'uploader_url': r're:https?://(?:www\.)?youtube\.com/user/BerkmanCenter',
|
'uploader_url': r're:https?://(?:www\.)?youtube\.com/user/BerkmanCenter',
|
||||||
'uploader': 'BerkmanCenter',
|
'uploader': 'The Berkman Klein Center for Internet & Society',
|
||||||
'license': 'Creative Commons Attribution license (reuse allowed)',
|
'license': 'Creative Commons Attribution license (reuse allowed)',
|
||||||
},
|
},
|
||||||
'params': {
|
'params': {
|
||||||
|
@ -827,6 +847,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
'title': 'Democratic Socialism and Foreign Policy | Bernie Sanders',
|
'title': 'Democratic Socialism and Foreign Policy | Bernie Sanders',
|
||||||
'description': 'md5:dda0d780d5a6e120758d1711d062a867',
|
'description': 'md5:dda0d780d5a6e120758d1711d062a867',
|
||||||
|
'duration': 4060,
|
||||||
'upload_date': '20151119',
|
'upload_date': '20151119',
|
||||||
'uploader': 'Bernie 2016',
|
'uploader': 'Bernie 2016',
|
||||||
'uploader_id': 'UCH1dpzjCEiGAt8CXkryhkZg',
|
'uploader_id': 'UCH1dpzjCEiGAt8CXkryhkZg',
|
||||||
|
@ -871,7 +892,8 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||||
'id': 'iqKdEhx-dD4',
|
'id': 'iqKdEhx-dD4',
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
'title': 'Isolation - Mind Field (Ep 1)',
|
'title': 'Isolation - Mind Field (Ep 1)',
|
||||||
'description': 'md5:3a72f23c086a1496c9e2c54a25fa0822',
|
'description': 'md5:8013b7ddea787342608f63a13ddc9492',
|
||||||
|
'duration': 2085,
|
||||||
'upload_date': '20170118',
|
'upload_date': '20170118',
|
||||||
'uploader': 'Vsauce',
|
'uploader': 'Vsauce',
|
||||||
'uploader_id': 'Vsauce',
|
'uploader_id': 'Vsauce',
|
||||||
|
@ -1516,11 +1538,11 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||||
video_subtitles = self.extract_subtitles(video_id, video_webpage)
|
video_subtitles = self.extract_subtitles(video_id, video_webpage)
|
||||||
automatic_captions = self.extract_automatic_captions(video_id, video_webpage)
|
automatic_captions = self.extract_automatic_captions(video_id, video_webpage)
|
||||||
|
|
||||||
if 'length_seconds' not in video_info:
|
video_duration = try_get(
|
||||||
self._downloader.report_warning('unable to extract video duration')
|
video_info, lambda x: int_or_none(x['length_seconds'][0]))
|
||||||
video_duration = None
|
if not video_duration:
|
||||||
else:
|
video_duration = parse_duration(self._html_search_meta(
|
||||||
video_duration = int(compat_urllib_parse_unquote_plus(video_info['length_seconds'][0]))
|
'duration', video_webpage, 'video duration'))
|
||||||
|
|
||||||
# annotations
|
# annotations
|
||||||
video_annotations = None
|
video_annotations = None
|
||||||
|
|
Loading…
Reference in New Issue