×

【已解决】yt-dlp Sign in to confirm you’re not a bot. 问题

Falcon 2024-06-08 views:
摘要

正在生成中……

这几天我很纳闷,为什么yt-dlp下载视频后上传云盘那套方法总是报错,错误日志大概长这样子:

ERROR: [youtube] Q0W6wcio384: Sign in to confirm you’re not a bot. 
...

我也是搜索后才找到这个issue,新近的issue:https://github.com/yt-dlp/yt-dlp/issues/10128,原因是 油管判断你使用下载工具,把ip给 ban 了,有回复解决方案是72小时内不要下载了,更不要提供cookie去下载,否则可能直接把你油管账号给封了。

解决方法就是换个ip!

PS: 也有不更换ip或代理的方式,更新在文章最后面了。

行吧,鉴于我使用的是docker方式的yt-dlp,代理端口位于宿主机,而linux要从docker容器内访问宿主机还比较麻烦,如果使用了防火墙还要修改规则,windows和mac反而容易,只要使用 host.docker.internal 即可。

添加代理和修改防火墙规则

我的解决办法是在内网网卡,比如 10.0.8.4:7777 打开一个sockes代理,ufw添加规则:

ufw allow from 172.0.0.0/8 to any

172是docker默认网关的ip地址开头,这条规则是允许docker容器访问宿主机的全部网卡地址,如果要严格限制,只访问 10.0.8.4,应该这样写:

ufw allow from 172.0.0.0/8 to 10.0.8.4

测试代理:

使用curl测试

# 进入容器:
docker run -it --rm --entrypoint /bin/bash  falconchen/amd64-yt-dlp
#检查是否代理成功
curl -v -x socks5h://10.0.8.4:7777 ip.fm

使用yt-dlp测试

docker run -i --rm -v `pwd`:/data falconchen/amd64-yt-dlp --proxy socks5://10.0.8.4:7777 https://www.youtube.com/shorts/VJb8JTtwRP0

下载没有问题,把

--proxy socks5://10.0.8.4:7777

写入yt-dlp.conf,完成!

20240905 更新:

YouTube似乎在加强访问控制,导致许多应用和服务受到影响。如果一定要使用用户登录,比如下载私密或受限视频,可以尝试使用OAuth认证代替Cookie。实测用上这种方式后不需要更换ip或代理也能下载。

方法如下:

  1. 先更新yt-dlp到最新版
yt-dlp -U

如果你的yt-dlp是使用pip安装的,则执行

pip install -u yt-dlp
  1. yt-dlp 安装 这个插件
python3 -m pip install -U https://github.com/coletdjnz/yt-dlp-youtube-oauth2/archive/refs/heads/master.zip
  1. 运行
yt-dlp --username oauth2 --password '' https://www.youtube.com/watch?v=aHq72PNRMlQ

出现以下内容

[youtube+oauth2] oauth2: Initializing OAuth2 Authorization Flow
[youtube+oauth2] To give yt-dlp access to your account, go to  https://www.google.com/device  and enter code  XYZ-XYZ-ABCD

这是电视设备的Oauth验证流程,在浏览器打开https://www.google.com/device ,然后按要求验证,输入前面最后出现的那一串随机字符,比如 XYZ-XYZ-ABCD,每个人的不一样。

最后会看到成功!设备已连接的页面。 同时终端下的yt-dlp也开始下载

$ yt-dlp --username oauth2 --password '' https://www.youtube.com/watch\?v\=aHq72PNRMlQ
[youtube+oauth2] oauth2: Initializing OAuth2 Authorization Flow
[youtube+oauth2] To give yt-dlp access to your account, go to  https://www.google.com/device  and enter code   XYZ-XYZ-ABCD
[youtube+oauth2] Authorization successful
[youtube+oauth2] Extracting URL: https://www.youtube.com/watch?v=aHq72PNRMlQ
[youtube+oauth2] aHq72PNRMlQ: Downloading webpage

如果没有问题,把

--username oauth2 --password ''

写入你的 yt-dlp.conf配置文件,以后就可以不用加这串参数下载了。

直接运行:

yt-dlp https://www.youtube.com/watch?v=aHq72PNRMlQ

One More Thing

这个插件会把OAUTH的凭据保存在缓存,使用了yt-dlp的缓存机制,默认缓存的路径在Mac或者Linux上是:

~/.cache/yt-dlp/youtube-oauth2

在Windows上是

%LOCALAPPDATA%\yt-dlp\Cache\youtube-oauth2

如果想指定 yt-dlp 的缓存目录路径,可以使用--cache-dir参数

yt-dlp --cache-dir /path/to/custom/cache

如果想删除缓存

yt-dlp --rm-cache-dir

这条命令不仅会清除缓存,还会在终端中显示缓存目录的位置。例如:

[cache] Cleared cache at /home/user/.cache/yt-dlp

知道这个对普通用户没什么用,但对做Docker image有用,好了,我准备给我的Docker image也加上这个插件。

本文收录于