如何從YouTube蒐集資料? 4種下載YouTube影片方法總整理
下載YouTube影片的難題
在網路上google不難找到許多網站可以透過簡單的複製貼上影片網址就能下載YouTube影片,
但是這種網站大多上面都有一堆奇怪的廣告、或是有時會遇到奇怪就是無法下載的bug,
更別說有些會跳出一些像有病毒的東西,實在是挺令人不舒服的。
到底有什麼方法可以高端地解決這個問題呢?
相信看完這篇文章後,你也可以輕鬆地征服這個問題。
比較下載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種方法優劣比較圖
看完上面的分析之後,你知道自己適合使用哪一種方法了嗎?
下面的文章會介紹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
步驟 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
歡迎任何能使我或是這篇文章改進的意見,所以如果有問題或想法都歡迎在下面告訴我喔 !
另外,如果你覺得這篇文章有幫助到你、很符合你的需求的話,記得幫我拍手以及分享喔 !