下载youtube视频是一个老调常谈的问题,这几天发现fast.io这个好东西,可以把它用做托管博客的音视频和图片等资源,于是又开始折腾如何下载youtube视频这个问题。

前提条件:

  • 一台国外的vps。我用的是搬瓦工,系统是CentOS7。
  • 科学上网,你懂得!

安装youtube-dl

youtube-dl是一个基于python的伟大工具,之所以说它伟大,不仅是因为它能下载youtub视频,它还能下载国外的如Dailymotion, Google Video, Photobucket, Facebook等一大批知名网站的视频,国内的优酷、腾讯、爱奇艺、网易云音乐、虾米音乐等主流的视频或歌曲。

具体支持的网站列表: http://ytdl-org.github.io/youtube-dl/supportedsites.html

在CentOS上用yum安装比较简单,遗憾地是自带的yum源仓库没有这个软件,所以可以先启用EPEL仓库,EPEL是什么鬼,不用管,简单说就是第三方的yum源,跟着敲命令就行。

1# yum search epel-release
2# yum info epel-release
3# yum install epel-release

好了,可以安装youtube-dl了。

1# yum install youtube-dl

下载youtube视频

好了,可以愉快的下载视频了。假设下载地址是:https://www.youtube.com/watch?v=gWsOFw9QZN8&frags=pl%2Cwn 可以先输入如下命令查询视频格式:

1# youtube-dl --list-formats https://www.youtube.com/watch?v=gWsOFw9QZN8&frags=pl%2Cwn

输出结果:

 1[root@JoeVPS ~]#  youtube-dl --list-formats https://www.youtube.com/watch?v=gWsOFw9QZN8&frags=pl%2Cwn
 2[2] 1980
 3[root@JoeVPS ~]# [youtube] gWsOFw9QZN8: Downloading webpage
 4[info] Available formats for gWsOFw9QZN8:
 5format code  extension  resolution note
 6249          webm       audio only tiny   59k , opus @ 50k (48000Hz), 3.74MiB
 7250          webm       audio only tiny   77k , opus @ 70k (48000Hz), 4.77MiB
 8140          m4a        audio only tiny  130k , m4a_dash container, mp4a.40.2@128k (44100Hz), 9.75MiB
 9251          webm       audio only tiny  151k , opus @160k (48000Hz), 8.91MiB
10160          mp4        82x144     144p   40k , avc1.4d400b, 30fps, video only, 2.81MiB
11278          webm       82x144     144p   47k , webm container, vp9, 30fps, video only, 2.71MiB
12133          mp4        136x240    144p   83k , avc1.4d400c, 30fps, video only, 6.05MiB
13242          webm       136x240    144p   92k , vp9, 30fps, video only, 5.59MiB
14243          webm       202x360    240p  184k , vp9, 30fps, video only, 9.81MiB
15134          mp4        202x360    240p  204k , avc1.4d400d, 30fps, video only, 14.21MiB
16244          webm       270x480    240p  331k , vp9, 30fps, video only, 16.42MiB
17135          mp4        270x480    240p  371k , avc1.4d4015, 30fps, video only, 26.27MiB
18247          webm       406x720    360p  672k , vp9, 30fps, video only, 28.90MiB
19136          mp4        406x720    360p  739k , avc1.4d401e, 30fps, video only, 50.80MiB
20248          webm       608x1080   480p 1263k , vp9, 30fps, video only, 45.51MiB
21137          mp4        608x1080   480p 1428k , avc1.64001f, 30fps, video only, 92.27MiB
22271          webm       810x1440   720p 2933k , vp9, 30fps, video only, 114.82MiB
23313          webm       1080x1920  1080p 4259k , vp9, 30fps, video only, 173.92MiB
2418           mp4        202x360    240p  401k , avc1.42001E, 30fps, mp4a.40.2@ 96k (44100Hz), 30.23MiB (best)
25
26[2]+  Done                    youtube-dl --list-formats https://www.youtube.com/watch?v=gWsOFw9QZN8

可以看到有很多分辨率的选项,注意上面4个是音频,下面的是视频,youtube的音频和视频是分开的。第一列是格式代码。

比如要下载最后一行的240p的视频,输入:

1youtube-dl -f 18 https://www.youtube.com/watch?v=gWsOFw9QZN8

其中,-f 18 表示格式码。

老夫兴冲冲地输入如上命令下载了视频之后,结果没声音,无语!正确的做法是同时下载视频和音频,youtube会调用ffmpeg把下载的视频和音频合并,所以我们得安装ffmpeg。

安装ffmpeg

1rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
2
3rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
4
5yum install ffmpeg ffmpeg-devel -y
6
7ffmpeg -h

终极总结

好了,终极下载命令:

1youtube-dl -f 313+250  --merge-output-format webm  https://www.youtube.com/watch?v=gWsOFw9QZN8&frags=pl%2Cwn

注意313是视频的格式码,250是音频的格式码,中间的加号是连接符,最后合并后的输出格式是webm。建议音频、视频和输出格式这三者要选择一致,否则合并视频会有问题。

最后附上下载的视频:

参考地址

youtube-dl官方网站

Install YouTube-DL – A Command Line Video Download Tool for Linux

怎样使用YouTube-DL从YouTube视频下载MP3曲目