Gamdl 完整指南:3 步搞定 Apple Music 无损下载
【免费下载链接】gamdlA command-line app for downloading Apple Music songs, music videos and post videos.项目地址: https://gitcode.com/GitHub_Trending/ga/gamdl
Gamdl(Glomatico's Apple Music Downloader)是一个命令行工具,专门从 Apple Music 下载歌曲、MV 和用户视频;配合 Wrapper 使用,还能拿到官方网页端给不了的 ALAC 无损音源。如果你正在为「订阅了会员却没法把歌存下来」发愁,这篇指南值得存一下。
先看痛点:为什么官方客户端不够用
日常使用 Apple Music,很多人会撞到三堵墙:
- 只能在线听。离线播放受设备与授权限制,想备份成自己的文件库基本没戏;
- 网页端音质是阉割版。浏览器里能拿到的多为 44.1kHz 的有损流,想要 24-bit/192kHz 的 ALAC,普通 API 根本不下发;
- 文件不可控。官方客户端不让你导出,想打标签、重命名、归档到自己的音乐库,无从下手。
Gamdl 的思路很直接:把「拿元数据、拉流媒体、解 DRM、写文件、打标签」整条链路在本地跑通,产物就是你硬盘上一个个带完整标签的音频文件。
原理速览:它是怎么做到的
整个工程分四层,职责清晰:
| 模块 | 职责 |
|---|---|
| gamdl/api/ | 与 Apple 服务器通信,含 wrapper.py 对 Wrapper 服务的调用 |
| gamdl/interface/ | 定义数据模型与枚举,enums.py 里注册了全部可用编解码器 |
| gamdl/downloader/ | 下载、解密与封装的具体实现 |
| gamdl/cli/ | 命令入口、交互式选择与配置管理 |
几个关键机制值得展开:
双通道身份验证。要么用浏览器插件把 Apple Music 的登录 Cookie 导出成 Netscape 格式的cookies.txt;要么接入 Wrapper v2 本地服务,用它代你登录、持有会话、发起播放请求——后者还能免 Cookie。
ALAC 无损源。编解码器枚举中,alac对应最高 24-bit/192kHz 的无损编码。注意:非网页流(alac、atmos、aac等)都带 CENC 加密,而官方文档明确写着,不挂 Wrapper 硬试alac「大概率失败」。
原生 Rust 引擎。gamdl 会把 gamdl/downloader/ammuxer/ 下的 Rust 代码编译成gamdl._ammuxer扩展,FairPlay 解密、分片重组、MP4/M4A 写入合流全在原生层完成,Python 只负责上层调度。一个细节:ALAC 的采样块大小是 4096,AAC 是 1024,Rust 源码里能看到这个分支判断。
4K MV 的门槛。想下 2160p 的 MV,必须提供 Widevine L1 的.wvd设备文件或 PlayReady SL3000 的.prd文件,没有设备文件就没有 4K。
3 步跑通:从安装到第一首歌
第 1 步:安装(需 Python 3.10+)
pip install gamdl第 2 步:准备身份。登录 Apple Music 网页后,用浏览器插件(Firefox 的 Export Cookies、Chromium 的 Get cookies.txt LOCALLY)导出 Netscape 格式 Cookie,存为cookies.txt。
第 3 步:下载
gamdl -c ./cookies.txt "https://music.apple.com/cn/album/…(你的专辑链接)"跑完后,./Apple Music目录下就是带封面、ID3 标签和 lrc 歌词的文件。它支持歌曲、专辑、歌单、艺人、MV、Apple Music Classical 等多种链接,艺人链接会进入交互式选择界面(方向键移动、空格勾选、Ctrl+A 全选)。
Wrapper 接入:无损下载的关键一步 🔑
想稳定下 ALAC,就需要本机跑一个 [Wrapper v2] 服务(作者的另一项目,负责登录、播放与解密)。启动后,给 gamdl 加上这几个参数:
gamdl --use-wrapper \ --wrapper-url http://127.0.0.1:8080 \ --wrapper-decrypt-port 10020 \ --song-codec-priority alac,aac \ "https://music.apple.com/cn/album/…"它内部走两条通道:HTTP JSON 通道处理账号与播放请求,WV2D 批量 TCP 通道(默认 10020 端口)负责解密。这些参数确认无误后,建议直接写进配置文件一劳永逸:
- Linux:
~/.gamdl/config.ini - Windows:
%USERPROFILE%\.gamdl\config.ini
首次运行会自动生成,命令行参数优先级高于配置文件。开了 Wrapper 之后 Cookie 可以整个跳过;若 Wrapper 未登录,它会提示你输入账号密码,支持 2FA。
进阶玩法:模板化目录与批量下载
自定义目录与文件名。默认专辑目录是{album_artist}/{album},单碟文件名是{track:02d} {title},想改成按年份归档:
gamdl --album-folder-template "{album_artist}/{album}/{date:%Y}" \ --single-disc-file-template "{disc}-{track:02d} {title}" \ "https://music.apple.com/cn/album/…"模板变量还有artist、composer、genre、playlist_title等一整套,date支持 strftime 语法。
艺人整批抓取。不想逐张勾选手选,给艺人链接加一个自动选择参数即可:
gamdl --artist-auto-select all-albums "https://music.apple.com/cn/artist/…"可选值包括top-songs(热门)、music-videos、singles-eps、live-albums等。
提速与附加项。大文件下载可切换--download-mode nm3u8dlre走 N_m3u8DL-RE 引擎(需另装该工具并配好--ffmpeg-path;默认的 yt-dlp 只是下载引擎,并非媒体来源);--save-playlist能额外导出 M3U8 歌单文件;--language ja-JP切换元数据语言。
避坑清单 ⚠️
alac报解密/播放错误:九成是没挂 Wrapper,或 Wrapper 版本与 gamdl 不匹配——gamdl 会严格校验 Wrapper 的 API 版本,版本不符直接抛错,先升级 Wrapper 再谈别的。- 下载的不是无损:检查
--song-codec-priority是否把alac放在第一位;aac-web是 44.1kHz 的网页流,48kHz 及以上要选非-web的编码器。 - 歌词打不开:
ttml是 Apple 原生格式,多数播放器不认,建议lrc或srt(时序更准)。 - 4K MV 解码失败:缺
.wvd/.prd设备文件,按上文 DRM 要求补齐。 - 合规提醒:工具只是把账号内合法可听的内容另存一份,请仅用于个人用途,尊重版权。
- 想提功能 PR?作者只接收关键 bug 修复,功能类 PR 暂不合并,有需求提 Issue 即可。
写在最后
一句话总结:Gamdl 把「登录、拉流、解 DRM、封装、打标签」全链路搬到了你的命令行,再叠上 Wrapper,ALAC 无损不再是网页端的奢侈品。适合人群很明确——订阅了 Apple Music、想要本地无损文件库的音频发烧友,以及需要批量管理音源的开发者(它同样是一个可直接 import 的 Python 库)。
【免费下载链接】gamdlA command-line app for downloading Apple Music songs, music videos and post videos.项目地址: https://gitcode.com/GitHub_Trending/ga/gamdl
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考