进阶功能
播放列表
下载和管理播放列表
下载整个播放列表
# 下载完整播放列表
yt-dlp "PLAYLIST_URL"
# 按序号命名
yt-dlp -o "%(playlist_index)03d - %(title)s.%(ext)s" "PLAYLIST_URL"
# 存到列表名目录下
yt-dlp -o "%(playlist_title)s/%(playlist_index)03d - %(title)s.%(ext)s" "PLAYLIST_URL"import yt_dlp
ydl_opts = {
'outtmpl': '%(playlist_title)s/%(playlist_index)03d - %(title)s.%(ext)s',
}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
ydl.download(["PLAYLIST_URL"])[youtube:playlist] Downloading playlist: 我的播放列表
[youtube:playlist] 我的播放列表: Downloading 15 items
[download] Downloading item 1 of 15
[download] Destination: 我的播放列表/001 - 第一个视频.mp4
[download] 100% of 25.3MiB in 00:05
[download] Downloading item 2 of 15
...选择性下载
# 下载第 1-5 个
yt-dlp -I 1:5 "PLAYLIST_URL"
# 下载特定序号
yt-dlp -I 1,3,5,10 "PLAYLIST_URL"
# 从第 10 个开始
yt-dlp -I 10: "PLAYLIST_URL"
# 最新 5 个(倒数)
yt-dlp -I -5: "PLAYLIST_URL"
# 每隔一个下载(步长 2)
yt-dlp -I ::2 "PLAYLIST_URL"
# 反转顺序下载
yt-dlp -I ::-1 "PLAYLIST_URL"import yt_dlp
# 下载第 1-5 个
ydl_opts = {
'playlist_items': '1-5',
}
# 特定序号
ydl_opts_specific = {
'playlist_items': '1,3,5,10',
}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
ydl.download(["PLAYLIST_URL"])单视频 vs 播放列表
# 如果 URL 同时是视频和播放列表的一部分,只下载单个视频
yt-dlp --no-playlist "URL"
# 强制按播放列表处理
yt-dlp --yes-playlist "URL"import yt_dlp
# 禁止处理播放列表,只下载单个视频
ydl_opts = {
'noplaylist': True,
}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
ydl.download(["URL"])播放列表信息提取
import yt_dlp
with yt_dlp.YoutubeDL({'skip_download': True, 'extract_flat': True}) as ydl:
info = ydl.extract_info("PLAYLIST_URL", download=False)
print(f"播放列表: {info['title']}")
print(f"视频数量: {len(info['entries'])}")
print()
for i, entry in enumerate(info['entries'], 1):
print(f"{i:3d}. {entry.get('title', 'N/A')}")
print(f" URL: {entry.get('url', 'N/A')}")extract_flat: True 只获取播放列表的目录信息,不深入解析每个视频的详细信息,速度更快。
频道批量下载
# 下载频道所有视频
yt-dlp "https://www.youtube.com/@ChannelName/videos"
# 使用归档避免重复
yt-dlp --download-archive archive.txt \
-o "%(uploader)s/%(upload_date>%Y-%m-%d)s - %(title)s.%(ext)s" \
"https://www.youtube.com/@ChannelName/videos"