使用yt-dlp --write-auto-sub --sub-lang en --convert-subs srt https:// 命令下载youtube自动生成的CC字幕报错ERROR: [youtube] xxxxxxxx: Sign in to confirm you’re not a bot. This helps protect our community. Learn more

image-20250117152430293

遇到 “Sign in to confirm you’re not a bot” 错误是因为 YouTube 需要您验证身份以防止机器人访问。为了解决这个问题,您可以尝试以下几种方法来绕过这个限制并成功下载视频及其字幕。

方法 1:使用 Cookies 文件

最可靠的方式是通过提供已登录的浏览器的 Cookies 文件,让 yt-dlp 模拟您已经登录的状态。以下是详细步骤:

  1. 从浏览器获取 Cookies:

    • 打开您已登录 YouTube 的浏览器(如 Chrome 或 Firefox)。
    • 安装 EditThisCookie(Chrome 插件)或 Cookie Quick Manager(Firefox 插件)等 Cookie 管理插件。
    • 打开插件,找到 YouTube 的 Cookies。
    • 导出 Cookies 文件到 .json 格式。
  2. yt-dlp 中使用 Cookies 文件:

    • 下载并保存 Cookies 文件后,运行以下命令:
    1
    yt-dlp --cookies /path/to/your/cookies.json --write-auto-sub --sub-lang en --convert-subs srt https://www.youtube.com/watch?v=xxxxxxx

    通过这种方式,yt-dlp 会使用您的登录状态,避免了需要验证为机器人。


方法 2:通过登录验证

如果您不想使用 Cookies 文件,可以通过命令行让 yt-dlp 登录 YouTube 账户:

  1. 配置登录信息:

    1
    yt-dlp -u YOUR_USERNAME -p YOUR_PASSWORD --write-auto-sub --sub-lang en --convert-subs srt https://www.youtube.com/watch?v=xxxxxxx

    这样,yt-dlp 会直接使用提供的用户名和密码登录,绕过机器人验证。


方法 3:使用代理或 VPN

如果上述方法仍然无法绕过验证,您可以尝试通过代理或 VPN 来切换 IP 地址,避免 YouTube 认为您是机器人。可以使用以下命令在 yt-dlp 中设置代理:

1
yt-dlp --proxy "http://127.0.0.1:10809" --write-auto-sub --sub-lang en --convert-subs srt https://www.youtube.com/watch?v=xxxxxxx

记得将 127.0.0.1:10809 替换为您所使用的代理地址和端口。


方法 4:禁用 CAPTCHA 验证

yt-dlp 提供了一个选项来忽略 CAPTCHA 验证,虽然这种方法并不总是有效,但在某些情况下能绕过验证:

1
yt-dlp --no-check-certificate --write-auto-sub --sub-lang en --convert-subs srt https://www.youtube.com/watch?v=xxxxxxx

总结

  • 最推荐使用 Cookies 文件,这是避免机器人验证最稳妥的方式。
  • 如果您不愿意手动获取 Cookies,可以尝试使用 -u-p 参数来直接提供 YouTube 的登录凭据。
  • 代理和 VPN 可以作为补充手段,在有 IP 限制时使用。

为什么下载的字幕几乎每句都有重复,是因为转成srt吗?另外,此命令同时还将视频文件也下载了下来,我只需要下载字幕即可

1. 字幕重复问题

出现字幕重复的问题,可能是因为 YouTube 的自动生成字幕在某些情况下会有多个时间段和相同内容。这种情况在 yt-dlp 下载时,有时会将重复的字幕内容一起下载。转成 .srt 格式后,可能会出现这种多余的重复条目。

解决方法:

可以通过对字幕进行处理,去除重复内容。您可以使用 Aegisub 或其他字幕编辑工具进行去重,或使用 Python 脚本对 .srt 文件进行去重操作。

例如,使用以下 Python 脚本进行简单的去重:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import re

def remove_duplicate_subtitles(file_path):
with open(file_path, 'r', encoding='utf-8') as file:
subtitles = file.readlines()

unique_subtitles = []
prev_text = ""

for line in subtitles:
# 过滤时间和字幕文本
if '-->' in line:
unique_subtitles.append(line)
else:
if line.strip() != prev_text.strip():
unique_subtitles.append(line)
prev_text = line.strip()

with open(file_path, 'w', encoding='utf-8') as file:
file.writelines(unique_subtitles)

remove_duplicate_subtitles('your_subtitle_file.srt')

2. 只下载字幕

如果您只需要下载字幕,而不想下载视频,可以使用 --skip-download 参数。这样,yt-dlp 只会下载字幕文件而不会下载视频内容。

示例命令:

1
yt-dlp --proxy "http://127.0.0.1:10809" --write-auto-sub --sub-lang en --convert-subs srt --skip-download https://www.youtube.com/watch?v=xxxxxxx

这将仅下载字幕并跳过视频下载。

总结:

  • 字幕重复问题:可能是自动字幕的格式问题,您可以手动去重或使用脚本进行去重。
  • 只下载字幕:使用 --skip-download 参数来跳过视频下载,确保只下载字幕文件。

使用Editthiscookie插件下载字幕报错

1. 确认 Cookies 文件的有效性

您可以尝试更新 Cookies 文件,并确保它是正确导出的。可以通过以下方式重新导出 Cookies:

  • 使用 EditThisCookieCookies.txt 插件从浏览器导出最新的 Cookies(在options中设置为netscape格式并保存为txt)。
  • 使用 浏览器登录 YouTube,然后重新导出 Cookies 确保有效。

2. 确保 yt-dlp 是最新版本

由于 YouTube 经常更新其 API 和反爬机制,yt-dlp 需要定期更新才能应对这些变化。请确保您使用的是最新版本:

1
python -m pip install --upgrade yt-dlp

3. 尝试使用 --geo-bypass 参数

有时 YouTube 会根据地区限制内容,您可以尝试添加 --geo-bypass 来绕过地理限制:

1
yt-dlp --geo-bypass --cookies c:\cookies.txt --sub-langs en --write-auto-sub --skip-download h

最后好用的命令:

yt-dlp --cookies c:\cookies.txt --write-auto-sub --sub-lang en --skip-download --no-post-overwrites https://www.youtube.com/watch?v=xxxxxx