Youtube-dl 库和错误 403:使用来自不同位置的 youtube-dl 生成的直接 link 时禁止

Youtube-dl library and ERROR 403: Forbidden when using generated direct link by youtube-dl from different locations

我对 youtube-dl 库 (https://rg3.github.io/youtube-dl/) 有疑问。我使用 youtube-dl 不是为了通过这个库直接下载视频,而是我首先使用这样的命令生成 link:

youtube-dl --simulate --dump-json --prefer-ffmpeg -- -CmadmM5cOk

我从 json 的回答中得到了需要的格式 link,我使用默认格式 1280x720 mp4。链接看起来像这样“https://r4---sn-nto52nx-px8e.googlevideo.com/videoplayback?lmt=1432339993780507&ip=x.x.x.x&key=yt6&fexp=9408710%2C9409069%2C9413137%2C9415365%2C9415485%2C9416023%2C9416126%2C941...”。

然后我使用这个 link 从不同位置的不同 PC 下载视频。对于大多数 links 它工作正常,但有一些视频,例如 https://www.youtube.com/watch?v=-CmadmM5cOk,我无法从不同的服务器或 PC 下载,它 returns 错误 403:禁止访问。

所以到目前为止我尝试了什么,我有 2 个服务器和我的本地 PC,它们全部 3 个位于不同的国家,美国、英国和乌克兰。

比如我在美国服务器1上运行 youtube-dl并得到link,我得到link,我可以在这个服务器1上下载,但是伦敦的服务器 2 和我在乌克兰的本地 PC returns ERROR 403: Forbidden.

另一个例子,我在伦敦的服务器 2 上生成 link,我得到不同的 link,我可以在同一台服务器上下载它,但是当我在服务器 1 或我的本地 PC 上尝试时我得到相同的错误 403:禁止访问。当我在本地 PC 上生成 link 并在服务器上尝试时也是如此。

这种情况只发生在一些确切的视频上,但有很多。 returns 403 的部分视频:https://www.youtube.com/watch?v=09R8_2nJtjg, https://www.youtube.com/watch?v=7PCkvCPvDXk.

谢谢,感谢您的帮助!

更新:

我正在尝试使用您建议的选项“-o -”将视频文件输出到标准输出,然后将其重新翻译给用户。但是我还有另一个问题,如果我使用 ssh 登录并尝试使用我的用户命令它会工作,但是当我在 "www-data" 用户下启动相同的命令时它会抛出 403 错误。这是详细的输出:

这里是详细报告:

[debug] System config: []
[debug] User config: []
[debug] Command-line args: [u'--prefer-ffmpeg', u'--no-warnings', u'-f', u'22', u'-o', u'-', u'-v', u'--', u'QcIy9NiNbmo']
[debug] Encodings: locale UTF-8, fs UTF-8, out UTF-8, pref UTF-8
[debug] youtube-dl version 2015.08.16.1
[debug] Python version 2.7.3 - Linux-4.1.0-x86_64-linode59-x86_64-with-debian-7.8
[debug] exe versions: avconv 0.8.17-6, avprobe 0.8.17-6, ffmpeg 0.8.17-6, ffprobe 0.8.17-6
[debug] Proxy map: {}
[youtube] QcIy9NiNbmo: Downloading webpage
[youtube] QcIy9NiNbmo: Downloading video info webpage
[youtube] QcIy9NiNbmo: Extracting video information
[youtube] {22} signature length 40.42, html5 player new
[youtube] {43} signature length 40.42, html5 player new
[youtube] {18} signature length 40.42, html5 player new
[youtube] {5} signature length 40.42, html5 player new
[youtube] {36} signature length 40.42, html5 player new
[youtube] {17} signature length 40.42, html5 player new
[youtube] {137} signature length 40.42, html5 player new
[youtube] {248} signature length 40.42, html5 player new
[youtube] {136} signature length 40.42, html5 player new
[youtube] {247} signature length 40.42, html5 player new
[youtube] {135} signature length 40.42, html5 player new
[youtube] {244} signature length 40.42, html5 player new
[youtube] {134} signature length 40.42, html5 player new
[youtube] {243} signature length 40.42, html5 player new
[youtube] {133} signature length 40.42, html5 player new
[youtube] {242} signature length 40.42, html5 player new
[youtube] {160} signature length 40.42, html5 player new
[youtube] {140} signature length 40.42, html5 player new
[youtube] {171} signature length 40.42, html5 player new
[youtube] QcIy9NiNbmo: Downloading DASH manifest
[debug] Invoking downloader on u'https://r6---sn-q4f7sn7s.googlevideo.com/videoplayback?dur=244.924&ipbits=0&sver=3&expire=1440076742&itag=22&lmt=1432153223392108&ratebypass=yes&fexp=9406010%2C9407118%2C9407156%2C9408710%2C9409069%2C9412515%2C9412774%2C9412779%2C9415365%2C9415485%2C9416023%2C9416126%2C9416326%2C9416916%2C9417707%2C9418153%2C9418449%2C9418954&key=yt5&mime=video%2Fmp4&initcwndbps=19078750&source=youtube&upn=H3j2i1TBZjA&mn=sn-q4f7sn7s&mm=31&pl=32&id=o-ADA7nHOi-VHvDpG35GbK7zvbnjmrppbPKN4PlVS25gcx&requiressl=yes&pcm2=no&ip=2600%3A3c00%3A%3Af03c%3A91ff%3Afe84%3A4cc7&mv=m&sparams=dur%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cpcm2%2Cpl%2Cratebypass%2Crequiressl%2Csource%2Cupn%2Cexpire&mt=1440055050&ms=au&signature=FCB04C87410298BCDA619B8DB06221417292500B.669E8F187A5885C08D057F924A9551A657FF584B'
ERROR: unable to download video data: HTTP Error 403: Forbidden
Traceback (most recent call last):
  File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 1585, in process_info
    success = dl(filename, info_dict)
  File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 1527, in dl
    return fd.download(name, info)
  File "/usr/local/bin/youtube-dl/youtube_dl/downloader/common.py", line 342, in download
    return self.real_download(filename, info_dict)
  File "/usr/local/bin/youtube-dl/youtube_dl/downloader/http.py", line 60, in real_download
    data = self.ydl.urlopen(request)
  File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 1860, in urlopen
    return self._opener.open(req, timeout=self._socket_timeout)
  File "/usr/lib/python2.7/urllib2.py", line 407, in open
    response = meth(req, response)
  File "/usr/lib/python2.7/urllib2.py", line 520, in http_response
    'http', request, response, code, msg, hdrs)
  File "/usr/lib/python2.7/urllib2.py", line 445, in error
    return self._call_chain(*args)
  File "/usr/lib/python2.7/urllib2.py", line 379, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.7/urllib2.py", line 528, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
HTTPError: HTTP Error 403: Forbidden

最终下载 URL 只保证在提取的相同 machine/IP 上有效。 More on this.

更新: youtube-dl --rm-cache-dir代表www-data.

去除缓存403

如果 dstftw 的答案对您不起作用,请尝试使用 root: su youtube-dl --rm-cache-dir

youtube-dl --rm-cache-dir

完美运行:)

我尝试清除缓存,继续得到 403。不得不添加 cookies (--cookies cookies.txt)。这仍然需要我偶尔重新启动。

我也遇到了 403 错误。尝试清除缓存无济于事。

我添加了“-v”开关以查看是否可以确定下载失败的原因,令我惊讶的是,视频开始下载了。

去图吧。 YMMV.