Youtube-DL 是一款由 Python 编写的在线视频解析、下载、转换与合并工具,看其名字就知道,其主要目的就是为了下载油管视频而设计和编写的。经过多年发展,目前Youtube-DL不仅仅能下载油管上的视频,还能下载众多在线视频网站上的视频内容(包括大部分知名的大陆视频网站)。

然而最新一版的Youtube-DL停留在了 2021.12.17 版本,这对日新月异的互联网内容站点来说更新也太过缓慢了。
好在Youtube-DL是免费的开源软件,有许多优秀的Fork版Youtube-DL可供选择,而目前最强、最新的Youtube-DL分支就是YT-DLP了!

YT-DLP并非是Youtube-DL的直接Fork,而是由YT-DLC演化而来,所以它经历了两次的Fork与进化,其支持的站点也比Youtube-DL要多得多,还添加了许多新的功能,解析方式也比Youtube-DL要更优秀。

点此查阅YT-DLP支持的站点 - https://github.com/yt-dlp/yt-dlp/blob/master/supportedsites.md

不过万变不离其宗,我下面演示的代码与使用教程,大部分也适应于Youtube-DL,不过我仍强烈推荐您使用最新版的YT-DLP,以防部分站点无法解析、或者部分操作命令与原版不同。

目录 - Table of Contents


环境准备

Youtube-DL与YT-DLP是由Python所编写,非Windows系统用户请自行安装Python的运行环境,而Windows用户则可以直接下载官方所提供的内置Python运行时的单文件执行程序。


YT-DLP是控制台程序,所有的操作都需要你使用命令行参数、或者编写批处理脚本来执行操作,我下方大部分的演示代码都是基于批处理脚本所提供。

YT-DLP需要配合FFMPEG来对下载的视频、音频文件进行融合或者转码,因此你还需要下载FFMPEG,将其执行程序放到YT-DLP相同目录下即可。

