一鍵下載你的youtube視頻

不少人喜歡逛油管看視頻,天然就會有一些喜歡的收藏集或者視頻做者,有時候想要下載下來保存在本地播放,這樣的話就不用每次FQ,畢竟有些代理的速度並非很理想(若是你的代理速度炒雞快的話,請忽略這篇文章)。python

當你想下載油管視頻,又以爲一些下載網站或者工具沒法知足你的要求的時候,好比我想定製下載的清晰度,我想只下載視頻或者只下載音頻,又或者想下載字幕等等。這時候下載工具就沒法知足你了,今天這裏就安利一個強大的工具youtube-dl.看github上3W多個star,就知道這工具很厲害了。下面簡單說下如何使用。linux

安裝youtube-dl:

youtube-dl is a command-line program to download videos from YouTube.com and other videogit

這裏推薦使用pip安裝(須要python環境):github

$ pip install youtube-dl
複製代碼

檢查安裝是否成功:web

$ 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是一個用來合成轉換音頻視頻的工具:shell

A complete, cross-platform solution to record, convert and stream audio and video.ubuntu

youtube-dl下載完音頻視頻後會調用這個工具進行合成,因此也須要安裝一下ffmpeg:windows

1.windows安裝: 直接在官網下載zip包,解壓後,將path/to/ffmpeg/bin目錄加入環境變量便可.這裏很少說了bash

2.ubuntu安裝: ffmpeg在ubuntu14.04中已經被libav取代。但這個決定已經被逆轉了,在ubuntu15.04中又可用了。因此若是你使用的是ubuntu15.04以上的版本,可使用sudo apt-get install ffmpeg命令進行安裝,若是你是ubuntu14.04及如下的版本,須要從mc3man ppa源安裝:markdown

  • 添加源
$ 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是單個視頻仍是視頻列表,並進行下載。

  1. 下載視頻自定義文件名:
# 使用 -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的更多使用姿式,請自行解鎖(逃)。


參考:

相關文章
相關標籤/搜索