Video Downloader
TNFSH Python教材

Table of Contents

Hits

註: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)

Author: Yung Chin

Created: 2026-09-01 二 20:01

Validate