FFMPEG gyan编译版 - https://www.gyan.dev/ffmpeg/builds/点此直接下载
下载最新的ffmpeg-git-essentials.7z,解压\bin\ffmpeg.exe\bin\ffprobe.exe到YT-DLP的主目录下即可。
(非Windows系统请至官方下载 - https://www.ffmpeg.org/download.html

最快速下载YT视频的代码

复制下面的代码,将其保存到 快速下载视频.bat 批处理文件中,并放到YT-DLP主目录下,注意文件的文本编码必须是ANSI
@echo off
echo 请输入URL
set /p URL=

yt-dlp -f "best" %URL%
如果你身处墙外,这个批处理脚本已经可以直接帮助你下载油管上的视频了,你只需把视频的URL地址复制到控制台内,然后回车即可。

-f "best"是YT-DLP的默认参数,表示让YT-DLP自行解析并下载最佳的音画同步存储的媒体内容,一般情况下只会下载720P的MP4文件。这是因为油管是将音频和高画质视频分开存放的(一般是WebM格式视频),只有不支持WebM的浏览器,油管才会推送MP4的视频。

如果你想下载最高质量的视频和音频,就需要配合FFMPEG来融合音频和视频内容了,上面的代码也需要改成这样:
@echo off
echo 请输入URL
set /p URL=

yt-dlp -f "bestvideo+bestaudio" %URL%
-f "bestvideo+bestaudio"表示让YT-DLP解析并下载最高质量的视频和音频,并执行融合操作。
如果你不想让YT-DLP自动融合视频和音频,可以改成-f "bestvideo,bestaudio",这样YT-DLP就只会同时下载最高质量的视频与音频文件,而不会执行融合操作,之后你可以自行处理音频与视频文件!

如何使用代理

墙内的人如果不使用魔法上网,根本没法下载油管视频,而YT-DLP使用代理也非常简单:
rem socks5模式,甚至可以使用user+pass登录
yt-dlp --proxy socks5://127.0.0.1:1080 %URL%
yt-dlp --proxy socks5://user:pass@127.0.0.1:1080 %URL%

rem http模式
yt-dlp --proxy http://127.0.0.1:1080 %URL%
yt-dlp --proxy http://user:pass@127.0.0.1:1080 %URL%

下面开始实战与详细参数教程

-f 下载指定格式

-f是YT-DLP中最关键的参数,其默认为-f "best",大部分情况下YT-DLP会自动选择画质最高且带有音频的文件(油管上就是720P的MP4文件)。

而你可以通过添加描述符或者匹配参数,来让YT-DLP更智能地下载媒体文件。
通用描述符说明
best默认,下载带音频的视频
worst下载画质最低的视频
bestvideo只下载画质最高的视频,可能不包含音频
worstvideo只下载画质最低的视频
bestaudio只下载音质最高的音频,如果不包含单独的音频,会从视频中提取音频
worstaudio只下载音质最低的音频
如果你使用大写的 -F 来执行操作,YT-DLP只会对目标地址进行分析,并返回给你一组提示数据,其中包含一个格式ID、媒体格式、资源描述(音频、分辨率、比特率、编码、文件大小等)。
之后,你就可以通过这个格式ID,来指定下载的媒体资源。
rem 获取目标的所有媒体源信息
yt-dlp -F %URL%
比如我通过解析后得知,某个视频的最高画质MP4视频的格式ID为229、最高音质WebM格式ID为251,我想要组合这两个文件,就可以使用下面的代码:
rem 下载并自动融合视频和音频
yt-dlp -f "229+251" %URL%
若是我想在本地自己比对视频的质量,比如同时还有一个WebM的视频格式ID为303,我还可以直接同时将它们全部给下载下来,并且不执行自动融合:
rem 下载指定的视频与音频,但不融合它们
yt-dlp -f "229,303,251" %URL%
这样,我就会同时下载webm视频、mp4视频、还有一个由webm包装的纯音频文件。

下载指定分辨率的视频

使用YT-DLP下载指定分辨率的视频非常简单!
比如某个视频拥有4K或8K的分辨率,但我们只想下个1080P以下的MP4版本,可以通过下面的代码来下载高度最大为1080P、同时为MP4格式的视频:
rem 下载高度等于或低于1080P的MP4格式视频,并自动融合最高品质的音频
yt-dlp -f "bestvideo[height<=1080][ext=mp4]+bestaudio" %URL%
如果视频不包含指定的分辨率,YT-DLP会尝试搜寻1080P以下的视频、或者直接报错,你就需要重新调整参数了。

你可以使用 =(等于) !=(不等于) <(小于) <=(小于等于) >(大于) >=(大于等于) 这些对比符号,用以对比这些关键词:height(高) width(宽) aspect_ratio(横纵比) tbr(总码率) abr(音频码率) vbr(视频码率) asr(音频赫兹) fps(帧率) 等等……

你可以使用 =(完全等于) ~=(起始等于) $=(结束等于) *=(任意位置等于) ~=(正则匹配) 这些文本匹配符号,用以匹配这些关键词: ext(文件格式) url(链接地址) acodec(音频编码) vcodec(视频编码) container(容器格式) protocol(网络协议) resolution(分辨率) 等等……

-o 输出路径

如果你不指定-o参数,则YT-DLP会默认将视频下载到当前目录,并以 视频标题-视频ID.扩展名 的格式来保存文件。
如果你需要自定义输出文件夹以及文件格式,就可以通过 -o 这个参数来搞定了。

YT-DLP使用关键词来替换输出格式中的参数,其格式为 %(关键词)s,而当你要将它用到批处理文件中时,因为%具有转义的功能,所以你需要使用%%来代表单个%符号,所以在批处理文件中你要写成%%(关键词)s这样!
rem 将下载的视频自动存放到 video\作者\ID - 视频标题.格式 中
yt-dlp -f "bestvideo+bestaudio" %URL% -o "video/%%(uploader)s/%%(id)s - %%(title)s.%%(ext)s"
此示例会将视频自动下载到 \video\作者\视频id - 视频标题.扩展名 这个路径中。

下面介绍一些常用的关键词(注意区分大小写)
关键词说明
id视频ID
title视频标题
url视频地址
ext扩展名
uploader作者
upload_date上传日期
channel频道名,一般和作者相同
channel_id频道ID
duration视频时长(秒)
format视频格式ID+描述信息
format_id格式ID
format_note描述信息
width
height
resolution宽x高
abr音频平均码率
acodec音频编码器
vbr视频平均码率
vcodec视频编码器
fps帧数
container媒体容器(MP4、WebM、FLV)
filesize文件大小

下载字幕

部分视频带有字幕功能,而YT-DLP可以帮你下载、转化、甚至内嵌字幕到视频当中!

使用参数 --list-subs 可以查询视频的所有字幕信息:
yt-dlp --list-subs %URL% 
如果视频包含字幕,Available subtitles for xxx 后面就是可以使用的字幕信息以及格式。

想要下载字幕文件到硬盘上,必须使用参数--write-sub
如果你只想下载指定语言的字幕,可以使用--sub-lang xxx来下载;如果你想下载全部字幕,则可以使用--all-subs来下载。
rem 只下载指定语言的字幕,注意区分大小写
yt-dlp --write-sub --sub-lang zh-Hant %URL% 

rem 下载全部字幕文件
yt-dlp --write-sub --all-subs %URL% 
如果你想将字幕内嵌到视频中,则可以使用--embed-sub参数:
rem 将指定字幕内嵌到视频中
yt-dlp --embed-sub --sub-lang zh-Hant %URL% 

rem 将全部字幕内嵌到视频中
yt-dlp --embed-sub --all-subs %URL% 
注意:使用字幕内嵌功能,需要利用FFMPEG的融合功能,同时有可能会将视频的容器变更为支持字幕功能的mkv或是mp4格式。

PS:油管视频支持语音识别功能,会将语音识别转化为自动字幕。一般情况下这个字幕的质量很差,我们不会想要下载。如果你想要下载自动字幕的话,只需要将--write-auto-sub参数添加进去即可。

如何只下载字幕不下载视频?

如果你只想扒下某个视频的字幕而非整个视频的话,可以使用--skip-download参数来跳过下载。
rem 只下字幕文件,跳过视频内容
yt-dlp --write-sub --all-subs --skip-download %URL% 

如何将VTT字幕转化为SRT、ASS?

如果视频里有你需要的字幕格式,你可以尝试使用--sub-format 字幕格式来直接下载该字幕,若是没有的话就会尝试下载默认格式。

你还可以尝试使用--convert-subs来执行字幕格式的自动转换。
rem 将下载的字幕转化为SRT格式,你也可以设置为ASS或其他格式
yt-dlp --write-sub --all-subs --skip-download --convert-subs srt %URL% 

rem 如果你想保留VTT格式的字幕,还可以使用 -k 来保留临时文件
yt-dlp --write-sub --all-subs --skip-download --convert-subs srt -k %URL% 
注意:如果你使用的是Youtube-DL,若是跳过视频下载,则convert-subs功能不会被执行。好在YT-DLP修复了这个BUG,可以放心使用。

如何只下载音频、并将其转化为MP3格式?

yt-dlp -f "bestaudio" -x --audio-format mp3 %URL% 
-x参数强制忽略视频,--audio-format在下载完成后会自动调用FFMPEG将音频文件转化为MP3格式。

你还可以使用--audio-quality参数来设置音频的转化质量,默认为5,0为最佳、10为最差。

如何下载视频封面?

yt-dlp --write-thumbnail %URL% 
--write-thumbnail会自动下载最佳封面图,而--write-all-thumbnails还可以下载所有封面图。

如何将封面嵌入音频文件中?

yt-dlp -f "bestaudio" -x --audio-format mp3 --embed-thumbnail --add-metadata %URL%
--embed-thumbnail会自动在转换音频格式后,将原本视频的封面图嵌入到MP3当中。
--add-metadata会将原视频内的部分资讯内容嵌入到MP3当中。

如何登录特定站点,下载会员独享内容?

某些视频需要用户登录后才能浏览,而YT-DLP也支持部分网站的登录下载功能。
rem 账密登录后下载
yt-dlp -u "USERNAME" -p "PASSWORD" -f "best" %URL% 
如果你不使用-p参数,则在启动批处理后,会让你动态输入密码来登录,这样也会更安全一点。


若是yt-dlp不支持登录你想要下载视频的站点,你还可以使用cookie文件来动态登录视频网站。

首先,你需要使用Chrome或Firefox登录该站点,然后使用下面的扩展工具来导出cookie文件:


将导出的数据保存到一个文本文件中,然后使用下面的代码来动态加载该Cookie:
rem 使用cookie登录并下载视频
yt-dlp --cookies "你的cookie文件.txt" -f "best" %URL% 
你可以将常用网站的Cookie都存放到该文件中,YT-DLP会动态调整和调用这些数据。

完整示例

保存到文件中时,记得文本编码要设置为ANSI!!!
其中的代理地址请修改为你自己的魔法工具地址和端口,不需要可以删除。
关注本页,可以随时更新教程与代码,或者向作者提问。

下载视频.bat

@echo off
echo 使用代理下载视频,质量Best+Best,请输入URL
set /p URL=

yt-dlp --proxy socks5://127.0.0.1:1080 --cookies cookie.txt -f "bestvideo+bestaudio" %URL% -o "video/%%(uploader)s/%%(id)s - %%(title)s.%%(ext)s" --write-thumbnail

rundll32.exe cmdext.dll,MessageBeepStub
echo 下载完成,感谢使用,欢迎访问clso.fun!
pause

下载音频.bat

@echo off
echo 使用代理下载音频,质量Best,请输入URL
set /p URL=

yt-dlp --proxy socks5://127.0.0.1:1080 --cookies cookie.txt -f "bestaudio" -x %URL% -o "audio/%%(uploader)s/%%(id)s - %%(title)s.%%(ext)s" --write-thumbnail

rundll32.exe cmdext.dll,MessageBeepStub
echo 下载完成,感谢使用,欢迎访问clso.fun!
pause

下载字幕.bat

@echo off
echo 使用代理下载所有字幕,请输入URL
set /p URL=

yt-dlp --proxy socks5://127.0.0.1:1080 --cookies cookie.txt --write-sub --all-subs --convert-subs srt -k --skip-download %URL% -o "subs/%%(uploader)s/%%(id)s - %%(title)s.%%(ext)s"

rundll32.exe cmdext.dll,MessageBeepStub
echo 下载完成,感谢使用,欢迎访问clso.fun!
pause

总结

YT-DLP 虽然没有图形接口,不过用法倒是挺简单的,而且除了油管外,还支持众多其他的视频站点。
我自己就测试过B站视频,下载与转化的速度都非常快,是不可多得的良心软件!