很多人喜歡逛油管看視訊,自然就會有一些喜歡的收藏集或者視訊作者,有時候想要下載下來儲存在本地播放,這樣的話就不用每次FQ,畢竟有些代理的速度並不是很理想(如果你的代理速度炒雞快的話,請忽略這篇文章)。
當你想下載油管視訊,又覺得一些下載網站或者工具無法滿足你的要求的時候,比如我想定製下載的清晰度,我想只下載視訊或者只下載音訊,又或者想下載字幕等等。這時候下載工具就無法滿足你了,今天這裡就安利一個強大的工具youtube-dl
.看github上3W多個star,就知道這工具很厲害了。下面簡單說下如何使用
安裝youtube-dl:
youtube-dl is a command-line program to download videos from YouTube.com and other video
這裡推薦使用pip
安裝(需要python環境):
$ pip install youtube-dl
檢查安裝是否成功:
$ youtube-dl
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.
安裝ffmpeg
ffmpeg是一個用來合成轉換音訊視訊的工具:
A complete, cross-platform solution to record, convert and stream audio and video.
youtube-dl下載完音訊視訊後會呼叫這個工具進行合成,所以也需要安裝一下ffmpeg:
1.windows安裝:
直接在官網下載zip包,解壓後,將path/to/ffmpeg/bin
目錄加入環境變數即可.這裡不多說了
2.ubuntu安裝:
ffmpeg在ubuntu14.04中已經被libav取代。但這個決定已經被逆轉了,在ubuntu15.04中又可用了。所以如果你使用的是ubuntu15.04以上的版本,可以使用sudo apt-get install ffmpeg
命令進行安裝,如果你是ubuntu14.04及以下的版本,需要從mc3man ppa源安裝:
- 新增源
$ sudo add-apt-repository ppa:mc3man/trusty-media
- 出現以下提示,請按<Enter>確認
*Please note that if using this ppa I would *not* try upgrading to 14.10/15.04, ect. Do a fresh install instead. The intent here is just for users wishing to stay on 14.04*
If upgrading anyway use ppa-purge first -
sudo ppa-purge ppa:mc3man/trusty-media
Also note that with apt-get a sudo apt-get dist-upgrade is needed for initial setup & with some package upgrades
More info: https://launchpad.net/~mc3man/+archive/ubuntu/trusty-media
Press [ENTER] to continue or ctrl-c to cancel adding it
- 更新package list:
$ sudo apt-get update
$ sudo apt-get dist-upgrade
- 安裝ffmpeg:
$ sudo apt-get install ffmpeg
- 檢查是否安裝成功:
$ ffmpeg
ffmpeg version N-89777-g6e80079a28 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 7.2.0 (GCC)
configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-amf --enable-cuda --enable-cuvid --enable-d3d11va --enable-nvenc --enable-dxva2 --enable-avisynth --enable-libmfx
libavutil 56. 7.100 / 56. 7.100
libavcodec 58. 9.100 / 58. 9.100
libavformat 58. 3.100 / 58. 3.100
libavdevice 58. 0.100 / 58. 0.100
libavfilter 7. 11.101 / 7. 11.101
libswscale 5. 0.101 / 5. 0.101
libswresample 3. 0.101 / 3. 0.101
libpostproc 55. 0.100 / 55. 0.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
使用youtube-dl
命令使用也很簡單:
$ youtube-dl [OPTIONS] URL [URL...]
其強大之處就在於命令選項非常豐富,支援各種功能,下面簡單介紹一些:
1.檢視視訊所有型別:
$ youtube-dl -F <url>
## 或者:
$ youtube-dl --list-formats <url>
該命令會列出該視訊所存在的所有格式,並不會進行下載
$ youtube-dl -F https://www.youtube.com/watch?v=dfnCAmr569k
[youtube] sRVRN2DlDp4: Downloading webpage
[youtube] sRVRN2DlDp4: Downloading video info webpage
[youtube] sRVRN2DlDp4: Extracting video information
[info] Available formats for sRVRN2DlDp4:
format code extension resolution note
249 webm audio only DASH audio 55k , opus @ 50k, 1.83MiB
250 webm audio only DASH audio 71k , opus @ 70k, 2.37MiB
140 m4a audio only DASH audio 128k , m4a_dash container, mp4a.40.2@128k, 4.72MiB
171 webm audio only DASH audio 131k , vorbis@128k, 4.01MiB
251 webm audio only DASH audio 137k , opus @160k, 4.58MiB
278 webm 256x144 144p 99k , webm container, vp9, 24fps, video only, 3.32MiB
160 mp4 256x144 144p 113k , avc1.4d400c, 24fps, video only, 2.71MiB
242 webm 426x240 240p 228k , vp9, 24fps, video only, 6.75MiB
133 mp4 426x240 240p 248k , avc1.4d4015, 24fps, video only, 5.10MiB
243 webm 640x360 360p 415k , vp9, 24fps, video only, 12.19MiB
134 mp4 640x360 360p 637k , avc1.4d401e, 24fps, video only, 12.23MiB
244 webm 854x480 480p 769k , vp9, 24fps, video only, 20.70MiB
135 mp4 854x480 480p 1187k , avc1.4d401e, 24fps, video only, 22.97MiB
247 webm 1280x720 720p 1539k , vp9, 24fps, video only, 40.88MiB
136 mp4 1280x720 720p 2364k , avc1.4d401f, 24fps, video only, 42.75MiB
248 webm 1920x1080 1080p 2703k , vp9, 24fps, video only, 74.20MiB
137 mp4 1920x1080 1080p 4331k , avc1.640028, 24fps, video only, 78.09MiB
271 webm 2560x1440 1440p 9057k , vp9, 24fps, video only, 197.73MiB
264 mp4 2560x1440 1440p 10409k , avc1.640032, 24fps, video only, 203.63MiB
313 webm 3840x2160 2160p 18092k , vp9, 24fps, video only, 577.79MiB
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)
上述示例展示了一個油管視訊的每種清晰度,格式 以及format code
2.下載指定質量的視訊和音訊並自動合併
$ youtube-dl -f <format code> <url>
其中format code
就是youtube-dl -F <url>
命令列出來的第一列結果。這裡其實隱含了對ffmpeg的使用,youtube-dl會去尋找ffmpeg並用其進行音視訊合併操作
3.對視訊質量和音訊進行定製下載:
$ youtube-dl -f "bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best" <url>
上述示例的意思是:下載最高質量的mp4格式,或者沒有mp4格式的情況下 下載最高質量的其他格式,其他示例請參考format-selection-examples:
4.下載字幕
對於國內的同學來說,有可能需要字幕,那麼youtube-dl
也支援字幕下載。
# 下載字幕
$ youtube-dl --write-sub <url>
# 下載該視訊所有可用的字幕
$ youtube-dl --write-sub --all-subs <url>
# 下載自動生成的字幕(僅限youtube)
$ youtube-dl --write-auto-sub <url>
5.字幕選擇和轉換
對於國內大多數播放器來說,youtube下載的vtt字幕並不能正確載入,而如果能轉換成srt字幕就完美了,youtube-dl自然也支援這種功能啦,還可以選擇對應語言的字幕進行下載呢:
# 選擇英文字幕並轉換成srt格式,同時下載視訊
$ youtube-dl --sub-lang en --convert-subs srt --write-sub <url>
6.下載視訊列表
如果你一個視訊列表需要下載,youtube-dl也是支援的,用法沒啥不同:
$ youtube-dl <palylist_url>
youtube-dl 會識別你的url是單個視訊還是視訊列表,並進行下載。
- 下載視訊自定義檔名:
# 使用 -o 引數
$ youtube-dl -o "%(upload_date)s-%(title)s.%(ext)s" <url>
上述命令指定下載的視訊檔案採用 上傳日期 + 視訊名稱+視訊副檔名 作為檔名。更多引數請看youtube-dl output-template
組合上面所說的指定視訊質量,下載字幕,轉換字幕等命令在一起:
$ youtube-dl -f "bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best" --sub-lang en --convert-subs srt -o "%(upload_date)s-[%(title)s].%(ext)s" --write-sub https://www.youtube.com/watch?v=dfnCAmr569k
這樣下載下來的視訊,就可以直接享用了
對了,本地下載需要你的代理開啟全域性模式。如果不想開啟全域性模式的話,需要在每一條命令後面加上代理設定:--proxy "https://127.0.0.1:1080"
嵌入youtube-dl
youtube-dl不但是一個很好的命令列工具,而且還支援嵌入程式碼使用,下面看一個簡單的示例:
from __future__ import unicode_literals
import youtube_dl
class MyLogger(object):
def debug(self, msg):
print(msg)
def warning(self, msg):
print(msg)
def error(self, msg):
print(msg)
def my_hook(d):
if d[`status`] == `finished`:
print(`Done downloading, now converting ...`)
ydl_opts = {
`format`: `bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best`,
`outtmpl`:`%(upload_date)s-[%(title)s].%(ext)s`,
`writeautomaticsub`:True,
`subtitleslangs`:`en`,
`logger`: MyLogger(),
`progress_hooks`: [my_hook],
}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
ydl.download([`https://www.youtube.com/watch?v=dfnCAmr569k`])
程式碼很簡單,重點在於ydl_opts
這個字典,裡面的每一項就是命令列中youtube-dl
的一個引數,是不是很方便?
自定義轉換字幕檔案
如果youtube-dl的字幕轉換無法滿足要求的話,你還可以自己寫程式碼進行轉換,這裡再安利一個字幕轉換的庫pycaption。支援各種流行的視訊字幕格式
demo:
from pycaption import WebVTTReader, SRTWriter
def vtt_to_srt():
vtt_content = """WEBVTT Kind: captions Language: en 00:00:03.000 --> 00:00:04.766 size:88% position:56% ♪ I WANNA BE YOUR END GAME ♪ 00:00:06.000 --> 00:00:08.000 ♪ I WANNA BE YOUR FIRST STRING ♪ """
caption_set = WebVTTReader().read(vtt_content)
srt_content = SRTWriter().write(caption_set)
print(srt_content)
vtt_to_srt()
怎麼樣,是不是很簡單?
好了,差不多介紹完了,關於youtube-dl的更多使用姿勢,請自行解鎖(逃)。
參考:
- 使用youtube-dl下載國外視訊
- youtube-dl的Github專案
- pycaption
- youtube-dl-download-video-from-youtube-with-subtitles-tutorial
- How to install FFmpeg on Ubuntu 14.04
本文同時釋出在掘金