YouTube-DL
YouTube-DL是最受欢迎的命令行YouTube下载应用程序。
这不仅仅是从youtube下载视频,还可以从很多其他下载。
我们可以在此处查看支持的支持的的完整列表。
YouTube-DL可以在一次下载单轨或者整个播放列表。
它是用Python编写的一个免费和开源程序。
它支持GNU/Linux,Mac OS X和Microsoft Windows。
在此详细的YouTube-DL教程中,我们将学习使用大多数常用的命令,其中包含示例以在Linux中从在线下载音频和视频流。
在Linux上安装YouTube-DL
YouTube-DL可以在许多方面安装。
正式推荐的方式
安装YouTube-DL的正式推荐的方法只是下载它,将其保存在路径中,使其可执行并立即开始使用它。
$sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl
如果我们没有curl,请使用wget:
$sudo wget https://yt-dl.org/downloads/latest/youtube-dl -O /usr/local/bin/youtube-dl
$sudo chmod a+rx /usr/local/bin/youtube-dl
使用pip安装YouTube-DL
或者,我们可以使用如下所示的PIP安装它。
$sudo -H pip install --upgrade youtube-dl
使用包管理器安装YouTube-DL
Youtube-DL也可以在一些Linux发行版的官方存储库中提供。
例如,我们可以使用命令在Arch Linux中安装它:
$sudo pacman -S youtube-dl
在Debian,Ubuntu,Linux Mint:
$sudo apt install youtube-dl
关于Fedora:
$sudo dnf install youtube-dl
在Linux上安装ffmpeg
YouTube-DL取决于FFMPEG从YouTube下载720p视频并将视频转换为其他格式。
要在Linux上安装FFMPEG,请参阅以下教程。
- 如何在Linux上安装ffmpeg
更新YouTube-DL
如果我们使用curl或者wget手动安装了youtube-dl,请运行以下命令以更新它:
$sudo youtube-dl -U
如果我们使用pip安装它,请执行以下操作:
$sudo pip install -U youtube-dl
使用分发程序包管理器安装YouTube-DL的人只需使用相应的更新命令。
例如,在ARCH Linux上,我们只需运行以下命令即可更新YouTube-DL:
$sudo pacman -Syu
在Debian,Ubuntu:
$sudo apt update
现在,让我们看到一些示例要学习使用YouTube-DL。
YouTube-DL教程与示例
其中我编译了最常用的YouTube-DL命令,以从YouTube下载视频或者播放列表。
1.下载视频或者播放列表
要从YouTube下载视频或者整个播放列表,只需提及如下所示的URL:
$youtube-dl https://www.youtube.com/watch?v=7E-cwdnsiow
如果我们想使用我们选择的自定义名称下载视频或者播放列表,则该命令将是:
$youtube-dl -o 'abdul kalam inspirational speech' https://www.youtube.com/watch?v=7E-cwdnsiow
用我们自己的名字替换"Abdul Kalam励志语音"。
你想在其他地方保存视频吗?
干得好!
$youtube-dl -o '~/Downloads/abdul kalam speech' https://www.youtube.com/watch?v=7E-cwdnsiow
其中我正在将视频下载到下载目录。
[youtube] 7E-cwdnsiow: Downloading webpage [download] Destination: /home/sk/Downloads/abdul kalam speech.f271 [download] 100% of 111.86MiB in 01:00 [download] Destination: /home/sk/Downloads/abdul kalam speech.f251 [download] 100% of 6.12MiB in 00:03 [ffmpeg] Merging formats into "/home/sk/Downloads/abdul kalam speech.webm" Deleting original file /home/sk/Downloads/abdul kalam speech.f271 (pass -k to keep) Deleting original file /home/sk/Downloads/abdul kalam speech.f251 (pass -k to keep)
我们还可以使用以下命令包含在文件名中包含其他详细信息,例如标题,上传者名称(通道名称)和上传日期等:
$youtube-dl -o '%(title)s by %(uploader)s on %(upload_date)s in %(playlist)s.%(ext)s' https://www.youtube.com/watch?v=7E-cwdnsiow
2.下载多个视频
有时,我们可能希望从任何其他下载多个视频。
如果是这样,只需提及空间分隔的视频的URL,如下所示:
$youtube-dl <url1> <url2>
或者,我们可以将它们全部放入文本文件中,并将其传递给YouTube-DL作为如下的参数。
$youtube-dl -a url.txt
此命令将下载URL.txt文件中提到的所有视频。
3.从视频下载音频
YouTube-DL允许我们从YouTube视频下载音频。
如果我们曾经只是下载音频的情况,则运行:
$youtube-dl -x https://www.youtube.com/watch?v=7E-cwdnsiow
默认情况下,YouTube-DL将以OGG(OPUS)格式保存音频。
如果我们愿意下载任何其他格式,例如MP3,请运行:
$youtube-dl -x --audio-format mp3 https://www.youtube.com/watch?v=7E-cwdnsiow
此命令将从给定的视频/播放列表下载音频,将其转换为MP3并将其保存在当前目录中。
请注意,我们应该安装FFMPEG或者AVCONV以将文件转换为MP3格式。
4.使用描述,元数据,注释,字幕和缩略图下载视频
要下载视频以及其它详细信息,例如描述,元数据,注释,字幕和缩略图等,请使用以下命令:
$youtube-dl --write-description --write-info-json --write-annotations --write-sub --write-thumbnail https://www.youtube.com/watch?v=7E-cwdnsiow
建议阅读:
- 使用YouTube-DL下载带有字幕的YouTube视频
5.列出视频或者播放列表的所有可用格式
要列出视频或者播放列表中可用的所有可用格式,请使用以下命令:
$youtube-dl --list-formats https://www.youtube.com/watch?v=7E-cwdnsiow
或者
$youtube-dl -F https://www.youtube.com/watch?v=7E-cwdnsiow
示例输出:
我们可以在上面的 Screen截图中看到,YouTube-DL列出给定视频的所有可用格式。
从左到右,它显示相应视频的视频格式代码,扩展和分辨率。
当我们想以特定质量或者格式下载视频时,这可能会有所帮助。
6.显示YouTube视频的大小
检索视频的文件大小,请使用-f标志。
$youtube-dl -F https://www.youtube.com/watch?v=7E-cwdnsiow
我们将看到每个文件末尾的文件大小。
示例输出:
[youtube] 7E-cwdnsiow: Downloading webpage [info] Available formats for 7E-cwdnsiow: format code extension resolution note 249 webm audio only tiny 51k , opus @ 50k (48000Hz), 2.56MiB 250 webm audio only tiny 68k , opus @ 70k (48000Hz), 3.23MiB 140 m4a audio only tiny 128k , m4a_dash container, Hyman@theitroad (44100Hz), 7.59MiB 251 webm audio only tiny 137k , opus @160k (48000Hz), 6.12MiB 160 mp4 192x144 144p 52k , avc1.4d400c, 30fps, video only, 1.71MiB 278 webm 192x144 144p 73k , webm container, vp9, 30fps, video only, 3.73MiB 133 mp4 320x240 240p 89k , avc1.4d400d, 30fps, video only, 3.12MiB 242 webm 320x240 240p 135k , vp9, 30fps, video only, 6.06MiB 134 mp4 480x360 360p 215k , avc1.4d401e, 30fps, video only, 7.53MiB 243 webm 480x360 360p 242k , vp9, 30fps, video only, 10.39MiB 135 mp4 640x480 480p 382k , avc1.4d401e, 30fps, video only, 14.13MiB 244 webm 640x480 480p 390k , vp9, 30fps, video only, 16.44MiB 136 mp4 960x720 720p 737k , avc1.4d401f, 30fps, video only, 26.99MiB 247 webm 960x720 720p 770k , vp9, 30fps, video only, 31.12MiB 137 mp4 1440x1080 1080p 1391k , avc1.640028, 30fps, video only, 46.50MiB 248 webm 1440x1080 1080p 1421k , vp9, 30fps, video only, 52.19MiB 271 webm 1920x1440 1440p 3462k , vp9, 30fps, video only, 111.86MiB 18 mp4 480x360 360p 360k , avc1.42001E, Hyman@theitroad 96k (44100Hz), 21.55MiB 22 mp4 960x720 720p 578k , avc1.64001F, Hyman@theitroad (44100Hz) (best)
7.以某种质量和/或者格式下载视频
默认情况下,Youtube-DL将下载最佳的质量视频。
但是,还可以以特定的质量或者格式下载视频或者播放列表。
YouTube能够以下列品质下载视频:
- 最佳 - 使用视频和音频选择给定文件的最佳质量格式。
- 最坏的 - 选择最糟糕的质量格式(视频和音频)。
- BestVideo - 选择最优质的视频格式(例如,Dash视频)。请注意,可能无法使用。
- WorstVideo - 选择最糟糕的纯视频格式。可能无法使用。
- BestAudio - 选择最优质的音频才能格式。可能无法使用。
- WorstAudio - 选择最糟糕的音频才能格式。可能无法使用。
例如,如果要下载最佳质量格式(音频和视频),只需使用以下命令:
$youtube-dl -f best https://www.youtube.com/watch?v=7E-cwdnsiow
同样,以最佳质量下载音频:
$youtube-dl -f bestaudio https://www.youtube.com/watch?v=7E-cwdnsiow
要下载最糟糕的纯视频视频格式,请使用以下命令:
$youtube-dl -f worstvideo https://www.youtube.com/watch?v=7E-cwdnsiow
我们还可以将不同的格式选项组合如下。
$youtube-dl -f bestvideo+bestaudio https://www.youtube.com/watch?v=7E-cwdnsiow
上面的命令将下载最优质的视频和最优质的音频格式,并将它们与ffmpeg或者avconv一起合并。
确保我们已在系统上安装了这些工具中的任何一个。
如果我们不想合并,更换+(加上)运算符,如下所示(逗号):
$youtube-dl -f 'bestvideo,bestaudio' https://www.youtube.com/watch?v=7E-cwdnsiow -o '%(title)s.f%(format_id)s.%(ext)s'
此命令将下载最优质的视频和最优质的音频,不会混合它们。
在这种情况下,我们将获得两个文件,一个是音频,另一个是视频。
在此示例中,建议使用输出模板(-O选项)作为BestVideo,BestAudio可能具有相同的文件名。
我们甚至可以以特定的分辨率以特定质量下载视频或者播放列表。
例如,以下命令将以480像素分辨率(小于或者等于480p)下载最佳质量视频。
$youtube-dl -f "best[height<=480]" https://www.youtube.com/watch?v=7E-cwdnsiow
就像已经说过,我们可以将格式选择器分组以获得特定的质量视频。
以下命令将下载可用的最佳格式(音频和视频),但不优于480p。
$youtube-dl -f 'bestvideo[height<=480]+bestaudio/best[height<=480]' https://www.youtube.com/watch?v=7E-cwdnsiow
8.使用格式代码下载视频
所有视频都有格式代码,我们可以用来以特定质量下载视频。
要查找格式代码,只需使用以下任何一个命令列出可用格式:
$youtube-dl --list-formats https://www.youtube.com/watch?v=7E-cwdnsiow
或者
$youtube-dl -F https://www.youtube.com/watch?v=7E-cwdnsiow
正如我们在上面的 Screen截图中看到的,所以在第一列中列出了给定视频的所有格式代码。
最后给出了最佳质量格式(格式代码为22)。
因此,下载最佳质量格式的命令是:
$youtube-dl -f 22 https://www.youtube.com/watch?v=7E-cwdnsiow
在我们从播放列表下载视频时,某些视频可能无法使用相同的格式。
在这种情况下,我们可以在我们选择的任何首选顺序中指定多种格式代码。
看看以下示例:
$youtube-dl -f 22/17/18 <playlist_url>
根据上图,如果可用,则YouTube-DL将以格式22下载视频。
如果格式22不可用,则如果可用,则将下载格式17.
如果22和17格式不可用,它将最终尝试下载格式18.如果没有任何指定的格式可用,则youtube-dl将申诉,没有可用的格式可供下载。
请注意,斜杠是左联想,例如:左侧的格式是首选。
9.按文件扩展名下载视频
以优选的格式下载视频,例如MP4,刚刚运行:
$youtube-dl --format mp4 https://www.youtube.com/watch?v=7E-cwdnsiow
或者,
$youtube-dl -f mp4 https://www.youtube.com/watch?v=7E-cwdnsiow
就像我在上一节中已经提到的那样,某些视频可能无法以优选的格式使用。
在这种情况下,youtube-dl将下载任何其他最佳可用格式。
例如,此命令将下载最佳质量MP4格式文件。
如果不可用MP4格式,则它将下载任何其他最佳可用格式。
$ youtube-dl -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best' https://www.youtube.com/watch?v=7E-cwdnsiow
如果要使用自定义文件名下载它们,请执行以下操作:
$youtube-dl -f mp4 -o '%(title)s.f%(format_id)s.%(ext)s' https://www.youtube.com/watch?v=7E-cwdnsiow
10.为视频设置大小限制
从播放列表下载多个视频时,我们可能只想在特定尺寸内下载视频。
例如,此命令不会下载小于给定大小的视频,例如100MB:
$youtube-dl --min-filesize 100M <playlist_url>
如果我们不想下载大于给定大小的视频,请执行以下操作:
$youtube-dl --max-filesize 100M <playlist_url>
我们还可以组合格式选择运算符来下载某些尺寸的视频。
以下命令将下载最佳视频唯一格式,但不大于100 MB。
$youtube-dl -f 'best[filesize<100M]' https://www.youtube.com/watch?v=7E-cwdnsiow
11.按日期下载视频
YouTube-DL允许我们通过上传日期过滤和下载视频或者播放列表。
当我们想从包含100多个视频的播放列表下载视频时,这将是非常有帮助的。
例如,要在确切日期下载上传的视频,例如2016年10月1日,该命令将是:
$youtube-dl --date 20161001 <URL>
下载特定日期或者之前上传的视频:
$youtube-dl --datebefore 20160101 <URL>
下载特定日期或者之后上传的视频:
$youtube-dl --dateafter 20160101 <URL>
仅在过去6个月内下载上传的视频:
$youtube-dl --dateafter now-6months <URL>
要在特定日期之间下载视频,例如2016年1月1日至2019年1月1日至2019年1月1日,请使用以下命令:
$youtube-dl --dateafter 20160101 --datebefore 20190101 <URL>
12.从播放列表下载特定的视频
这是YouTube-DL的另一个有用功能。
它允许我们从包含100次歌曲的播放列表下载特定歌曲。
例如,要从播放列表下载第10个文件,请运行:
$youtube-dl --playlist-items 10 <playlist_url>
同样,要下载多个随机文件,只需指定播放列表中的视频的索引,如下所示::
$youtube-dl --playlist-items 2,3,7,10 <playlist_url>
我们还可以指定歌曲范围。
要从某个视频开始下载视频播放列表,请参考10,结束:
$youtube-dl --playlist-start 10 <playlist_url>
仅从播放列表中从2nd到5的文件下载,使用:
$youtube-dl --playlist-start 2 --playlist-end 5 <playlist_url>
13.仅下载适合特定年龄的视频
这是YouTube-DL的另一个值得注意的功能。
它允许我们仅下载适合于给定年龄的视频。
例如,要从播放列表下载未标记为"NSFW"或者Age-Inds的历史限制的所有"让我们的播放"视频,运行:
$youtube-dl --match-title "let's play" --age-limit 7 --reject-title "nsfw" <playlist_url>
14.设置下载速度限制
我们可以使用-r选项来限制速度。
例如,以下命令将速度限制为50k。
$youtube-dl -r 50K <URL>
请注意,速度以每秒字节为单位。
15.恢复下载
默认情况下,youtube-dl将自动恢复下载我们将其关闭的位置。
如果没有任何原因恢复下载,只需强制使用-c( - continue)标志的部分下载文件的简历:
$youtube-dl -c <URL>
得到帮助
Youtube-DL有更多的选择。
我猜这14个例子足以使用YouTube-DL从在线下载视频。
有关更多详细信息,请参阅YouTube-DL帮助部分。
$youtube-dl --help
YouTube-DL故障排除
以下是我们可能不时遇到的一些常见错误。
大多数错误将在将YouTube-DL更新到最新版本后修复自己。
但是,即使我们有更新的YouTube-DL版本,下面也不会获得一些错误。
1.修复"无法下载视频数据:HTTP错误403:禁止"错误
从YouTube下载视频时,有时我们将收到如下错误。
ERROR: unable to download video data: HTTP Error 403: Forbidden
要修复此错误,请参阅以下教程。
- 如何修复"无法下载视频数据:HTTP错误403:禁止"错误
2.警告:请求的格式不兼容,并将合并为MKV。
这是另一个常见错误。
下载视频时,我们将收到如下所示:
[youtube] _XEgknKEBws: Downloading webpage WARNING: Requested formats are incompatible for merge and will be merged into mkv. ERROR: unable to open for writing: [Errno 36] File name too long: '\xe0\xae\xa8\xe0\xaf\x8b\xe0\xae\xaf\xe0\xaf\x8d \xe0\xae\x8e\xe0\xae\xa4\xe0\xae\xbf\xe0\xae\xb0\xe0\xaf\x8d\xe0\xae\xaa\xe0\xaf\x8d\xe0\xae\xaa\xe0\xaf\x81 \xe0\xae\x9a\xe0\xae\x95\xe0\xaf\x8d\xe0\xae\xa4\xe0\xae\xbf\xe0\xae\xaf\xe0\xaf\x88 \xe0\xae\x85\xe0\xae\xa4\xe0\xae\xbf\xe0\xae\x95\xe0\xae\xb0\xe0\xae\xbf\xe0\xae\x95\xe0\xaf\x8d\xe0\xae\x95\xe0\xaf\x81\xe0\xae\xae\xe0\xaf\x8d \xe0\xae\x87\xe0\xae\xaf\xe0\xae\xb1\xe0\xaf\x8d\xe0\xae\x95\xe0\xaf\x88 \xe0\xae\xaa\xe0\xae\xbe\xe0\xae\xa9\xe0\xae\x95\xe0\xae\xae\xe0\xaf\x8d - \xe0\xae\xa8\xe0\xae\xbe\xe0\xae\xae\xe0\xaf\x87 \xe0\xae\xa4\xe0\xae\xaf\xe0\xae\xbe\xe0\xae\xb0\xe0\xae\xbf\xe0\xae\xaa\xe0\xaf\x8d\xe0\xae\xaa\xe0\xae\xa4\xe0\xaf\x81 \xe0\xae\x8e\xe0\xae\xaa\xe0\xaf\x8d\xe0\xae\xaa\xe0\xae\x9f\xe0\xae\xbf- \xe0\xae\xae\xe0\xae\xb0\xe0\xaf\x81\xe0\xae\xa4\xe0\xaf\x8d\xe0\xae\xa4\xe0\xaf\x81\xe0\xae\xb5\xe0\xae\xb0\xe0\xaf\x8d \xe0\xae\xa4\xe0\xaf\x80\xe0\xae\xaa\xe0\xae\xbe \xe0\xae\xb5\xe0\xae\xbf\xe0\xae\xb3\xe0\xae\x95\xe0\xaf\x8d\xe0\xae\x95\xe0\xae\xae\xe0\xaf\x8d-_XEgknKEBws.f136.mp4.part'
这实际上不是问题,而是youtube-dl的预期行为。
默认情况下,YouTube-DL将下载最高质量的音频和最高质量的视频流,然后将它们连接到像MKV,MP4等的兼容容器中,如果这些音频和视频流不适用于MP4容器,YouTube不适合然后,-DL将在MKV容器中包装它们并显示上述警告消息。
在这种情况下,我们可以忽略MKV警告并下载最佳质量视频和最佳质量音频,而是仅在MP4容器中明确提及如下所需的最佳质量音频和视频格式:
$youtube-dl -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]' https://youtu.be/_XEgknKEBws
3.错误:无法打开写作:[errno 36]文件名太长
当我们尝试下载具有长名称的YouTube视频时,我们可能会收到此错误:
[youtube] _XEgknKEBws: Downloading webpage ERROR: unable to open for writing: [Errno 36] File name too long: '\xe0\xae\xa8\xe0\xaf\x8b\xe0\xae\xaf\xe0\xaf\x8d \xe0\xae\x8e\xe0\xae\xa4\xe0\xae\xbf\xe0\xae\xb0\xe0\xaf\x8d\xe0\xae\xaa\xe0\xaf\x8d\xe0\xae\xaa\xe0\xaf\x81 \xe0\xae\x9a\xe0\xae\x95\xe0\xaf\x8d\xe0\xae\xa4\xe0\xae\xbf\xe0\xae\xaf\xe0\xaf\x88 \xe0\xae\x85\xe0\xae\xa4\xe0\xae\xbf\xe0\xae\x95\xe0\xae\xb0\xe0\xae\xbf\xe0\xae\x95\xe0\xaf\x8d\xe0\xae\x95\xe0\xaf\x81\xe0\xae\xae\xe0\xaf\x8d \xe0\xae\x87\xe0\xae\xaf\xe0\xae\xb1\xe0\xaf\x8d\xe0\xae\x95\xe0\xaf\x88 \xe0\xae\xaa\xe0\xae\xbe\xe0\xae\xa9\xe0\xae\x95\xe0\xae\xae\xe0\xaf\x8d - \xe0\xae\xa8\xe0\xae\xbe\xe0\xae\xae\xe0\xaf\x87 \xe0\xae\xa4\xe0\xae\xaf\xe0\xae\xbe\xe0\xae\xb0\xe0\xae\xbf\xe0\xae\xaa\xe0\xaf\x8d\xe0\xae\xaa\xe0\xae\xa4\xe0\xaf\x81 \xe0\xae\x8e\xe0\xae\xaa\xe0\xaf\x8d\xe0\xae\xaa\xe0\xae\x9f\xe0\xae\xbf- \xe0\xae\xae\xe0\xae\xb0\xe0\xaf\x81\xe0\xae\xa4\xe0\xaf\x8d\xe0\xae\xa4\xe0\xaf\x81\xe0\xae\xb5\xe0\xae\xb0\xe0\xaf\x8d \xe0\xae\xa4\xe0\xaf\x80\xe0\xae\xaa\xe0\xae\xbe \xe0\xae\xb5\xe0\xae\xbf\xe0\xae\xb3\xe0\xae\x95\xe0\xaf\x8d\xe0\xae\x95\xe0\xae\xae\xe0\xaf\x8d-_XEgknKEBws.f136.mp4.part
要修复此错误,只需使用以下内容下载更短的姓名"-o"标志,只需将选择更短:
$youtube-dl -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]' -o video.mp4 https://youtu.be/_XEgknKEBws
由于DMCA Takedown通知,YouTube-DL GitHub存储库已被RIAA通知。
但是,下载仍然像往常一样运用。
许多开发人员已经克隆了YouTube-DL存储库。
其中一个备份是在Gitlab托管的。