YouTube-DL

时间:2020-03-21 11:48:48  来源:igfitidea点击:

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托管的。