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