LiTmall:Java全栈电商系统的架构解密与实战应用
如何用 Gamdl 一键下载 Apple Music 无损音频与 4K 音乐视频:完整实战指南
您是否遇到过这样的时刻:歌单里某首老歌突然从 Apple Music 下架,专辑封面变成灰色,本地收藏无处安放?或者在户外直播、视频剪辑时,急需一段版权清晰的高质量音乐素材,却只能靠录屏软件"降级"保存?
Gamdl(Glomatico's Apple Music Downloader)就是为解决这个问题而生的命令行下载工具。它面向拥有 Apple Music 订阅的用户,可以把歌曲、音乐视频和上传视频直接保存到本地,最高支持 ALAC 无损音频(24-bit/192kHz)与 4K H.265 音乐视频。本文将从零开始,带您完成安装、配置、下载的完整流程,并深入讲解高级玩法。
为什么需要专门写一个下载器?
先看一个真实场景。您喜欢的一位歌手发布了新专辑,您第一时间加入资料库。三个月后,因版权到期,这张专辑在流媒体平台下架。如果您只依赖在线播放,一切就此消失;如果您有 Gamdl,专辑早已以无损格式安静地躺在您的 NAS 里。
这不是简单的"抓取音频"。Gamdl 直接与 Apple Music 官方 API 交互,能拿到带 DRM 加密的原始媒体流,再通过 Widevine 方案解密、修复并封装成标准文件。通俗地说:它把 Apple Music 里"只能听不能存"的内容,变成您自己完全掌控的文件,同时保留专辑封面、歌词、歌手信息等全部元数据。
三分钟完成安装,下载第一首歌
环境准备清单
开始之前,请确认三件事:
- Python 3.10 或更高版本(在终端执行
python --version即可查看) - 有效的 Apple Music 订阅(这是合法使用的前提)
- Netscape 格式的 Cookie 文件:登录 music.apple.com 后,用浏览器插件把 Cookie 导出为
cookies.txt
说明:Gamdl 仅服务于订阅用户,下载内容请仅供个人使用,勿用于商业传播。
安装与第一次下载
# 安装 Gamdl
pip install gamdl
将导出的 cookies.txt 放在当前工作目录,然后执行:
# 下载单首歌曲(以专辑内单曲链接为例)
gamdl "https://music.apple.com/us/album/never-gonna-give-you-up-2022-remaster/1624945511?i=1624945512"
就这么简单。默认情况下,文件会保存到当前目录的 Apple Music 文件夹,自动按"歌手/专辑"的目录结构整理,歌曲以 AAC 256kbps 编码嵌入封面与歌词标签。您已经完成了第一次成功的本地收藏 🎵
如果想下载整个专辑,去掉链接末尾的 ?i=xxxx 参数即可;把链接换成艺术家主页 URL,还能一键抓取该歌手的全部作品。下载前程序会弹出交互式选择框,支持方向键移动、空格多选、Ctrl+A 全选。
核心能力深挖:从 AAC 到无损的完整音质阶梯
Gamdl 最值得称道的是对音质选项的精细控制。默认下载 AAC 256kbps,但对发烧友而言,真正的宝藏是下面的配置:
# 优先无损,失败自动降级
gamdl URL --song-codec-priority "alac,aac,aac-web"
# 下载 Dolby Atmos 空间音频
gamdl URL --song-codec-priority "atmos,alac,aac"
支持的全部音频编码包括:aac-web(256kbps)、aac-he、alac(最高 24-bit/192kHz 无损)、atmos(Dolby Atmos 768kbps)、ac3 等十余种。视频方面同样强大:
# 下载 4K H.265 音乐视频
gamdl URL --music-video-resolution 2160p --music-video-codec-priority h265
H.264 最高支持 1080p,而 H.265 编码可以上到 1440p 和 2160p,在相同码率下体积更小、画质更好,适合需要高清素材的创作者。
歌词与元数据是另一个加分项:同步歌词支持 LRC、SRT、TTML 三种格式(SRT 时间轴更精确),专辑封面可以单独导出为 PNG 大图,所有标签(歌手、专辑、年份、曲目号等)自动写入文件。
对比:Gamdl 与三种常见替代方案的差异
为了看清它的价值,我们把它与主流的"本地保存"手段做个对比:
| 方案 | 音质 | 元数据 | 批量能力 | 操作难度 | 局限 |
|---|---|---|---|---|---|
| 系统录音/录屏 | 有损、受环境干扰 | 无 | 无 | 低 | 要实时播放一遍,音质差 |
| 在线音乐下载网站 | 参差不齐 | 大多缺失 | 弱 | 中 | 安全性存疑、常失效 |
| 同类命令行下载器 | 部分支持 | 部分支持 | 一般 | 高 | 多为单格式、维护停滞 |
| Gamdl | 无损级,官方源 | 完整 | 强(专辑/歌手/歌单) | 中 | 需要订阅与 Cookie |
结论很清晰:录音牺牲音质,在线工具牺牲安全与完整性,Gamdl 在音质、元数据、批量三方面同时达标,代价仅是命令行带来的少量学习成本。
进阶配置:让下载流程自动化
配置文件代替重复参数
首次运行后,配置文件会自动生成(Linux 位于 ~/.gamdl/config.ini)。把常用参数写进去,之后只需输入 URL:
[gamdl]
output_path = /path/to/your/music
song_codec_priority = alac,aac,aac-web
music_video_resolution = 2160p
language = zh-CN
concurrent_downloads = 3
命令行参数优先级高于配置文件,两者可以灵活混用。
定制文件命名与目录
默认目录结构是"专辑歌手/专辑",您可以完全自定义:
# 按年份归档
gamdl URL --album-folder-template "{album_artist}/{date:%Y}/{album}"
# 多碟专辑的文件名带碟号
gamdl URL --multi-disc-file-template "{disc}-{track:02d} {title}"
模板变量非常丰富:album、artist、date、track、disc 等一应俱全,还支持 strftime 日期格式,满足强迫症式的整理需求。
加速下载引擎
Gamdl 默认使用 yt-dlp 作为下载库(注意:它只负责传输,媒体仍来自 Apple Music 官方服务器)。想要更快的速度,可以切换到 N_m3u8DL-RE 引擎:
gamdl URL --download-mode nm3u8dlre --nm3u8dlre-path "/path/to/N_m3u8DL-RE"
批量与去重
# 从文本文件批量读取链接
gamdl --read-urls-as-txt urls.txt
# 启用数据库,避免重复下载
gamdl URL --database-path "./downloads.db"
# 出错也不中断,继续处理后续链接
gamdl URL --no-exceptions --log-level DEBUG --log-file "./gamdl.log"
避坑指南:五个常见问题与解决方案
1. 报错提示订阅无效或无法获取媒体信息? Cookie 过期是最常见原因。重新登录 music.apple.com 并导出新的 cookies.txt 即可;也可以使用 --cookies-path 指定其他位置的 Cookie 文件。
2. ALAC 无损下载失败? 这是预期内的行为:ALAC 受 API 限制,通常需要配合 Wrapper v2 服务器使用(--use-wrapper 开启),它负责账号、播放与解密请求。AAC 等编码则完全不需要 Wrapper,多数用户无需配置。
3. 下载 4K 视频没有 2160p 选项? 4K 仅 H.265 编码支持,且受原始内容清晰度限制。请确认代码优先级包含 h265,并检查该视频本身是否有 4K 源。
4. 文件名过长或包含非法字符? 使用 --truncate 限制文件名长度;Windows 用户建议同时调整命名模板,避免冒号、问号等字符引发错误。
5. 想跳过同步歌词或只下载歌词? --no-synced-lyrics 关闭歌词,--synced-lyrics-only 则只保存歌词文件。配合 --exclude-tags "comment,genre_id,storefront" 可精简标签。
作为开发者:把 Gamdl 嵌入您的项目
Gamdl 的三层架构(api → interface → downloader)非常适合二次开发。它提供了一整套异步 Python API,可以在自己的应用中复用下载能力:
import asyncio
from gamdl.api import AppleMusicApi
from gamdl.interface import AppleMusicInterface
from gamdl.downloader import AppleMusicDownloader
async def main():
api = await AppleMusicApi.create_from_netscape_cookies("cookies.txt")
if not api.active_subscription:
print("无有效订阅"); return
interface = await AppleMusicInterface.create(apple_music_api=api)
downloader = AppleMusicDownloader(interface=interface)
async for item in downloader.get_download_item_from_url("YOUR_URL"):
await downloader.download(item)
asyncio.run(main())
借助 pyproject.toml 中的依赖清单可以看到,项目基于 httpx、mutagen、pywidevine、yt-dlp 等成熟库构建,还包含一个 Rust 编写的原生媒体引擎(ammuxer)负责 MP4 封装与解密重组——对想学习异步编程、DRM 处理或 Rust-Python 混编的开发者来说,本身就是一份优质教材。
下一步行动建议
如果您是音质党,先从一首歌开始,体验 ALAC 与流媒体的差距;如果是视频创作者,试着用 --music-video-resolution 2160p 拉一部 4K MV 作为素材;如果只是想要一个安心的本地曲库,配置好 song_codec_priority 和 output_path,把整个歌单交给它。
最后提醒:项目采用 MIT 开源协议,作者目前主要接受关键 bug 修复的贡献,功能类建议可以通过 issue 提出。动手之前,请确认您的 Apple Music 订阅有效,并妥善保管 Cookie 文件——它等同于您的账户凭证。现在,去建立属于您自己的音乐档案馆吧 🚀
更多推荐



所有评论(0)