3 步搞定 Apple Music 下载:Gamdl 集成 Wrapper 实现 24bit ALAC 无损下载
【免费下载链接】gamdlA command-line app for downloading Apple Music songs, music videos and post videos.项目地址: https://gitcode.com/GitHub_Trending/ga/gamdl
你有没有遇到过这种情况:订阅了 Apple Music 的无损音质,却发现自己没法把 24bit 的 ALAC 存进本地音乐库?普通接口只能拿到 AAC 有损流,无损通道被 API 死死挡在门外。今天这套组合拳——Gamdl(Glomatico's Apple Music Downloader)+ Wrapper 中间层,就是来拆这道墙的:一条命令行跑通 Apple Music 无损音乐下载教程,让 ALAC 无损下载变成复制粘贴的事。
一张表看懂:谁负责认证,谁负责下载,谁负责解密
Gamdl 是命令行工具,源码按职责切成四层,各司其职:
- API 层(
gamdl/api/):对接 Apple Music 服务,支持 cookies 直连和 Wrapper 两条通路,封装了AppleMusicApi与WrapperApi - 接口层(
gamdl/interface/):定义媒体类型与编解码器枚举,gamdl/interface/enums.py里的SongCodec.ALAC就代表了最高 24-bit/192kHz 的无损档位 - 下载器层(
gamdl/downloader/):真正的下载、解密、封装都在这,Rust 扩展ammuxer负责 Wrapper 的 TCP 解密重组和 MP4/M4A 写盘 - CLI 层(
gamdl/cli/):命令行参数、交互选择器、配置文件管理
而 Wrapper 是一个独立运行的服务端,替 Gamdl 干了三件脏活:
| 职责 | Wrapper | Gamdl |
|---|---|---|
| 账户认证与令牌管理(登录、2FA、刷新) | ✅ 全权代办 | 只发指令 |
| 模拟合法播放会话,换流媒体地址 | ✅ 持有会话 | 拿到结果直接下载 |
| FairPlay DRM 解密(WV2D 批量 TCP 通道) | ✅ 出密钥 | 重组明文写文件 |
| 文件下载、元数据打标签、目录编排 | 不参与 | ✅ 全部包办 |
一句话:Wrapper 管"资格",Gamdl 管"搬运"。
快速上手:3 步跑通第一张无损专辑
📦第 1 步:安装 Gamdl
pip install gamdl🔑第 2 步:把 Wrapper-v2 服务端跑起来
在本地(或内网机器)启动 Wrapper-v2,默认 HTTP 控制端在127.0.0.1,批量解密的 TCP 通道默认端口是10020。首次使用会提示输入 Apple 账户凭据,完成登录和可能的 2FA 验证。
🎯第 3 步:指定 ALAC 优先级,开下
gamdl --use-wrapper \ --wrapper-url http://127.0.0.1 \ --song-codec-priority alac,aac-web \ "https://music.apple.com/album/你的专辑"--song-codec-priority alac,aac-web的意思是:优先拿 ALAC,个别曲目没有无损版时自动回落到 AAC 256kbps,不会中断。注意alac属于 non-web 编解码器,不接 Wrapper 硬试几乎必然失败,官方文档里也明确建议 Wrapper 模式下使用它。
跑一次后,~/.gamdl/config.ini(Windows 为%USERPROFILE%\.gamdl\config.ini)会自动生成,之后常用参数都写进去,命令行就不用重复敲了:
[gamdl] use_wrapper = true wrapper_url = http://127.0.0.1 wrapper_decrypt_host = 127.0.0.1 wrapper_decrypt_port = 10020 song_codec_priority = alac,aac-web music_video_resolution = 1080p这就是完整的 gamdl wrapper 配置:命令行参数会覆盖配置文件里的同名字段,所以临时实验可以直接用参数,稳定后落盘。
原理速览:为什么 ALAC 是"难下"的那种难
先把概念说清:ALAC(Apple Lossless Audio Codec)是无损压缩——听感与母带完全一致,体积约为 FLAC 级别,上限 24-bit/192kHz;而 AAC 256kbps 这类有损格式在编码时就丢掉了信息,省空间但不可逆。
难下的原因有三个:
- API 分层限制:Apple 的网页流只保证 web 档位(
aac-web等)。无损档位属于"需要更高级别会话才能申请"的资源,直接用 cookies 请求非 web 编解码器,大概率被拒——这就是开头那道墙。 - FairPlay DRM 加密:流本身是密文,密钥随会话下发。Wrapper 模拟的是客户端合法播放会话,拿到密钥后再走 WV2D 批量 TCP 协议把密文交回 Wrapper 换明文。
- 封装细节:解密重组时要按每首曲子的 subsample 结构逐段替换明文,ALAC 的音频帧结构(帧头声明的块大小,典型为 4096 采样)与 AAC(典型 1024)不同,参数用错就会出现爆音。这套重组逻辑被写进了
gamdl/downloader/ammuxer这个 Rust 扩展里,用批处理过 TCP,比逐包解密快得多。
进阶玩法:整批艺术家、自定义命名、多语言元数据
批量下载:把艺术家主页 URL 丢给--artist-auto-select,可以按类别自动圈定范围:
gamdl --artist-auto-select all-albums "艺术家主页URL"all-albums是全部专辑,top-songs则是热门单曲,另有main-albums、singles-eps、music-videos等选项。
自定义目录与文件命名:用模板变量控制落盘结构,比如想按"艺人/专辑(年份)/盘-轨 曲目"组织库:
--album-folder-template "{album_artist}/{album} ({date:%Y})"加--single-disc-file-template "{disc}-{track:02d} {title}"。支持{album}、{album_artist}、{date}、{track}等变量,{date}还能套 strftime 格式,多张专辑入库后目录不会乱。
多语言元数据:日区专辑想打日文标签,加--language ja-JP;en-US、es-ES、pt-BR都走 ISO 639-1 代码。顺带一提,--synced-lyrics-format支持lrc/srt/ttml,无损音乐配逐字歌词一步到位。
更快更稳:大库下载的四板斧
- 换更快的下载引擎:默认用 yt-dlp 做文件传输,可切
--download-mode nm3u8dlre并配--nm3u8dlre-path(它还需要 FFmpeg,不在 PATH 里就用--ffmpeg-path指路)。高码率无损专辑体积大,换引擎收益明显。 - 异步并发控制:Gamdl 的下载链路是 asyncio 异步的,用库方式批量跑时(
gamdl.downloader提供AppleMusicDownloader等入口),用asyncio.Semaphore卡住并发数即可,既不吃满带宽也不把本地写盘打爆。 - 元数据缓存:专辑目录、曲目列表这些请求重复率高,把
get_media_info之类的结果按 URL 做一层本地缓存(SQLite 或 LRU 都行),重跑任务时能省掉大量无效请求。 - 失败重试:网络抖动、会话过期都是偶发错误,套一层指数退避的重试(失败 3 次放弃并记日志)比整批中断体验好得多;配合
--database-path记录的已下载清单,补下失败曲目而不是全量重跑。
选哪条路:Wrapper 模式 vs cookies 直连
| 维度 | cookies 直连(默认) | Wrapper 模式 |
|---|---|---|
| 部署成本 | 浏览器导出一个 cookies.txt 就行 | 多跑一个服务端 |
| 可用编解码器 | 基本限 web 档位(aac-web 等) | 全量,含alac、atmos、ac3 |
| 24bit 无损下载 | ❌ 基本走不通 | ✅ 推荐路线 |
| 4K 音乐视频 | 需自备 Widevine L1.wvd或 PlayReady SL3K.prd | 可用,且能多拿一部分元数据 |
| 适合谁 | 只下 AAC 256kbps、图省事 | 认真建无损库、要 Atmos/ALAC 的重度用户 |
结论不绕弯:要 24bit 无损,就上 Wrapper;只想要 256kbps AAC,cookies 直连足够,少维护一个服务。
收尾
Gamdl 把 Apple Music 下载做成了四层清晰的模块化工程,Wrapper 补齐了认证、会话与 FairPlay 解密三块短板,--song-codec-priority alac,aac-web一行参数就把 24bit 无损拉进你的本地库——剩下的只是带宽和时间的问题。
最后啰嗦一句合规:这套工具只应用来获取你自己订阅、自己有权访问的内容,下载的音乐请留在个人使用范围内,尊重创作者与版权方的权益。遇到问题,可以去项目的 Discord 社区找开发者和其他老玩家,回复效率相当高。
【免费下载链接】gamdlA command-line app for downloading Apple Music songs, music videos and post videos.项目地址: https://gitcode.com/GitHub_Trending/ga/gamdl
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考