Ubuntu 16.04 使用 youtube-dl + FFmpeg 下载 Youtube 1080p 视频

警告
本文最后更新于 2017-07-03,文中内容可能已过时。

今天在 Youtube 上下载了一个 1080p 的视频,点开后发现没有声音,看看目录里面还有个音频,才发现 Youtube 1080p 的视频和音频是分开的,720p 倒是合在一起的没问题。既然是分开的还需要自己合成起来,用的是 FFmpeg,每次下载 1080p 都要自己合成一次太麻烦了。要是能下载时候自动合成就好了。还有,我一般都是挂着 ss 下载,但总感觉这样比较慢,在 VPS 上安装,视频下载完成拖回本地,应该会好一点。这里用的是下载神器 youtube-dl 和 FFmpeg 配合。

操作系统是 Ubuntu 16.04.2 LTS,安装 FFmpeg 很简单:

1
2
3
add-apt-repository ppa:djcj/hybrid
apt-get update
apt-get install ffmpeg

详见官网:https://rg3.github.io/youtube-dl/download.html

我用的是 wget :

1
2
wget https://yt-dl.org/downloads/latest/youtube-dl -O /usr/local/bin/youtube-d
chmod a+rx /usr/local/bin/youtube-dl

youtube-dl -h 查看帮助,这货参数太多了,没仔细看,基本用法:

1
youtube-dl https://www.youtube.com/watch?v=IW_kWtI9EUg

上面就会下载默认格式,如果需要下载指定格式,可以先:

1
youtube-dl -F https://www.youtube.com/watch?v=IW_kWtI9EUg

返回:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[youtube] IW_kWtI9EUg: Downloading webpage
[youtube] IW_kWtI9EUg: Downloading video info webpage
[youtube] IW_kWtI9EUg: Extracting video information
[youtube] IW_kWtI9EUg: Downloading MPD manifest
[info] Available formats for IW_kWtI9EUg:
format code  extension  resolution note
139          m4a        audio only DASH audio   48k , m4a_dash container, mp4a.40.5@ 48k (22050Hz)
249          webm       audio only DASH audio   55k , opus @ 50k, 1.14MiB
250          webm       audio only DASH audio   72k , opus @ 70k, 1.51MiB
140          m4a        audio only DASH audio  128k , m4a_dash container, mp4a.40.2@128k (44100Hz)
251          webm       audio only DASH audio  140k , opus @160k, 2.99MiB
171          webm       audio only DASH audio  142k , vorbis@128k, 3.09MiB
160          mp4        256x144    DASH video  113k , avc1.4d400c, 30fps, video only
278          webm       256x144    144p  121k , webm container, vp9, 30fps, video only, 2.30MiB
133          mp4        426x240    DASH video  266k , avc1.4d4015, 30fps, video only
242          webm       426x240    240p  282k , vp9, 30fps, video only, 5.47MiB
243          webm       640x360    360p  505k , vp9, 30fps, video only, 10.12MiB
134          mp4        640x360    DASH video  644k , avc1.4d401e, 30fps, video only
244          webm       854x480    480p  896k , vp9, 30fps, video only, 18.53MiB
135          mp4        854x480    DASH video 1176k , avc1.4d401f, 30fps, video only
247          webm       1280x720   720p 1748k , vp9, 30fps, video only, 36.29MiB
136          mp4        1280x720   DASH video 2329k , avc1.4d401f, 30fps, video only
248          webm       1920x1080  1080p 3146k , vp9, 30fps, video only, 63.64MiB
137          mp4        1920x1080  DASH video 4143k , avc1.640028, 30fps, video only
17           3gp        176x144    small , mp4v.20.3, mp4a.40.2@ 24k
36           3gp        320x180    small , mp4v.20.3, mp4a.40.2
43           webm       640x360    medium , vp8.0, vorbis@128k
18           mp4        640x360    medium , avc1.42001E, mp4a.40.2@ 96k
22           mp4        1280x720   hd720 , avc1.64001F, mp4a.40.2@192k (best)

第一列是 id,第二列是文件格式,后面是视频信息。

如果直接想下载哪一种格式的就直接 -f id 就好了,比如下载格式为 720p / mp4 格式的,它的 id22,那么直接:

1
youtube-dl -f 22 https://www.youtube.com/watch?v=IW_kWtI9EUg

就下载完成了。

1080p 视频和音频是分开的,可以看到有些格式带有 video only ,有些带有 audio only ,选两个你自己喜欢的组合吧。比如我要下载 1080p / mp4 的视频和 128k / m4a 的音频,他们的 id 分别是 137140 ,那么使用:

1
youtube-dl -f 137+140 https://www.youtube.com/watch?v=IW_kWtI9EUg

youtube-dl 就用下载这两个视频和音频并调用 FFmpeg 合成为一个文件,并删除原来两个视频和音频。

小提示:mp4 + m4a 会合成为一个 mp4 文件, mp4 + webm 会兼容合成为 .mkv 文件,一般为了方便视频以后上传什么的我都选择 mp4 + m4a 组合。

视频在 VPS 下载完成后需要拖回本地,方法随意了,我是偷懒直接把视频下载在 Nginx 的 www 目录,用下载工具直接拖回来,工具用的是 IDM,不建议使用迅雷你懂的。

服务器是搬瓦工,拖回来后连忙删除 VPS 的视频,一是流量少耗不起,二是下载了带版权的视频被停就麻烦了。