iT邦幫忙

3

【電腦程式與生活】(1) (2020年2月更新) 以python3下載youtube影片

嗨,大家好,我是心原一馬,
這次小馬嘗試以電腦程式運用在生活上為主題,
統整為一篇系列文。

本系列文大致上會分為兩類:

  • 一類是需要寫python程式碼的,
    寫程式碼的好處是能夠自動化,而且能夠大量處理資訊。
  • 一類則是不必會程式的,
    單純下載軟體即可使用,
    好處是對一般人來說較容易操作。

學程式有什麼用?

其實至古至今,
學習任何一項技能,
都容易被問說:「學這個有什麼用?
在我們家中也是如此,

近來小馬查詢各類網路資訊及書籍,
有習得如何以python程式解決家中日常所需的問題的方法,
雖可能不足解決大企業的問題,
但解決家中與電腦相關的需求綽綽有餘,
並使家中長輩理解程式真的是有用的。

特別整理為一個系列文命為【電腦程式與生活】,
希望能夠幫到大家,
同時自助助人,
並且在你們長輩也問說「程式能用在生活上嗎?」時能拿出來解決問題

python3下載youtube音樂

現代在youtube看影片已成為多數人的休閒娛樂,
當中或許會看到一些值得珍藏的影片,
然而網路上下載youtube影片的方法很多不太好用,
今天就來介紹如何使用python來幫我們方便的下載影片。

咦?等等?這篇好像在(2020年1月最新)如何用python下載youtube影片?就寫過了?
/images/emoticon/emoticon15.gif/images/emoticon/emoticon15.gif/images/emoticon/emoticon15.gif

雖然使用方法相同,
但這次介紹的工具不同,
可參考官網的介紹,
之前那篇文章使用的工具為pytube 9.5.3版,
本文欲使用的工具為pytube 9.5.13

關鍵技術- 下載pytube3模組

安裝方式也很簡單,
安裝好anaconda後,你可以在開始->程式集的地方找到一個叫anaconda的資料夾,大概如下:
https://ithelp.ithome.com.tw/upload/images/20200116/20117114ZHXcyPaoJX.png

選擇anaconda prompt點擊它,
會看到這樣的畫面:
https://ithelp.ithome.com.tw/upload/images/20200116/20117114UuWZuAYkGf.png

直接輸入指令pip install pytube3,按下enter即可
(若你有照著我之前的文章教學安裝過pytube
要先輸入指令pip uninstall pytube解除pytube的安裝)

https://ithelp.ithome.com.tw/upload/images/20200206/20117114W0RtAXB7Db.png

看到Successfully installed pytube3-9.5.13即表示安裝完成了。

程式簡單- 三行程式碼即可下載影片

進入程式碼教學,
譬如你想要下載的youtube影片網址為https://www.youtube.com/watch?v=DG8sXuBzKuM
(這首歌為「阿拉丁 Whole new world 的翻唱」)
只需要撰寫下面三行程式碼:

from pytube import YouTube
yt = YouTube('https://www.youtube.com/watch?v=DG8sXuBzKuM')
yt.streams.first().download()

第1行: 匯入pytube這個模組
第2行: 建立一個YouTube物件,括號內填入欲下載影片的網址
第3行: youtube的每部影片可能有多種不同格式供使用者下載,通常選第一種下載即可。
download()方法默認會將影片下載至跟你的程式同一個資料夾中。

注意: 若你忘記依上述步驟於anaconda prompt安裝pytube而直接執行程式,
你會得到ModuleNotFoundError: No module named 'pytube'的錯誤。

成功率高(實測目前成功率超過90%)

與之前用pytube模組相比,
pytube3的成功率蠻高的,
pytube模組下載一個youtube影片清單時可能常常失敗,
成功率不到50%,
只要看到「授權 YouTube 的內容擁有者:」的影片都無法下載,如圖示:

https://ithelp.ithome.com.tw/upload/images/20200206/20117114qLT2Vq2EEQ.png

目前用pytube3模組下載影片的成功率實測高達90%應該是沒問題。

應用一、一次下載多個影片的方法

那如果今天你一次想下載十個影片怎麼辦呢?
如果照上述程式的寫法,
一次下載一個影片,
每次更改第二行的網址寫挺麻煩的。
能否一次將十個網址輸入至程式中一次下載呢?

小馬自己的做法如下:
假設我想一次下載多個youtube影片,
小馬將網址複製貼上存在「video.txt」文字檔中(每個網址一行),

https://ithelp.ithome.com.tw/upload/images/20200117/20117114rw2gWRL2HO.png

並將這個檔案放在跟自己的python程式(我命名為pytubePratice.py)同一個資料夾中,
將python程式更改如下:

from pytube import YouTube
with open('video.txt') as file:
    for line in file:
        yt = YouTube(line.rstrip())
        print(f"正在下載影片: {yt.title}")
        yt.streams.first().download()
        print(f"影片{yt.title}下載完成")

用python程式讀取文字檔「video.txt」的內容,
即可一次下載多個影片囉。
(程式內print裡的yt.title可以顯示影片的名稱)

邦友問題整理-下載多個影片失敗

有邦友說下載多個影片會失敗,
錯誤碼是No such file or directory: 'video.txt'
可能的原因如下:

此錯誤碼表示程式找不到video.txt這個檔案,因此可能的問題為-

  • video.txt忘記跟你的python程式放在同一個資料夾中
  • 貼網址的文字檔命名並非命名為video.txt,若你電腦是設定「隱藏檔案的副檔名」,而你將文件命名為video.txt的話,那麼實際檔案的名稱可能會成video.txt.txt,需特別留意。

應用二、下載youtube上的播放清單

有時候,會有音樂愛好者將許多歌曲整理為一個播放清單
例如https://www.youtube.com/watch?v=wdH26D8Ssww&list=PLg_r40S5jeMIvAaq9OZweLCx8_N1OxO_Q
(本清單在網上隨意搜索的,僅用做示範程式)
那麼將這些網址一首一首貼至文字檔上也挺麻煩

還好pytube3模組亦可以用短短的程式碼一次下載播放清單
(注意若此清單中有「已刪除影片」可能導致程式的中斷)
範例如下:

from pytube import Playlist
playlist = "https://www.youtube.com/watch?v=wdH26D8Ssww&list=PLg_r40S5jeMIvAaq9OZweLCx8_N1OxO_Q" #欲下載清單
pl = Playlist(playlist)
pl.download_all()
print('下載完成!')

應用三、將播放清單下載至指定的路徑下

這個應用會用到的python的os模組,
os模組是用來管理電腦上檔案的,
本範例會將播放清單下載至「download」這個資料夾中:

from pytube import Playlist
import os
playlist = "https://www.youtube.com/watch?v=wdH26D8Ssww&list=PLg_r40S5jeMIvAaq9OZweLCx8_N1OxO_Q" #欲下載清單
pl = Playlist(playlist)
pathdir = 'download'  #下載資料夾
if not os.path.isdir(pathdir):  #如果資料夾不存在就建立
    os.mkdir(pathdir)
pl.download_all(pathdir)
print('下載完成!')

以上教學到此,
提醒大家於網路上下載的影片僅供個人觀賞用,
嚴禁做商業用途,避免觸法。


尚未有邦友留言

立即登入留言