侧边栏壁纸
  • 累计撰写 43 篇文章
  • 累计创建 19 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

yt-dlp下载工具使用教程

李丰华
2024-11-12 / 0 评论 / 0 点赞 / 133 阅读 / 0 字

目录

安装说明

  1. 下载yt-dlp

    • 访问yt-dlp官方发布页
    • 下载yt-dlp.exe文件
    • 将下载的文件放在一个固定的文件夹中(建议创建专门的文件夹)
  2. 安装ffmpeg(强烈推荐)

  3. 将yt-dlp所在文件夹添加到系统环境变量Path中(可选但推荐)

    • 打开系统属性 > 高级 > 环境变量
    • 在"系统变量"中找到"Path"
    • 点击"编辑" > "新建"
    • 添加yt-dlp.exe所在的文件夹路径

基本使用

我的组合命令

yt-dlp -f "bv*[height<=1080]+ba" -S "ext" --concurrent-fragments 5 --progress --write-subs URL

这个命令的作用是:下载不超过1080p分辨率的最佳视频(偏好mp4等常用格式)和最佳音频并合并,同时使用5个线程进行下载以提高速度,显示进度条,并下载可用的字幕文件。

以下是每个参数的简单说明:

  • -f "bv*[height<=1080]+ba": 选择最高1080p的视频和最佳音频
  • -S "ext": 优先选择通用格式(mp4等)
  • --concurrent-fragments 5: 使用5个线程下载
  • --progress: 显示进度条
  • --write-subs: 下载字幕

最简单的下载命令

# 下载单个视频(自动选择最佳质量)
yt-dlp https://www.youtube.com/watch?v=xxxxxxxxxxx

# 下载播放列表
yt-dlp https://www.youtube.com/playlist?list=xxxxxxxxxxx

指定下载路径

# 下载到指定文件夹
yt-dlp -P "D:/Videos" https://www.youtube.com/watch?v=xxxxxxxxxxx

# 使用自定义文件名
yt-dlp -o "D:/Videos/%(title)s.%(ext)s" https://www.youtube.com/watch?v=xxxxxxxxxxx

视频格式与画质选择

查看可用格式

# 列出视频所有可用格式
yt-dlp -F https://www.youtube.com/watch?v=xxxxxxxxxxx

输出示例:

ID  格式   分辨率  文件大小  备注
137 mp4    1080p  1.5G     仅视频
251 webm   audio  128k     仅音频
...

选择特定格式下载

# 下载指定格式(通过格式ID)
yt-dlp -f 137+251 https://www.youtube.com/watch?v=xxxxxxxxxxx

# 下载最佳质量
yt-dlp -f bestvideo+bestaudio https://www.youtube.com/watch?v=xxxxxxxxxxx

# 限制最大分辨率
yt-dlp -f "bestvideo[height<=1080]+bestaudio" https://www.youtube.com/watch?v=xxxxxxxxxxx

格式筛选示例

# 下载最佳mp4格式
yt-dlp -f "bestvideo[ext=mp4]+bestaudio[ext=m4a]" URL

# 下载720p或更低分辨率
yt-dlp -f "bestvideo[height<=720]+bestaudio" URL

# 下载特定编码格式(如h264)
yt-dlp -f "bestvideo[vcodec^=avc]+bestaudio" URL

下载设置

下载限速

# 限制下载速度(如5M/s)
yt-dlp --limit-rate 5M URL

下载字幕

# 下载所有可用字幕
yt-dlp --write-subs URL

# 下载特定语言字幕
yt-dlp --write-subs --sub-langs "en,zh-Hans" URL

下载缩略图

# 下载视频缩略图
yt-dlp --write-thumbnail URL

# 下载缩略图并嵌入到视频文件
yt-dlp --embed-thumbnail URL

批量下载

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

# 下载播放列表中的特定视频
yt-dlp --playlist-items 1,3,5-7 URL

实用示例

常用组合命令

# 下载1080p视频,添加字幕和缩略图
yt-dlp -f "bestvideo[height<=1080]+bestaudio" --embed-thumbnail --write-subs URL

# 下载整个播放列表到指定文件夹,按照特定格式命名
yt-dlp -o "D:/Videos/%(playlist_title)s/%(playlist_index)s-%(title)s.%(ext)s" --embed-thumbnail URL

# 下载最佳质量mp4格式,限速5M/s
yt-dlp -f "bestvideo[ext=mp4]+bestaudio[ext=m4a]" --limit-rate 5M --merge-output-format mp4 URL

高级下载选项

# 启用多线程下载
yt-dlp --concurrent-fragments 5 URL

# 断点续传
yt-dlp -c URL

# 自动重试失败的下载
yt-dlp --retries 3 URL

输出模板示例

# 使用视频ID下载视频,保持原文件扩展名
$ yt-dlp --print filename -o "test video.%(ext)s" BaW_jenozKc
test video.webm    # 使用指定的文件名和正确的扩展名

# 使用标题作为文件名,支持各种特殊字符
$ yt-dlp --print filename -o "%(title)s.%(ext)s" BaW_jenozKc
youtube-dl test video ''_ä↭𝕐.webm    # 包含各种特殊字符的文件名

