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_idbig 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
                 $"""

幸好有评论...