Video Downloader
TNFSH Python教材
Table of Contents
註:pytube 已停止維護、目前無法正常下載 YouTube 影片,現行方案為 yt-dlp。本篇範例已全面改用 yt-dlp 改寫。
1. 安裝套件
安裝 yt-dlp(若要轉出 mp3,系統另需安裝 ffmpeg):
1: pip install yt-dlp
2. 下載單支影片(mp4)
以 yt_dlp.YoutubeDL(opts) 建立下載器,呼叫 download() 才會真正開始下載。
1: import yt_dlp 2: 3: url = 'https://www.youtube.com/watch?v=影片ID' # 換成想下載的影片網址 4: 5: opts = { 6: 'format': 'mp4', # 下載 mp4 格式 7: 'outtmpl': '%(title)s.%(ext)s', # 以影片標題命名輸出檔 8: } 9: 10: try: 11: with yt_dlp.YoutubeDL(opts) as ydl: 12: ydl.download([url]) # 一定要呼叫 download() 才會下載 13: print('下載完成') 14: except Exception as e: # 印出例外內容,方便除錯 15: print('下載失敗:', e)
3. 下載單支影片並轉成 mp3
註:舊版教材以 moviepy 將 mp4 轉為 mp3;且 from moviepy.editor import ... 這種寫法在 MoviePy 2.x 已移除(新寫法為 =from moviepy import VideoFileClip=)。不過 yt-dlp 內建 postprocessor 可直接透過 ffmpeg 抽出音訊,因此這裡採用更簡潔的做法,不再依賴 moviepy。
1: import yt_dlp 2: 3: url = 'https://www.youtube.com/watch?v=影片ID' # 換成想下載的影片網址 4: 5: opts = { 6: 'format': 'bestaudio/best', # 只抓最佳音訊 7: 'outtmpl': '%(title)s.%(ext)s', 8: 'postprocessors': [{ # 下載完自動用 ffmpeg 轉 mp3 9: 'key': 'FFmpegExtractAudio', 10: 'preferredcodec': 'mp3', 11: 'preferredquality': '192', 12: }], 13: } 14: 15: try: 16: with yt_dlp.YoutubeDL(opts) as ydl: 17: ydl.download([url]) 18: print('下載並轉檔完成') 19: except Exception as e: 20: print('下載失敗:', e)
4. 下載整個播放清單
yt-dlp 直接支援播放清單網址,不需再透過 YouTube API 逐一取得影片 ID。
1: import yt_dlp 2: 3: playlist_url = 'https://www.youtube.com/playlist?list=播放清單ID' 4: 5: opts = { 6: 'format': 'bestaudio/best', 7: 'outtmpl': '%(playlist_index)s-%(title)s.%(ext)s', 8: 'ignoreerrors': True, # 清單中個別影片失敗時繼續下載其他影片 9: 'postprocessors': [{ 10: 'key': 'FFmpegExtractAudio', 11: 'preferredcodec': 'mp3', 12: 'preferredquality': '192', 13: }], 14: } 15: 16: try: 17: with yt_dlp.YoutubeDL(opts) as ydl: 18: ydl.download([playlist_url]) 19: print('播放清單下載完成') 20: except Exception as e: 21: print('下載失敗:', e)