在 Debian 使用 yt-dlp 下載 Youtube 影片轉換為 mp3

臨時想用 rpi 安裝 yt-dlp 來下載 youtube 播放清單卻跳出錯誤訊息, 找了一下說是要把 yt-dlp 更新到最新版本就可解決, 但 Debian 上的套件太舊, 如果還要另外去設定 backports 又太麻煩, 還好 yt-dlp 只是用 Python 寫成的 script, 直接去 yt-dlp 的 GitHub repo下載 zipimport binary, 就可以使用 Python 執行, 再搭配 ffmpeg 輕鬆轉成 mp3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 確認目前版本是否為最新
python3 yt-dlp -U

# 下載播放清單, 選擇 format ID 251 (純聲音 webm)
python3 yt-dlp -i --yes-playlist -f 251 *YOUTUBE_PLAYLIST_LINK*

# 將所有 webm 轉成 mp3
for f in *.webm; do ffmpeg -i "$f" -vn -ar 44100 -ac 2 -b:a 192k "${f%.*}.mp3"; done

# 後來發現好像有 -x 選項可以省掉上面 ffmpeg 步驟
python3 yt-dlp -i -x --audio-format mp3 *YOUTUBE_LINK*

# 下載成 mp4
python3 yt-dlp -i -f mp4 *YOUTUBE_LINK*

Reference:
reddit: yt-dlp: How do I ask for a specific webm format ID and pair it with audio?
stackoverflow: Syntax for a single-line while loop in Bash
stackoverflow: Convert audio files to mp3 using ffmpeg