如何從YouTube蒐集資料? 4種下載YouTube影片方法總整理

人工智慧大師之路

如何從YouTube蒐集資料? 4種下載YouTube影片方法總整理

如何從YouTube蒐集資料? 4種下載YouTube影片方法總整理 youtube logo 600 400

下載YouTube影片的難題

在網路上google不難找到許多網站可以透過簡單的複製貼上影片網址就能下載YouTube影片,

但是這種網站大多上面都有一堆奇怪的廣告、或是有時會遇到奇怪就是無法下載的bug,

更別說有些會跳出一些像有病毒的東西,實在是挺令人不舒服的。

到底有什麼方法可以高端地解決這個問題呢?

相信看完這篇文章後,你也可以輕鬆地征服這個問題。

 

下載YouTube影片

 

比較下載YouTube影片的現存選項

 

本文要介紹的方法有以下四種,讀者可以藉由下文的比較與介紹了解各種方法的優劣,

再依照自己的實際需求進而選擇出對自己最適合的方法。

* 以下有些方法需要電腦有python環境,

所以如果還沒建立python環境的讀者可以先看我的另一篇文章 : 從0開始一次搞定深度學習環境

看完文章並跟著安裝完,再回來看這篇會更輕鬆喔。

 

youtube-dl cmd

 

youtube-dl cmd是直接將程式執行檔下載到電腦,並在命令提示字元介面內透過指令下載。

 

youtube-dl in python

 

youtube-dl in python是下載python youtube-dl套件,並在python環境內透過程式碼下載。

 

pytube in python

 

pytube in python是下載python pytube套件,並在python環境內透過程式碼下載。

 

By Click Downloader

 

By Click Downloader則是最適合不寫程式的人使用的工具,步驟比起其他方式而言最為簡單,

先到官網下載,它有分免費版和高級版,最直覺的複製貼上影片網址下載或是讓它自動偵測影片,再按下載鍵即可。

一般人偶爾下載個影片的話其實免費版就夠用了,而高級版則是在免費版的基礎上增添一些進階功能,

例如 : 下載私人影片、一次點擊下載整個播放列表、無廣告等。如果有這方面的需求,可以到”高級版“查看詳請。

 

4種方法優劣比較圖

 

優缺比較圖

4種下載youtube影片方法優缺比較圖

 

看完上面的分析之後,你知道自己適合使用哪一種方法了嗎?

下面的文章會介紹youtube-dl in python和youtube-dl cmd,寫給想要追求最好解法的讀者。

 

如何使用youtube-dl in python? (次推薦)

 

前置作業

 

步驟 1

打開命令提示字元(cmd)並輸入以下指令以進入python環境內。

conda activate 你的環境名稱

步驟 2

下載核心套件 : youtube_dl

在命令提示字元(cmd)內輸入以下指令。

pip install youtube_dl

步驟 3

下載音頻處理套件 : ffmpeg

在命令提示字元(cmd)內輸入以下指令。

pip install you-get youtube-dl ffmpeg

步驟 4

下載進度條套件 : tqdm

在命令提示字元(cmd)內輸入以下指令。

pip install tdqm

步驟 5

進入python jupyter notebook

在命令提示字元(cmd)內輸入以下指令。

jupyter notebook

步驟 6

在打開的網頁內新建一個New Python3 notebook。

 

Python下載函式和使用說明

 

引入套件與定義函式,在Cell內輸入以下程式碼。

import youtube_dl 
from tqdm import tqdm_notebook 

def download_song(song_df, verbose=False): 
    for i in tqdm_notebook(range(len(song_df))): 
        name = song_df['SongName'][i] 
        artist = song_df['ArtistName'][i] 
        song_url = song_df['youtube_links'][i] 
        outtmpl = song_df['filename'][i][:-4] + '.%(ext)s' 
        
        try: 
            ydl_opts = { 'outtmpl' : outtmpl, 
                         'postprocessors' : [ 
                             { 'key' : 'FFmpegExtractAudio', 
                               'preferredcodec' : 'mp3', 
                               'preferredquality' : '192' },
                             { 'key' : 'FFmpegMetadata', } ] } 
                           
            with youtube_dl.YoutubeDL(ydl_opts) as ydl: 
                ydl.download([song_url]) 
            
            song_df['downloaded'][i] = 1 
                           
        except Exception as e: 
            print('Error occurred \n' + str(e)) 
                           
            if verbose: 
                print('fail song {}: {} by {}'.format(i, name, artist))

 

資料格式說明

資料需要符合以下規則