# 使用限制字符的文件名(避免特殊字符)
$ yt-dlp --print filename -o "%(title)s.%(ext)s" BaW_jenozKc --restrict-filenames
youtube-dl_test_video_.webm    # 只包含基本ASCII字符的文件名

# 将YouTube播放列表视频下载到单独的目录中,按播放列表中的顺序编号
$ yt-dlp -o "%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s" "https://www.youtube.com/playlist?list=PLwiyx1dc3P2JR9N8gQaQN_BCvlSlap7re"

# 按上传年份将YouTube播放列表视频下载到不同目录中
$ yt-dlp -o "%(upload_date>%Y)s/%(title)s.%(ext)s" "https://www.youtube.com/playlist?list=PLwiyx1dc3P2JR9N8gQaQN_BCvlSlap7re"

# 在文件名前添加播放列表索引和分隔符" - ",但仅在播放列表中时添加
$ yt-dlp -o "%(playlist_index&{} - |)s%(title)s.%(ext)s" BaW_jenozKc "https://www.youtube.com/user/TheLinuxFoundation/playlists"

# 下载YouTube频道/用户的所有播放列表,每个播放列表保存在单独的目录中
$ yt-dlp -o "%(uploader)s/%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s" "https://www.youtube.com/user/TheLinuxFoundation/playlists"

# 下载Udemy课程,在"我的视频"目录下按章节分类保存
$ yt-dlp -u user -p password -P "~/MyVideos" -o "%(playlist)s/%(chapter_number)s - %(chapter)s/%(title)s.%(ext)s" "https://www.udemy.com/java-tutorial"

# 下载整季剧集,按系列和季度分类保存在C:/MyVideos目录下
$ yt-dlp -P "C:/MyVideos" -o "%(series)s/%(season_number)s - %(season)s/%(episode_number)s - %(episode)s.%(ext)s" "https://videomore.ru/kino_v_detalayah/5_sezon/367617"

# 将视频下载为"C:\MyVideos\uploader\title.ext",字幕保存为"C:\MyVideos\subs\uploader\title.ext"
# 并将所有临时文件保存在"C:\MyVideos\tmp"中
$ yt-dlp -P "C:/MyVideos" -P "temp:tmp" -P "subtitle:subs" -o "%(uploader)s/%(title)s.%(ext)s" BaW_jenozKc --write-subs

# 将视频下载为"C:\MyVideos\uploader\title.ext",字幕保存为"C:\MyVideos\uploader\subs\title.ext"
$ yt-dlp -P "C:/MyVideos" -o "%(uploader)s/%(title)s.%(ext)s" -o "subtitle:%(uploader)s/subs/%(title)s.%(ext)s" BaW_jenozKc --write-subs

# 将正在下载的视频直接输出到标准输出
$ yt-dlp -o - BaW_jenozKc

格式选择示例

# 下载并合并最佳视频格式和最佳音频格式
# 如果没有单独的视频格式,则下载最佳的组合格式
$ yt-dlp -f "bv+ba/b"

# 下载包含视频的最佳格式,如果它没有音频流,则与最佳音频格式合并
$ yt-dlp -f "bv*+ba/b"

# 与上面相同(这是默认设置)
$ yt-dlp

# 下载最佳视频格式和最佳音频格式但不合并它们
# 对于这种情况,应该使用输出模板,因为默认情况下,bestvideo和bestaudio会有相同的文件名
$ yt-dlp -f "bv,ba" -o "%(title)s.f%(format_id)s.%(ext)s"

# 下载并合并最佳带视频流的格式,以及所有音频格式到一个文件中
$ yt-dlp -f "bv*+mergeall[vcodec=none]" --audio-multistreams

# 下载并合并最佳带视频流的格式,以及最佳的2个音频格式到一个文件中
$ yt-dlp -f "bv*+ba+ba.2" --audio-multistreams


# 以下示例展示旧方法(不使用-S)的格式选择
# 以及如何使用-S实现类似但(通常)更好的结果

# 下载可用的最差视频(旧方法)
$ yt-dlp -f "wv*+wa/w"

# 下载可用的最佳视频但选择最小分辨率
$ yt-dlp -S "+res"

# 下载可用的最小视频
$ yt-dlp -S "+size,+br"


# 下载可用的最佳mp4视频,如果没有mp4则下载最佳视频
$ yt-dlp -f "bv*[ext=mp4]+ba[ext=m4a]/b[ext=mp4] / bv*+ba/b"

# 使用最佳扩展名下载最佳视频
# (视频优先级:mp4 > mov > webm > flv;音频优先级:m4a > aac > mp3 等)
$ yt-dlp -S "ext"


# 下载可用的最佳视频,但不超过480p
# 如果没有480p以下的视频,则下载最差的视频
$ yt-dlp -f "bv*[height<=480]+ba/b[height<=480] / wv*+ba/w"

# 下载可用的最佳视频,高度不超过480p,
# 如果没有480p以下的视频,则下载最小分辨率的视频
$ yt-dlp -S "height:480"

