toMedia
进阶功能

批量下载

从文件、播放列表或频道批量下载视频

从 URL 文件批量下载

# 从文件读取 URL 列表
yt-dlp -a urls.txt

# 带其他参数
yt-dlp -a urls.txt -f "bestvideo[height<=1080]+bestaudio" -o "%(title)s.%(ext)s"

# urls.txt 内容示例(每行一个 URL,# 开头为注释):
# https://www.youtube.com/watch?v=xxx1
# https://www.bilibili.com/video/BV1xxx
# # 这是注释行,会被忽略
import yt_dlp

urls = [
    'https://www.youtube.com/watch?v=xxx1',
    'https://www.bilibili.com/video/BV1xxx',
]

ydl_opts = {
    'format': 'bestvideo[height<=1080]+bestaudio',
    'outtmpl': '%(title)s.%(ext)s',
}

with yt_dlp.YoutubeDL(ydl_opts) as ydl:
    ydl.download(urls)  # 传入列表

从文件读取 URL(Python)

import yt_dlp

# 从文件读取 URL
with open('urls.txt', 'r') as f:
    urls = [line.strip() for line in f
            if line.strip() and not line.startswith('#')]

ydl_opts = {'format': 'bestaudio/best'}

with yt_dlp.YoutubeDL(ydl_opts) as ydl:
    for url in urls:
        try:
            ydl.download([url])
        except Exception as e:
            print(f"下载失败 {url}: {e}")
            continue  # 跳过失败的,继续下一个

下载归档(避免重复)

# 使用下载归档文件记录已下载的视频
yt-dlp --download-archive archive.txt "URL"

# 再次运行同一命令时,已下载的会自动跳过
yt-dlp --download-archive archive.txt "URL"

# archive.txt 会记录每个下载过的视频 ID:
# youtube BV1xx411c7mD
# bilibili 12345
import yt_dlp

ydl_opts = {
    'download_archive': 'archive.txt',
}

with yt_dlp.YoutubeDL(ydl_opts) as ydl:
    ydl.download(["URL"])

--download-archive 非常适合定期同步频道或播放列表——每次运行只下载新增的视频。

播放列表下载控制

# 下载播放列表中的第 1-5 个视频
yt-dlp --playlist-start 1 --playlist-end 5 "PLAYLIST_URL"

# 只下载第 3 个
yt-dlp -I 3 "PLAYLIST_URL"

# 下载第 1, 3, 5, 7 个(范围语法)
yt-dlp -I 1,3,5,7 "PLAYLIST_URL"

# 使用 Python 切片语法:从第 5 个到末尾
yt-dlp -I 5: "PLAYLIST_URL"

# 倒数 3 个
yt-dlp -I -3: "PLAYLIST_URL"

# 不下载播放列表,只下载单个视频
yt-dlp --no-playlist "VIDEO_URL"
import yt_dlp

ydl_opts = {
    'playliststart': 1,
    'playlistend': 5,
    # 或使用 playlist_items
    'playlist_items': '1-5',  # 等价
}

with yt_dlp.YoutubeDL(ydl_opts) as ydl:
    ydl.download(["PLAYLIST_URL"])

速率限制与间隔

# 每个视频下载间隔 5 秒(避免被封)
yt-dlp --sleep-interval 5 "PLAYLIST_URL"

# 随机间隔 3-10 秒
yt-dlp --sleep-interval 3 --max-sleep-interval 10 "PLAYLIST_URL"

# 请求间隔
yt-dlp --sleep-requests 1 "PLAYLIST_URL"

并行下载(Python 高级)

import yt_dlp
from concurrent.futures import ThreadPoolExecutor

urls = ['url1', 'url2', 'url3', 'url4']

def download(url):
    ydl_opts = {
        'format': 'bestaudio/best',
        'outtmpl': '%(title)s.%(ext)s',
        'quiet': True,
    }
    with yt_dlp.YoutubeDL(ydl_opts) as ydl:
        try:
            ydl.download([url])
            return f"成功: {url}"
        except Exception as e:
            return f"失败: {url} - {e}"

# 最多 3 个并发下载
with ThreadPoolExecutor(max_workers=3) as executor:
    results = list(executor.map(download, urls))
    for r in results:
        print(r)

并发下载请合理控制并发数(建议 2-4),过多并发可能触发网站的速率限制或 IP 封禁。

On this page