youtube-dl如何生成直接link?
How does youtube-dl generate direct link?
我想知道 youtube-dl 如何直接 link 生成视频。我知道
使用 youtube-dl --get-url link 我可以得到这个,但我想知道这个过程是如何进行的。 (从下载 html 页面到获得 link)。有没有办法检查这个?
Youtube-dl 是开源的,所以我想是的,但我只是不知道具体应该去哪里找。
提前致谢
youtube-dl 使用名为 InfoExtractor
的 classes 使从不同站点下载视频成为可能。 youtube 视频的信息提取器位于 /youtube_dl/extractor/youtube.py
.
这个 class 相当复杂,因为它涉及用户登录以及不同类型的视频和频道等。我认为相关部分是:
url = proto + '://www.youtube.com/watch?v=%s&gl=US&hl=en&has_verified=1&bpctr=9999999999' % video_id
其中 video_id
由 big regex 提取:
_VALID_URL = r"""(?x)^
(
(?:https?://|//) # http(s):// or protocol-independent URL
(?:(?:(?:(?:\w+\.)?[yY][oO][uU][tT][uU][bB][eE](?:-nocookie)?\.com/|
(?:www\.)?deturl\.com/www\.youtube\.com/|
(?:www\.)?pwnyoutube\.com/|
(?:www\.)?yourepeat\.com/|
tube\.majestyc\.net/|
youtube\.googleapis\.com/) # the various hostnames, with wildcard subdomains
(?:.*?\#/)? # handle anchor (#/) redirect urls
(?: # the various things that can precede the ID:
(?:(?:v|embed|e)/(?!videoseries)) # v/ or embed/ or e/
|(?: # or the v= param in all its forms
(?:(?:watch|movie)(?:_popup)?(?:\.php)?/?)? # preceding watch(_popup|.php) or nothing (like /?v=xxxx)
(?:\?|\#!?) # the params delimiter ? or # or #!
(?:.*?&)? # any other preceding param (like /?s=tuff&v=xxxx)
v=
)
))
|youtu\.be/ # just youtu.be/xxxx
|(?:www\.)?cleanvideosearch\.com/media/action/yt/watch\?videoId=
)
)? # all until now is optional -> you can pass the naked ID
([0-9A-Za-z_-]{11}) # here is it! the YouTube video ID
(?!.*?&list=) # combined list/video URLs are handled by the playlist IE
(?(1).+)? # if we found the ID, everything can follow
$"""
幸好有评论...
我想知道 youtube-dl 如何直接 link 生成视频。我知道
使用 youtube-dl --get-url link 我可以得到这个,但我想知道这个过程是如何进行的。 (从下载 html 页面到获得 link)。有没有办法检查这个?
Youtube-dl 是开源的,所以我想是的,但我只是不知道具体应该去哪里找。
提前致谢
youtube-dl 使用名为 InfoExtractor
的 classes 使从不同站点下载视频成为可能。 youtube 视频的信息提取器位于 /youtube_dl/extractor/youtube.py
.
这个 class 相当复杂,因为它涉及用户登录以及不同类型的视频和频道等。我认为相关部分是:
url = proto + '://www.youtube.com/watch?v=%s&gl=US&hl=en&has_verified=1&bpctr=9999999999' % video_id
其中 video_id
由 big regex 提取:
_VALID_URL = r"""(?x)^
(
(?:https?://|//) # http(s):// or protocol-independent URL
(?:(?:(?:(?:\w+\.)?[yY][oO][uU][tT][uU][bB][eE](?:-nocookie)?\.com/|
(?:www\.)?deturl\.com/www\.youtube\.com/|
(?:www\.)?pwnyoutube\.com/|
(?:www\.)?yourepeat\.com/|
tube\.majestyc\.net/|
youtube\.googleapis\.com/) # the various hostnames, with wildcard subdomains
(?:.*?\#/)? # handle anchor (#/) redirect urls
(?: # the various things that can precede the ID:
(?:(?:v|embed|e)/(?!videoseries)) # v/ or embed/ or e/
|(?: # or the v= param in all its forms
(?:(?:watch|movie)(?:_popup)?(?:\.php)?/?)? # preceding watch(_popup|.php) or nothing (like /?v=xxxx)
(?:\?|\#!?) # the params delimiter ? or # or #!
(?:.*?&)? # any other preceding param (like /?s=tuff&v=xxxx)
v=
)
))
|youtu\.be/ # just youtu.be/xxxx
|(?:www\.)?cleanvideosearch\.com/media/action/yt/watch\?videoId=
)
)? # all until now is optional -> you can pass the naked ID
([0-9A-Za-z_-]{11}) # here is it! the YouTube video ID
(?!.*?&list=) # combined list/video URLs are handled by the playlist IE
(?(1).+)? # if we found the ID, everything can follow
$"""
幸好有评论...