Spotify Player 開源終端機播放器,把整個 Spotify 搬進命令列

Spotify Player 是用 Rust 寫的開源終端機 Spotify 播放器,支援 Connect 遙控、本機串流、同步歌詞與 CLI 腳本。這篇攤開它真正的前提:播放要 Premium 帳號、API 額度預設踩在共用的 ncspot client ID 上、串流核心 librespot 自認條款模糊,並整理安裝方式、選配功能與 macOS 上的細節。

用 AI 摘要這篇文章:

如果你大部分的時間都待在終端機裡,連聽音樂都懶得把手離開鍵盤,Spotify Player(GitHub 上的 aome510/spotify-player)大概是目前最完整的答案:一個用 Rust 寫的開源終端機 Spotify 播放器,MIT 授權、跨平台、持續更新,搜歌、排佇列、編輯播放清單、看同步歌詞都做得到,還能把整個播放器註冊成 Spotify Connect 裝置讓手機遙控。先講我的整體判斷:它值得裝,而且不是那種棄坑三年的情懷專案,但要先想清楚一件事。這個播放器免費又開源,它能動的三個前提卻都握在 Spotify 手上:播放要 Premium 帳號、API 額度預設踩在別人的共用鑰匙上、串流核心自己承認處於條款的模糊地帶。這篇就照這三道牆的順序講,文中的數字與現況以 2026 年 10 月為基準。

先看它怎麼動:兩套憑證、兩種播放路線

Spotify Player 有兩種工作模式。第一種是當遙控器:按 D 列出你帳號裡的所有裝置,選一台電腦上的官方 Spotify、手機或音箱,播放控制權就交給終端機,音樂從你選的那台裝置出來。第二種是本機串流:它內建 librespot(一套開源實作的 Spotify 用戶端協定),直接在終端機裡解碼播放,還會把自己註冊成一個名叫 spotify-player 的 Connect 裝置,讓手機反過來遙控它。第二種是預設開啟的,所以它既是遙控器也是喇叭。

也因為同時用到 Spotify 的 Web API 和串流協定,第一次啟動時它會開兩次瀏覽器授權頁:一次是 Web API 的權杖、一次是 librespot 的連線憑證,兩者掛在不同的 client ID 底下,所以 Spotify 要求分開同意。官方文件還提醒,如果你照建議設了自己的 client ID,第一次會跳到三次授權。授權流程會跑兩次,因為 Web API 與 librespot 是兩套獨立的 OAuth,授權完會存在快取資料夾,之後開機就不用再點。介面本身是分頁式的:圖書館、搜尋、最近播放、喜歡的歌、佇列、歌詞各有自己的頁面,快捷鍵照 vim 邏輯走,j/k 上下移動、空格暫停、n 下一首、斜線搜尋,連 5j 這種數字前綴都吃。

Spotify Player 在 iTerm2 終端機的官方介面截圖,顯示專輯封面與播放狀態列Pin
Spotify Player 官方 README 的 iTerm2 介面截圖

付費牆:沒有 Premium,裝了也只是空殼

官方安裝說明的要求欄位寫得很直白:需要 Spotify Premium 帳號。議題區裡有人問過免費帳號有沒有替代方案,討論串至今沒有下文,專案也從未支援。原始碼裡沒有任何本地的付費檢查,這道牆從頭到尾都立在 Spotify 那一端:播放控制與外部裝置遙控的 API 本來就只對 Premium 開放,免費帳號連把音樂丟給別台裝置播的資格都沒有。

這張入場券在台灣的價格,我抓了 2026 年 10 月 Spotify 台灣定價頁的內容:個人方案每月 NT$168,學生方案 NT$88,沒訂閱過的新用戶第一個月免費。而定價頁的常見問答也寫明:就算是免費試用,註冊時仍要綁有效的付款方式,取消後 Premium 權限會用到下一個帳單日才失效;零元試用期內取消則是立即失效。換句話說,終端機裡這個免費播放器的真實總成本,是每月一筆訂閱費。如果你本來就是 Premium 用戶,這道牆對你不存在;如果你用的是免費帳號,這個工具可以直接跳過,不用往下看了。

額度牆:你的請求上限,預設和全世界共用

這是整個專案裡我覺得最值得攤開來講的設計。Spotify 對第三方應用的 API 請求,限流是綁在應用程式的 client ID 上,而不是綁在你的帳號上。Spotify Player 預設不要求你去申請自己的 client ID,那它用誰的?我把原始碼 clone 下來看,auth.rs 的第 15 行硬編碼著一組常數,名稱就叫 NCSPOT_CLIENT_ID,它借用的是另一個開源播放器 ncspot 的應用程式身分。官方設定文件也明講:預設值就是 ncspot 的 client ID。

