youtube-dl 使用记录

从他人那了解到的一个新的 youtube 下载工具,可以下载 4K 以上的网站视频内容


1、关于 youtube-dl

Github 项目地址 [ 链接 ]

youtube-dl 是一个命令行程序,适用于从 YouTube.com 等更多网站上下载视频。它需要 Python 环境,版本 2.6,2.7 或 3.2+,并且是多平台支持的。


2、安装 youtube-dl

作者提供了二进制文件,所以直接可以下载并运行

sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl
sudo chmod a+rx /usr/local/bin/youtube-dl

然后我们可以测试 youtube-dl 是否安装成功

[[email protected] youtube-dl]# youtube-dl -v
[debug] System config: []
[debug] User config: []
[debug] Custom config: []
[debug] Command-line args: ['-v']
[debug] Encodings: locale UTF-8, fs utf-8, out UTF-8, pref UTF-8
[debug] youtube-dl version 2019.04.30
[debug] Python version 2.7.5 (CPython) - Linux-5.0.11-1.el7.elrepo.x86_64-x86_64-with-centos-7.6.1810-Core
[debug] exe versions: none
[debug] Proxy map: {}
Usage: youtube-dl [OPTIONS] URL [URL...]

youtube-dl: error: You must provide at least one URL.
Type youtube-dl --help to see a list of all options.

当然你也可以直接通过 Python 的 pip 来安装,这样可以指定程序执行时的 python 环境。

yum install python36 python36-pip
pip3.6 install --upgrade youtube-dl

[[email protected] youtube-dl]# youtube-dl -v
[debug] System config: []
[debug] User config: []
[debug] Custom config: []
[debug] Command-line args: ['-v']
[debug] Encodings: locale UTF-8, fs utf-8, out UTF-8, pref UTF-8
[debug] youtube-dl version 2019.04.30
[debug] Python version 3.6.6 (CPython) - Linux-5.0.11-1.el7.elrepo.x86_64-x86_64-with-centos-7.6.1810-Core
[debug] exe versions: none
[debug] Proxy map: {}
Usage: youtube-dl [OPTIONS] URL [URL...]

youtube-dl: error: You must provide at least one URL.
Type youtube-dl --help to see a list of all options.

如果你需要让 youtube-dl 自动合成下载好的视频,或者想得到更高品质的视频,都需要安装 ffmpeg 环境
(默认情况下,如果没有 ffmpeg 则只会下载同时有视频流和音频流的文件,存在低画质的问题)

rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
yum install ffmpeg ffmpeg-devel -y
ffmpeg -version

当你安装好 ffmpeg 后,重新查看 youtube-dl 的信息

[[email protected] ~]# youtube-dl -v
[debug] System config: []
[debug] User config: []
[debug] Custom config: []
[debug] Command-line args: ['-v']
[debug] Encodings: locale UTF-8, fs utf-8, out UTF-8, pref UTF-8
[debug] youtube-dl version 2019.04.30
[debug] Python version 3.6.6 (CPython) - Linux-5.0.11-1.el7.elrepo.x86_64-x86_64-with-centos-7.6.1810-Core
[debug] exe versions: ffmpeg 2.8.15, ffprobe 2.8.15
[debug] Proxy map: {}
Usage: youtube-dl [OPTIONS] URL [URL...]

youtube-dl: error: You must provide at least one URL.
Type youtube-dl --help to see a list of all options.

3、使用 youtube-dl

通常直接使用命令后面跟随 url 地址的方式即可

youtube-dl [url]

但是你会发现,你在这个状态下下载的视频并不是最清晰的,这时候你可以通过 -F 参数或者是 --list-formats 参数查看服务端支持的所有流
(默认情况下,youtube-dl 会尝试下载最佳可用质量,即如果你想要最好的质量,你不需要传递任何特殊选项,youtube-dl 默认会为你选择一个最好的。)