# 下载可用的最佳视频,分辨率不超过480p
# 如果没有480p以下的视频,则下载最小分辨率的视频
# 分辨率是通过使用最小维度确定的
# 因此这对竖向视频也适用
$ yt-dlp -S "res:480"


# 下载最佳视频(同时带有音频),但大小不超过50MB
# 如果没有50MB以下的视频,则下载最差的视频(同时带有音频)
$ yt-dlp -f "b[filesize<50M] / w"

# 下载最大的视频(同时带有音频),但不超过50MB
# 如果没有50MB以下的视频,则下载最小的视频(同时带有音频)
$ yt-dlp -f "b" -S "filesize:50M"

# 下载大小最接近50MB的最佳视频(同时带有音频)
$ yt-dlp -f "b" -S "filesize~50M"


# 通过HTTP/HTTPS协议下载可用的最佳直链视频
# 如果没有这样的视频,则下载任何协议下可用的最佳视频
$ yt-dlp -f "(bv*+ba/b)[protocol^=http][protocol!*=dash] / (bv*+ba/b)"

# 使用最佳协议下载最佳视频
# (https/ftps > http/ftp > m3u8_native > m3u8 > http_dash_segments ...)
$ yt-dlp -S "proto"


# 下载使用h264或h265编解码器的最佳视频
# 如果没有这样的视频,则下载最佳视频
$ yt-dlp -f "(bv*[vcodec~='^((he|a)vc|h26[45])']+ba) / (bv*+ba/b)"

# 下载编解码器不超过h264的最佳视频
# 如果没有这样的视频,则下载编解码器最差的视频
$ yt-dlp -S "codec:h264"

# 下载编解码器不低于h264的最差视频
# 如果没有这样的视频,则下载编解码器最佳的视频
$ yt-dlp -S "+codec:h264"


# 更复杂的示例

# 下载不超过720p且帧率优先大于30的最佳视频
# 如果没有这样的视频,则下载最差的视频(仍然优先帧率大于30)
$ yt-dlp -f "((bv*[fps>30]/bv*)[height<=720]/(wv*[fps>30]/wv*)) + ba / (b[fps>30]/b)[height<=720]/(w[fps>30]/w)"

# 下载分辨率不超过720p的最大分辨率视频
# 如果没有这样的视频,则下载可用的最小分辨率视频
# 对于相同分辨率的格式,优先选择更大帧率的
$ yt-dlp -S "res:720,fps"


# 下载分辨率不低于480p的最小分辨率视频
# 如果没有这样的视频,则下载可用的最大分辨率视频
# 对于相同分辨率的格式,优先选择更好的编解码器和更大的总比特率
$ yt-dlp -S "+res:480,codec,br"

元数据修改示例

# 将标题解析为"艺术家 - 标题"格式
$ yt-dlp --parse-metadata "title:%(artist)s - %(title)s"

# 使用正则表达式解析示例
$ yt-dlp --parse-metadata "description:Artist - (?P<artist>.+)"

# 将标题设置为"系列名称 S01E05"格式
$ yt-dlp --parse-metadata "%(series)s S%(season_number)02dE%(episode_number)02d:%(title)s"

# 在视频元数据中优先使用上传者作为"artist"字段
$ yt-dlp --parse-metadata "%(uploader|)s:%(meta_artist)s" --embed-metadata

# 使用视频描述作为元数据中的"comment"字段(而不是webpage_url)
# 正确处理多行文本
$ yt-dlp --parse-metadata "description:(?s)(?P<meta_comment>.+)" --embed-metadata

# 不在视频元数据中设置"synopsis"字段
$ yt-dlp --parse-metadata ":(?P<meta_synopsis>)"

# 通过将formats字段设置为空字符串,从infojson中移除"formats"字段
$ yt-dlp --parse-metadata "video::(?P<formats>)" --write-info-json

# 将标题和上传者中的所有空格和下划线替换为连字符
$ yt-dlp --replace-in-metadata "title,uploader" "[ _]" "-"

常见问题

1. 下载速度慢

  • 尝试使用--concurrent-fragments选项启用多线程下载
  • 检查是否需要代理设置
  • 使用--limit-rate确认是否被限速

2. 格式选择问题

  • 使用-F查看所有可用格式
  • 确保选择的视频和音频格式兼容
  • 注意某些格式可能需要ffmpeg进行合并

3. 文件名错误

  • 检查-o参数的输出模板格式
  • 避免文件名中包含非法字符
  • 使用--restrict-filenames参数处理特殊字符

4. 更新yt-dlp

# 更新到最新版本
yt-dlp -U

5. 使用代理

# 使用系统代理
yt-dlp --proxy socks5://127.0.0.1:1080 URL

注意事项:

  1. 确保系统已安装ffmpeg以支持格式转换和合并
  2. 定期更新yt-dlp以获取最新功能和修复
  3. 下载大文件时建议使用-c参数启用断点续传
  4. 使用--verbose参数可以查看详细的下载信息,有助于排查问题
0

评论区