yt-dlp高级用法:如何用一条命令搞定YouTube播放列表下载与分类整理

每次手动整理下载的YouTube视频是不是让你抓狂?学术研究需要批量下载课程视频时,是否总在重复劳动?作为yt-dlp的重度用户,我发现90%的人只用了它10%的功能。今天我要分享的这套组合拳,能让你用一条命令完成从下载到分类整理的全流程。

1. 理解yt-dlp的文件命名魔法

yt-dlp最强大的特性之一是其灵活的-o参数,它支持使用模板变量动态生成文件名和目录结构。我们先拆解几个核心变量:

%(title)s        # 视频标题
%(uploader)s     # 上传者名称  
%(upload_date)s  # 上传日期(YYYYMMDD)
%(ext)s          # 文件扩展名
%(playlist)s     # 播放列表名称
%(playlist_index)s # 在播放列表中的序号

实际案例对比:假设我们要下载一个名为"Python教程"的播放列表

# 基础用法(所有视频堆在同一个目录)
yt-dlp "https://youtube.com/playlist?list=PL123"

# 进阶用法(按播放列表分类)
yt-dlp -o "%(playlist)s/%(title)s.%(ext)s" "https://youtube.com/playlist?list=PL123"

2. 播放列表的智能分类方案

2.1 按内容类型自动归档

对于自媒体创作者,我推荐这种目录结构:

yt-dlp -o "YouTube/%(upload_date>%Y-%m)s/%(playlist)s/%(title)s.%(ext)s" --download-archive archive.txt PL123

这个命令实现了:

  • 按年月创建父目录(如YouTube/2023-08
  • 二级目录使用播放列表名称
  • --download-archive记录已下载视频,避免重复

2.2 学术资料的特殊处理

研究文献往往需要包含原始URL信息:

yt-dlp -o "%(playlist)s/%(playlist_index)02d_%(title).100s.%(ext)s" --print-json --write-info-json PL456

关键参数说明:

  • %02d 将序号格式化为两位数(01,02...)
  • .100s 截断过长的标题(避免文件名超限)
  • --write-info-json 保存视频元数据

3. 高阶文件管理技巧

3.1 多级目录嵌套

这个命令创建了年度→上传者→播放列表的三级结构:

yt-dlp -o "%(upload_date>%Y)s/%(uploader)s/%(playlist)s/%(playlist_index)s_%(title)s.%(ext)s" PL789

3.2 特殊字符处理方案

遇到包含/等非法字符的标题时,添加:

--restrict-filenames --windows-filenames

3.3 并行下载优化

大幅提升批量下载速度:

yt-dlp -o "%(playlist)s/%(title)s.%(ext)s" --concurrent-fragments 5 --throttled-rate 1M PL123

参数说明:

参数 作用 推荐值
--concurrent-fragments 并行下载片段数 3-5
--throttled-rate 最低下载速率 1M

4. 自动化实战:完整的学术资料收集方案

这是我为研究生设计的全自动脚本:

#!/bin/bash

# 定义保存路径
SAVE_PATH="$HOME/Academic/%(upload_date>%Y)s/%(playlist)s"

# 完整下载命令
yt-dlp \
  -o "${SAVE_PATH}/%(playlist_index)02d_%(title)s.%(ext)s" \
  --write-info-json \
  --write-thumbnail \
  --convert-thumbnails jpg \
  --embed-metadata \
  --embed-thumbnail \
  --download-archive ~/downloaded.txt \
  --limit-rate 2M \
  --sleep-requests 1 \
  --playlist-reverse \
  "$1"

这个方案实现了:

  1. 按年份和课程自动归档
  2. 保存完整元数据和缩略图
  3. 自动跳过已下载内容
  4. 限速防止被封禁
  5. 按课程顺序下载(--playlist-reverse

5. 异常处理与调试技巧

当命令复杂时,建议分步验证:

# 1. 先测试文件名生成
yt-dlp --print filename -o "测试/%(title)s.%(ext)s" URL

# 2. 模拟运行(不实际下载)
yt-dlp --simulate --print filename -o "测试/%(title)s.%(ext)s" URL

# 3. 限制下载数量测试
yt-dlp --max-downloads 2 -o "测试/%(title)s.%(ext)s" URL

常见问题解决方案:

  • 中文乱码:添加--compat-options filename-sanitization
  • 网络错误:使用--retries 10--fragment-retries 10
  • 403禁止访问:尝试--force-ipv4或更换User-Agent

记得定期更新yt-dlp以获得最佳兼容性:

yt-dlp -U
Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