[[email protected] youtube-dl]# youtube-dl -F https://www.youtube.com/watch?v=PWeH_CcTq_8
[ youtube ] PWeH_CcTq_8: Downloading webpage
[ youtube ] PWeH_CcTq_8: Downloading video info webpage
[ info ] Available formats for PWeH_CcTq_8:
format code  extension  resolution note
249          webm       audio only DASH audio   61k , opus @ 50k, 4.63MiB
250          webm       audio only DASH audio   77k , opus @ 70k, 6.13MiB
140          m4a        audio only DASH audio  128k , m4a_dash container, [email protected], 12.45MiB
251          webm       audio only DASH audio  145k , opus @160k, 12.17MiB
171          webm       audio only DASH audio  174k , [email protected], 12.76MiB
160          mp4        256x110    144p   88k , avc1.4d400b, 24fps, video only, 7.53MiB
278          webm       256x110    144p  119k , webm container, vp9, 24fps, video only, 6.98MiB
133          mp4        426x182    240p  191k , avc1.4d400d, 24fps, video only, 16.14MiB
242          webm       426x182    240p  253k , vp9, 24fps, video only, 15.22MiB
243          webm       640x274    360p  489k , vp9, 24fps, video only, 28.08MiB
134          mp4        640x274    360p  494k , avc1.4d4015, 24fps, video only, 41.07MiB
244          webm       854x366    480p  708k , vp9, 24fps, video only, 50.57MiB
135          mp4        854x366    480p  914k , avc1.4d401e, 24fps, video only, 76.10MiB
247          webm       1280x548   720p 1250k , vp9, 24fps, video only, 100.90MiB
136          mp4        1280x548   720p 1845k , avc1.4d401f, 24fps, video only, 148.01MiB
248          webm       1920x822   1080p 2466k , vp9, 24fps, video only, 178.39MiB
137          mp4        1920x822   1080p 3379k , avc1.640028, 24fps, video only, 268.37MiB
18           mp4        640x274    medium , avc1.42001E, [email protected] 96k, 66.18MiB
43           webm       640x360    medium , vp8.0, [email protected], 83.68MiB
22           mp4        1280x548   hd720 , avc1.64001F, [email protected] (best)

你可以通过手工指定的方式下载对应流,一个完整的视频一般需要 [ 视频流+视频流+音频流+音频流+字幕流+字幕流 ]
(如果中间是逗号则不合并仅分开下载)

youtube-dl -f '137+171' https://www.youtube.com/watch?v=PWeH_CcTq_8

在这里提醒一下

1、如果你没有安装 ffmpeg,则你无参数时下载的是第 22 号格式代码的文件,此文件包含了音频和视频,但并不是分辨率最大的选择。
2、如果你已经安装了 ffmpeg,则你下载的是第 137 号与第 171 号格式代码的文件,然后由 ffmpeg 合并成最终视频并自动删除合并前文件。
3、如果你没有安装 ffmpeg,并且采用手工指定的方式下载,你只会下载到两个文件,不会合并成最终文件。

一般没有参数时等同于下面这样手动指定的方式,

youtube-dl -f 'bestvideo+bestaudio' [url]

以及如果你想手工的限制下载时的最大分辨率,你可以在后面额外添加 [] 并指定信息。
(本例限制视频流最大不得超过 1080P,如果服务器没分视频流和音频流则下载最大 720P 的文件)

youtube-dl -f 'bestvideo[height<=1080]+bestaudio/best[height<=720]' [url]

这里的文字参数一共有六种,分别如下

best:选择具有视频和音频的单个文件所代表的最佳质量格式。
worst:选择具有视频和音频的单个文件所代表的最差质量格式。
bestvideo:选择最佳质量的仅视频格式(例如 DASH 视频)。可能无法使用。
worstvideo:选择质量最差的纯视频格式。可能无法使用。
bestaudio:选择质量最佳的音频格式。可能无法使用。
worstaudio:选择质量最差的音频格式。可能无法使用。

如果你的下载客户端在国内,你可能需要手动指定代理,通常有两种方式指定

youtube-dl --http-proxy HOST:PORT [url]
youtube-dl --socks-proxy HOST:PORT [url]

如果你下载的网站需要登陆才可以访问的资源,你可以添加账号密码参数

youtube-dl -u "yourname" -p "yourpass"  [url]

也可以通过创建 .netrc 文件来储存账号密码,参见 [ 链接 ]

最后,你可以查看 youtube-dl 支持的网站列表

youtube-dl --list-extractors

4、使用 youtube-dl 获取字幕

下载视频并额外下载英文的 vtt 格式的字幕文件

youtubd-dl --write-sub [url]

不下载视频,只下载英文的 vtt 格式的字幕文件

youtube-dl --write-sub --skip-download [url]

下载视频并额外下载所有语言的 vtt 格式的字幕文件

youtube-dl --write-sub --all-subs [url]

如果你想将 VTT 字幕转换为 SRC 字幕,你可以设置字幕保存的格式

youtube-dl  --write-sub --sub-format "ass/srt/best" --convert-subs "srt"' [url]

5、相关链接

youtube-dl 使用小记 [ 链接 ]

点赞