1.資料存放在名為song_df的一個dataframe。

2.song_df中的youtube_links這個欄位是以字串表示的youtube影片網址。

3.其他欄位像ArtistName / SongName / filename / downloaded 如果沒有需要可以註解掉不使用。

 

執行函式,

執行後你應該會在和你的notebook所在的資料夾內看到有影片檔案跑出來,剩下的就是等待了。

download_song(song_df, verbose=True)

 

如何使用youtube-dl in cmd? (最推薦)

 

前置作業

 

步驟 1

下載youtube_dl程式執行檔

步驟 2

把執行檔放到你想放的地址。

(就是以後影片下載到的地方 例如 : C:使用者/USER)

步驟 3

打開命令提示字元。

步驟 4

依照不同需求執行以下指令。

 

指令使用說明

 

指令名稱說明

1.URL : 欲下載的youtube影片網址

2.TXT_FILENAME : 文字檔的名稱

3.PLAYLIST_URL : 欲下載的播放列表網址

 

基本

youtube-dl URL

這就是最基本的指令,執行後就會開始下載該網址的影片,

但有時我們會需要其他進階功能,這時就需要以下的介紹啦。

 

特殊

youtube-dl官方document有更多特殊需求指令的詳細解說,以下只介紹幾個我最常使用的。

 

1.指定檔名 : -o “%(title)s.%(ext)s”

youtube-dl -o “%(title)s.%(ext)s” URL

2.下載多首 : –batch-file TXT_FILENAME

youtube-dl -o “%(title)s.%(ext)s” –batch-file TXT_FILENAME

至於如何生出文字檔案則有兩種方式

1.手動把影片網址一行一個輸入進txt文字檔內

2.使用以下程式碼一次性寫出dataframe中存放的影片網址

資料格式規則 : part1為一個裝滿youtube影片網址的串列(list),可從dataframe中取得。

with open('dl1.txt', 'w') as file: 
    for i in range(len(part1)): 
        if type(part1[i]) == str: 
            file.writelines(part1[i]) 
            file.write('\n')

 

3.略過錯誤 : –ignore-errors

youtube-dl –ignore-errors -o “%(title)s.%(ext)s” –batch-file TXT_FILENAME

這行的指令的用意是為了避免某個影片因某些問題無法下載,

然後cmd就停下、不再下載該網址後的影片了。

加上後就算遇到Error它也會跳過它繼續下載,

你就不用一直待在旁邊盯著它下載了。

 

三種最常用的指令統整

 

下載影片示意圖

 

下載單首

youtube-dl URL

 

下載整個播放列表

youtube-dl PLAYLIST_URL

 

下載指定多首

youtube-dl -o “%(title)s.%(ext)s” –batch-file TXT_FILENAME

 

結論

 

你知道自己該使用哪種工具了嗎?

 

雖然本文介紹了滿多種不同的工具提供讀者參考,但讀者還是得自己去試找出最適合你的需求

也最適合你使用的一款工具當作你之後遇到問題的SOP

最後,身為一個為了蒐集資料而用youtube-dl下載過10萬首影片以上的人,分享一下疑難雜症經驗談。

 

以我個人使用需求來說,我之前為了生出歌詞與梅爾倒頻譜一對一對應的資料集,

必須把該每首歌的音檔下來轉換成梅爾倒頻譜,總共要下載的數量高達10萬。

由於這麼龐大的下載需求,我必須使用更有效率的工具以在短時間下載完畢。

 

1.實際效能體驗如何?

整體而言相當不錯,大多數的MV影片通常一首30秒以內就解決的掉了,不過還是有很少的比例會無法下載。

 

2.如何提升效率?

平行處理。沒錯,就是一次開多個命令提示字元視窗,分別給不同範圍要下載的文字檔。

但是開太多超過一個量(大概10個)的話,也會讓影片下載速度變慢;

另外,也要注意不要一次下載太久,免得使用的網路被列入黑名單。

 

3.遇到bug如何應對?

大多數的Error都是因為網路不穩定所造成,等到網路穩定時重新刷過一次大多能解決問題;

只有極少數是真的不能下載,這部分就沒辦法。

下載速度極慢或直接卡住,也是網路不穩定所造成,等到網路穩定時重新刷過一次大多能解決問題。

 

Call To Action

 

歡迎任何能使我或是這篇文章改進的意見,所以如果有問題或想法都歡迎在下面告訴我喔 !

另外,如果你覺得這篇文章有幫助到你、很符合你的需求的話,記得幫我拍手以及分享喔 !

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *