Youtube-dl库和使用由不同位置生成的youtube-dl直接链接时出现403错误

65

我有一个关于youtube-dl库(https://rg3.github.io/youtube-dl/)的问题。我使用youtube-dl库不是直接下载视频,而是首先使用类似以下命令生成链接:

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


注:--simulate参数表示模拟下载,--dump-json参数表示输出JSON格式的元数据,--prefer-ffmpeg参数表示优先使用FFmpeg进行转换。-CmadmM5cOk是视频的ID。

我从json回答中获得了所需的格式链接,我使用默认格式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..."。

然后我使用这个链接从不同位置的不同电脑下载视频。对于大多数链接,它都可以正常工作,但有一些视频,例如https://www.youtube.com/watch?v=-CmadmM5cOk,我无法从不同的服务器或PC上下载,它返回ERROR 403:禁止访问。
到目前为止,我已经尝试了以下方法,我有两台服务器和我的本地PC,它们分别位于不同的国家,美国、英国和乌克兰。
例如,我在美国的Server 1上运行youtube-dl并获取链接,我可以在该Server 1上下载它,但在伦敦的Server 2和乌克兰的本地PC上,它返回ERROR 403:禁止访问。
另一个例子,我在伦敦的Server 2上生成链接,我得到不同的链接,在同一台服务器上我可以下载它,但当我在Server 1或我的本地PC上尝试时,我得到相同的ERROR 403:禁止访问。当我在本地PC上生成链接并在服务器上尝试时也是如此。
这只发生在某些特定的视频上,但是有很多这样的视频。其中一些返回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
10个回答

141

最终下载的URL仅在提取的同一台机器/IP上保证可用。更多信息请参阅此处

更新: 要解决403错误,请以www-data的身份运行youtube-dl --rm-cache-dir以删除缓存。


谢谢,我正试图通过-o-选项通过服务器实现下载,但我还有另一个问题,它在一个用户下正常工作,但在“www-data”下失败并显示403错误。我正在更新问题。 - Vedmant
4
如此解释和此问题中所述,输入命令行youtube-dl --rm-cache-dir即可解决该问题。 - Paul Rougieux
2
工作了,但是在8个轨道之后我又遇到了相同的403错误... - babipsylon
似乎是由于同一轨道引起的问题,而不是本地计算机上的某些问题,可能是由于YouTube触发的错误。 - babipsylon
这个问题发生在我刚刚安装(甚至是macOS)之后。现在我正在使用这个别名:mp3='youtube-dl --rm-cache-dir && youtube-dl -x --audio-quality 0 --audio-format mp3 --no-playlist ' - Philipp Gächter
显示剩余3条评论

56
youtube-dl --rm-cache-dir

它工作得非常完美 :)


10

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

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

难说。你的情况可能会有所不同。


我也是在Windows上运行并使用choco安装的。 - Nighto

7

如果以上选项都不起作用,那么只需执行以下操作:

pip install yt-dlp --upgrade

:)


问题是关于youtube-dl,而不是yt-dlp。 - Jeremy Caney
没错。但是这些软件包具有类似的功能,所以你应该考虑切换到yt-dlp,升级它将解决403错误。 - M.Ahmadkhani
这只能起作用 - undefined

5
对我来说,使用yt-dlp --update一次就可以了。

感谢您对Stack Overflow社区做出贡献的兴趣。这个问题已经有很多答案了,其中一个答案已经得到社区广泛验证。您确定您的方法之前没有被提到过吗?如果是这样的话,能否解释一下您的方法与众不同的地方,在什么情况下您的方法可能更好,并且为什么您认为之前的答案不够满意。您可以编辑您的回答并提供解释吗? - Jeremy Caney
1
我也不得不使用同样的开关才能让它对我起作用。我当时使用的是2023年2月的版本,它将我升级到了2023年7月的版本。 - ddelrio1986

1
如果dstftw的答案对您无效,请尝试使用root: su youtube-dl --rm-cache-dir

5
如果您使用 su 命令可以成功运行此命令,但是没有使用 su 命令则无法运行,那么这意味着您的用户配置文件权限存在问题。很可能您以 root 用户身份运行了 youtube-dl - 没有任何好的原因需要这样做。建议您递归更改缓存目录的权限(在 Ubuntu 上为 /home/<USER>/.cache/youtube-dl),使其与您实际使用的用户权限相同。 - aggregate1166877

1

接受的答案完美地运作。

如果有人正在使用 yt-dlp 而不是 youtube-dl,那么请使用 yt-dlp --rm-cache-dir,它也可以正常工作。


1
尝试升级到最新版本的yt-dlp
python -m pip install -U yt-dlp

0
这个命令会帮你下载YouTube视频。
yt-dlp -vU  -f "bv*+ba" put-your-youtube-address-here-guys

0

我尝试清除缓存,但仍然遇到403错误。不得不添加cookies(--cookies cookies.txt)。这仍然需要我偶尔重启。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接