iT邦幫忙

0

使用 Python 下載 YouTube 影片

  • 分享至 

  • xImage
  •  

前言

看到好的影片想要保存下來,或不想被廣告亂入,可使用 Python 下載 YouTube 影片,存在本機隨時觀看,Python套件包羅萬象,任何工作幾乎都有善心人士開發對應的套件,幫我們大大的提高了生產力,以下就介紹如何利用 pytube 套件下載 YouTube 影片。

實作

  1. 安裝:開啟終端機或cmd,執行以下指令:
pip install pytube
  1. 下載單一影片:
from pytube import YouTube

# YouTube 影片id
id = 'A-6c584jxX8'
# 下載單一影片
YouTube('https://www.youtube.com/watch?v='+id) \
    .streams.get_highest_resolution().download()

影片id 可在播放的影片按滑鼠右鍵,選【複製影片網址】,擷取網址最後一段或【v=】後面的值。

  1. 錯誤修補:

哇,只要一行就可以下載 YouTube 影片,太厲害了。但是,過了一段時間,升級pytube套件至v15.0.0,突然出現以下錯誤:

pytube.exceptions.RegexMatchError: get_throttling_function_name: could not find match for multiple。

找了一陣子,發現這一篇可解決問題,修改套件安裝目錄的cipher.py如下:

# function_patterns in get_throttling_function_name 函數
# 最後兩行改為:
        r'a\.[a-zA-Z]\s*&&\s*\([a-z]\s*=\s*a\.get\("n"\)\)\s*&&.*?\|\|\s*([a-z]+)',
        r'\([a-z]\s*=\s*([a-zA-Z0-9$]+)(\[\d+\])?\([a-z]\)',        

下載播放清單內所有影片

我們可以一次下載播放清單內所有影片,使用pytube的Playlist類別,可抓到清單內所有影片的超連結。

from pytube import YouTube
from pytube import Playlist

def download_youtube_series(playlist1): 
    # 播放清單
    playlist = Playlist(playlist1)
    # 所有影片的超連結
    for link in playlist:
        # 下載單一影片
        YouTube(link).streams.get_highest_resolution().download() 
        youtube_id = link[link.find('v=')+2:]
        print(f"{youtube_id} downloaded!") 
  
    print ("All videos downloaded!") 
    return
  
  
if __name__ == "__main__":  
    download_youtube_series('https://www.youtube.com/playlist?list=PLJV_el3uVTsPM2mM-OQzJXziCGJa8nJL8')    

改進

上述程式還有一點改進空間,影片是循序下載,效率不彰,可以改用多執行緒(Multi-threading),同步下載所有影片,程式如何改呢? 就請大家提供解答嘍。多執行緒可參考『Python 多執行緒 threading 模組平行化程式設計教學』或期待下一次介紹嘍。

工商廣告:)

影音課程:

開發者必學:OpenAI API應用與開發
開發者必學:OpenAI API應用與開發
ChatGPT企業實踐指南 | 技術透析與整合應用
深度學習PyTorch入門到實戰應用

書籍:

ChatGPT 完整解析:API 實測與企業應用實戰
ChatGPT 完整解析:API 實測與企業應用實戰
Scikit-learn 詳解與企業應用
開發者傳授 PyTorch 秘笈
深度學習 -- 最佳入門邁向 AI 專題實戰


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言