1054 字
5 分钟
[工具] yt-dlp 配置
yt-dlp
/
yt-dlp
Waiting for api.github.com...
00K
0K
0K
Waiting...

本指南总结了配置高性能、高成功率 yt-dlp 下载环境的全过程,特别针对 YouTube 的反爬虫限制(403/429 错误)及双语字幕需求进行了优化

1. 基础环境安装#

确保系统中安装了以下核心组件:

NOTE
  • yt-dlp: 主程序
  • FFmpeg: 用于视频合并、格式转换及字幕嵌入(必装)
  • Node.js: 用于解决 YouTube 的 JavaScript 挑战(解决 403 错误的关键)
  • Vivaldi/Chrome/Firefox: 用于提供 Cookie(解决 429 限制及高级验证)
Terminal window
# Arch Linux 示例
sudo pacman -Syu
sudo pacman -S yt-dlp ffmpeg nodejs

2. 核心配置文件#

TIP

配置文件路径:~/.config/yt-dlp/config

以下是经过优化的完整配置,可直接复制使用:

Terminal window
# ============================================================
# yt-dlp 配置文件
# ============================================================
# --- 网络与代理设置 ---
# 可以在命令行加 --proxy "URL"(URL为空不走代理)
--proxy ""
# 强制使用 IPv4,在很多地区,IPv4 的连接比 IPv6 更稳定,能有效解决 403 Forbidden 报错
--force-ipv4
# --- 验证与绕过限制 (重要) ---
# 从浏览器中读取 Cookie,这是绕过 429 (请求频繁) 和下载受限视频的关键
# 请改成已经登录过 YouTube 的浏览器
--cookies-from-browser firefox
# 指定 JS 运行时为 Node.js,用于处理 YouTube 的签名挑战,防止下载被限速
--js-runtime node
# 允许从 GitHub 自动获取最新的挑战解决脚本,确保在 YouTube 更新算法后依然有效
--remote-components ejs:github
# --- 视频质量与格式 ---
# 画质优先:下载最好的视频流(含VP9/AV1) + 最好的音频流,如果无法合并则选最好的单文件
-f "bestvideo+bestaudio/best"
# 强制合并格式为 MKV,MKV 兼容性极佳,能完美封装高清编码并支持多音轨、多字幕嵌入
--merge-output-format mkv
# 针对单流视频(如 m3u8),如果不是 mkv 则自动转封装为 mp4
--remux-video mp4
# 保持文件的原始修改时间 (如果不需要可以取消注释)
# --no-mtime
# --- 输出路径与文件名 ---
# 自定义下载文件的保存路径
# 逻辑:优先按播放列表存,没有则按网站域名存;文件名使用 "标题 [日期].后缀"
-o "~/Videos/youtube-dl/%(playlist_title,webpage_url_domain|SingleVideos)s/%(title)s [%(upload_date>%Y-%m-%d|Unknown)s].%(ext)s"
# --- 字幕设置 ---
# 默认下载并嵌入字幕
--write-subs
--embed-subs
# 如果想要字幕和视频文件分离,可以在命令行加 --no-embed-subs
# --no-embed-subs
# 下载每个字幕文件之间暂停 5 秒,这是防止 YouTube 识别并封锁 IP 的重要安全措施
--sleep-subtitles 5
# 语言设置:匹配 B 站 AI 字幕 (ai-zh) 及各类中英文字幕
--sub-langs ".*zh.*,.*en.*,-danmaku"
# --- 元数据与附加信息 ---
# 在视频文件中嵌入元数据,如视频描述、上传者信息等
--embed-metadata
# 在视频中嵌入章节信息 (如果视频原作者划分了时间轴)
--embed-chapters
# --- 多线程下载 ---
# 使用 aria2c 作为外部下载器以实现多线程下载(需安装aria2c)
#--external-downloader aria2c
#--downloader-args "aria2c:-x 16 -s 16 -k 1M"
# ffmpeg_i 确保 -allowed_extensions ALL 作用于输入文件之前
--downloader-args "ffmpeg_i:-allowed_extensions ALL"
# 开启内置并发分片下载 (作为 aria2 的补充或备选)
--concurrent-fragments 10
# 忽略地理位置限制
--geo-bypass

3. 配合 mpv 实现双语字幕显示#

为了在播放时同时显示中英双行字幕,需要配置 mpv

修改 ~/.config/mpv/input.conf (快捷键)#

k cycle secondary-sid # 按 k 循环切换次要字幕 (显示在顶部)
K set secondary-sid no # 按 Shift+k 关闭次要字幕

修改 ~/.config/mpv/mpv.conf (默认设置)#

slang=zh-Hans,zh,chi,en # 主字幕优先选择中文
secondary-sid=auto # 自动开启次要字幕轨道

4. 常用操作命令#

  • 标准下载 (使用上述所有配置):

    Terminal window
    yt-dlp 'URL'
  • 仅下载音频 (MP3):

    Terminal window
    yt-dlp -x --audio-format mp3 'URL'
  • 下载整个播放列表:

    Terminal window
    yt-dlp 'URL' -o "~/Videos/youtube-dl/%(playlist_title)s/%(title)s.%(ext)s"
  • 更新 yt-dlp:

    Terminal window
    yt-dlp -U

5. 注意事项与常见问题#

IMPORTANT
  1. HTTP Error 403: Forbidden:

    • 确保已安装 Node.js
    • 确保配置文件中有 --js-runtime node
    • 尝试更换代理节点
  2. HTTP Error 429: Too Many Requests:

    • 必须使用 --cookies-from-browser
    • 减少 --sub-lang 中匹配的语言数量,不要使用 en.* 等通配符
    • 增加 --sleep-subtitles 的秒数
CAUTION
  1. Cookie 解密失败:
    • 如果 Vivaldi/Chrome 正在运行,有时 yt-dlp 无法读取数据库,请尝试关闭浏览器后再运行下载,或在弹出系统密钥环权限申请时点“允许”
[工具] yt-dlp 配置
https://www.eustia-astraea.top/posts/tools/yt-dlp-video-download/
作者
mcsl
发布于
2026-01-19
许可协议
CC BY-NC-SA 4.0