下载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。建议音频、视频和输出格式这三者要选择一致,否则合并视频会有问题。
最后附上下载的视频:
参考地址
Install YouTube-DL – A Command Line Video Download Tool for Linux