共用身分的代價是共用額度。全世界所有用預設值的 spotify-player 和 ncspot 使用者,共同分食同一個 client ID 的請求上限,使用量大的時候就會撞上 429 Too Many Requests。這不是理論風險:2026 年 9 月到 10 月的議題區,還有人回報啟動時載入喜歡的歌曲清單就撞額度限制(#1093),以及播放指令在冷卻時間裡連續重試、把額度撞得更深(#1087)。再往前翻,9 月初還修過一個更狠的問題(#1074):單一次 429 會讓播放畫面整個卡死,六條程式路徑都在放大那次短暫的限流。開發者後來把搜尋請求序列化來降低撞限機率,等於承認這個問題是結構性的。官方文件也提醒,把播放狀態的刷新間隔調高會直接增加 API 用量、更容易觸發限流,預設值是事件觸發而非定時輪詢。

官方的建議解法是去 Spotify 開發者後台自己註冊一個應用程式:建一個 app、把重新導向網址(預設是 http://127.0.0.1:8989/login)加進允許清單,再把拿到的 client ID 填進設定檔 app.toml,例行請求就會走你自己的額度。設定檔裡另外有個 api_rate_limit_retries 參數(預設 2)控制被限流後的自動重試次數,但重試只能治標,額度的源頭才是本體。而這裡還有第二層:2024 年 11 月 Spotify 收緊了 Web API 權限,新註冊的應用程式拿不到瀏覽、個人化推薦這類端點,所以 spotify-player 就算設了自己的 client ID,遇到那些端點還是會自動回頭借用 ncspot 的舊身分,因為 ncspot 的註冊年代早、額度等級高。你以為搬進了自己的房子,熱水器還是接在隔壁。

條款牆:連上 Spotify 的方式,上游自己標了風險

Spotify Player 的串流能力來自 librespot,而 librespot 是對 Spotify 私有協定的逆向工程實作,不是官方開放的 API。librespot 的官方文件裡有一段免責聲明,原文是:Using this code to connect to Spotify’s API is probably forbidden by them. Use at your own risk. 翻成中文的意思是:用這套程式碼連上 Spotify,很可能被他們禁止,風險自負。Spotify Player 站在 librespot 上面,這段聲明也就原封不動地適用於它。

實務上,librespot 家族的工具存在多年,同血統的 ncspot、spotifyd 都活得好好的,目前沒有 Spotify 大規模封鎖這類用戶的公開紀錄。但到目前為止沒事,和被允許,是兩回事。如果你很在意帳號安全,這就是該自己劃線的決策點:拿主要帳號賭一個非官方客戶端的容許度,或繼續用官方 App、把終端機留給工作。

SSH 連線與腳本控歌,是它真正的戰場

把三道牆講完,回頭看它的價值才準。它的核心受眾很清楚:SSH 連進伺服器工作的人、喜歡平鋪式視窗管理員那種極簡桌面的人、以及想把音樂控制寫進腳本的人。對整天泡在編輯器裡的人,不用切視窗就能搜歌、暫停、跳下一首,這比開一個官方 App 順手;在 Linux 上它還接了 MPRIS 標準,藍牙耳機上的播放鍵、桌面環境的媒體鍵都能直接控制它。進階操作也不缺,播放清單可以新增、fork、匯入,佇列能即時調整,滑鼠點進度條可以直接快轉。

命令列模式是它最與眾不同的部分。它提供一組 CLI 子命令,可以直接拿來寫腳本,官方文件給的範例是用管線把搜尋結果餵給 jq,取出第一首歌的 ID 再丟給播放指令,一行就能讓終端機播放任意關鍵字的搜尋結果。歌詞功能也值得提:取詞的程式碼是透過你的 Spotify 連線向 Spotify 自己的歌詞端點要資料,所以拿到的是和官方 App 同源的同步歌詞,而不是從歌詞網站爬下來的湊合版本。

它甚至還能當無頭伺服器上的音樂主機:選配的 daemon 模式讓它常駐背景,手機裡的 Spotify 就把它當一台播放裝置來遙控;搭配 tmux 讓工作階段不隨 SSH 斷線消失,機器不接螢幕也能出聲。會自己管伺服器的人,周邊工具大概也都長這樣,從 UptimeFlare 這類網站狀態監控到音樂播放,都是常駐在機器上的小服務。這是終端機播放器相對於網頁版最大的本質差異:網頁版要開瀏覽器分頁,它是一個能被腳本、快捷鍵與其他裝置驅動的常駐程式。

安裝與那些要自己開的功能

macOS 上最省事的路是 Homebrew:brew install spotify_player。Homebrew 收錄的就是最新版 v0.25.1,裝的是預先編譯好的 bottle,不用先裝 Rust 工具鏈。Linux 用戶用 cargo 安裝時要注意系統依賴:串流功能要 alsa-lib、媒體控制要 libdbus、加密層要 openssl,缺了會在編譯階段就失敗;Arch、Void、NixOS、FreeBSD、NetBSD 的套件庫也都收錄了。Windows 走 scoop 或 cargo。

有幾個看起來很吸睛的功能,預設安裝裡其實沒有:專輯封面圖片渲染、桌面通知、daemon 模式、模糊搜尋,這些都是編譯期的選配功能,要用 cargo 帶 –features 旗標重新編譯才會有。反過來,音訊視覺化是內建串流的附屬功能,但設定檔裡預設關閉,要手動開。圖片渲染開起來之後,它會自動偵測你的終端機支援哪種圖形協定,Kitty、iTerm2、Sixel 都吃,不支援的就退回色塊字元拼一張低解析度的封面。

Spotify Player 在 Kitty 終端機渲染專輯封面的官方介面截圖Pin
官方 README 的 Kitty 截圖:圖片渲染開啟後的專輯封面

兩個 macOS 用戶特別要知道的細節:媒體控制功能在 macOS 預設關閉,因為系統要求有視窗才能收媒體鍵事件,硬開的話啟動時終端機會搶走焦點;daemon 模式在 macOS 和媒體控制互斥,只能二選一。另外官方 Docker 映像檔把串流功能停用了,容器版的定位是 Connect 遙控器。設定檔放在 ~/.config/spotify-player/ 底下,app.toml 管行為、keymap.toml 改快捷鍵,主題可以整組換,官方倉庫還附了一份主題清單讓你挑。授權拿到的憑證與音訊快取則統一放在 ~/.cache/spotify-player,串流的連線憑證是 credentials.json,API 權杖按 client ID 各存一份,所以換了 client ID 就要重新授權一次;遇到問題時同目錄的 log 檔是第一個該看的地方。

和前輩們比起來,它是少數還在動的

終端機 Spotify 播放器不是新點子。最出名的前輩 spotify-tui 有一萬九千多顆星,但倉庫最後一次推送停在 2024 年 4 月,你現在搜教學還會找到它,照著裝就是裝到一個兩年多沒動的專案;而且它本體只做遙控,要真的出聲還得照它文件裡的教學再配一個 spotifyd 常駐程式。同一個題目上,spotify-player 用五年多的連續維護接住了這批用戶:從 2021 年 7 月開張到現在七千兩百多顆星,過去一年發了九個正式版,最新版 v0.25.1 在 2026 年 9 月 9 日發布,2026 年 10 月初議題區還有新的問題回報在處理。另一個常被拿來比較的 ncspot 也還活躍,兩者定位接近,兩者都用 Rust 寫,差別在 ncspot 走傳統 ncurses 介面,spotify-player 用更現代的 ratatui 介面元件,文件也更完整。

想找完整的圖形介面是另一個題目,像 SPlayer 這類第三方音樂播放器走的路線完全不同。只想要歌詞檔的,音樂歌詞下載工具也自成一個品類。

授權與專案狀態

Spotify Player 以 MIT 授權開源,作者 Thang Pham,2021 年 7 月起維護至今,未歸檔。本文提及的星數、版本與議題編號以 2026 年 10 月查詢為準:7,267 顆星、最新版 v0.25.1(2026-09-09)、Homebrew 與 scoop 都收錄同版本,它依賴的 librespot 同為 MIT 授權。這篇的判斷來自原始碼、官方文件與議題區紀錄,長期播放體驗不在其中。要不要把播放主導權交給一個非官方客戶端,建議把上面三個前提自己評一遍:有 Premium、願意花十分鐘設定自己的 client ID、接受非官方客戶端的模糊地帶,它是終端機裡目前最完整的選擇;三項有一項答不上來,先從官方 App 加系統快捷鍵開始就好。

Sliven 褚崇名
Sliven 褚崇名

每日分享科技新知、免費資源以及 WordPress、虛擬主機相關主題,任何問題歡迎在科技月球下方留言,或是發送 Email 至 [email protected] 與我聯繫。

文章: 1812

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


Share to...