Gamdl:3 条命令把 Apple Music 无损音频与 4K 音乐视频拉到本地
【免费下载链接】gamdlA command-line app for downloading Apple Music songs, music videos and post videos.项目地址: https://gitcode.com/GitHub_Trending/ga/gamdl
Gamdl 是一个 Apple Music 命令行下载工具:订阅期内通过官方 API 接口拿到 ALAC 无损音频、4K H.265 音乐视频等原始编码文件,写入元数据与同步歌词,下载后直接本地播放。
快速认识:不录制、不抓流,从官方接口取原始文件
Gamdl 不做录音、不拦截播放流,文件全部来自官方接口。通信逻辑在 gamdl/api/ 层,用你的 Cookie 调用 Apple Music 的官方接口获取元数据和流媒体信息。
gamdl/interface/ 层负责解析媒体信息并向播放服务申请解密密钥。gamdl/downloader/ 层负责下载、解密与封装,其中解密和 remux 由内置的 Rust 扩展_ammuxer执行,Python 侧处理命令行、下载调度和标签写入。
核心能力一览:
- 歌曲:默认
aac-web(AAC 256kbps、44.1kHz),ALAC 最高 24-bit/192kHz,支持 Dolby Atmos 768kbps - 音乐视频:H.264 最高 1080p,H.265 可达 2160p(4K)
- 上传视频(艺术家发布的 Post 视频):最高 1080p
- 同步歌词:
lrc/srt/ttml三种格式,默认lrc - 元数据:封面、艺术家、专辑、日期等自动写入 MP4 标签
⚡ 三步跑通
第一步:安装
要求 Python 3.10 及以上,一条命令完成:
pip install gamdl成功时没有输出,接着运行gamdl --version应看到版本号 3.9。安装失败就看 pip 的报错输出,多为 Python 版本不满足或网络问题。
第二步:准备鉴权 Cookie
Gamdl 以你的账号身份发起请求,需要一个 Netscape 格式的 Cookie 文件(浏览器导出 Cookie 的标准格式)。在浏览器登录 music.apple.com,用"导出 Cookie"类扩展导出为cookies.txt放在工作目录;文件放在别处时用-c /path/to/cookies.txt指定。
首次运行会在~/.gamdl/config.ini自动生成完整配置文件,之后默认值都可以直接改文件,不用再敲参数。如果账号没有有效订阅,程序会直接提示No active Apple Music subscription found并停止。
第三步:下载第一首歌
复制任意一首歌的链接(URL 末尾的?i=参数用来定位具体曲目),下面这条是官方示例:
gamdl "https://music.apple.com/us/album/never-gonna-give-you-up-2022-remaster/1624945511?i=1624945512"启动时日志显示Starting Gamdl 3.9,完成后显示Finished with 0 error(s),文件落在当前目录的Apple Music/下,按"艺术家/专辑"子目录归档。想排查异常时,加上--log-level DEBUG --log-file ./gamdl.log再跑一次,细节都在 gamdl.log 里。
🧰 按任务做
下载整张专辑,或整个艺术家的作品
专辑直接传专辑 URL 即可:
gamdl "https://music.apple.com/us/album/whenever-you-need-somebody-2022-remaster/1624945511"艺术家页面会弹出交互选择框:方向键移动、空格切换、Ctrl+A 全选、回车确认。不想手动挑就用--artist-auto-select直接指定,可选项包括main-albums(正式专辑)、compilation-albums(合辑)、live-albums(现场)、singles-eps(单曲与迷你专辑)、all-albums、top-songs、music-videos。
切换音质与视频分辨率
歌曲默认aac-web、音乐视频默认 1080p。想要无损,把alac放在优先级首位:
gamdl URL --song-codec-priority "alac,aac-web"注意alac受 API 限制,需要本地运行 Wrapper v2 服务才能正常工作,在配置文件开启use_wrapper = true(wrapper 地址默认http://127.0.0.1,解密端口 10020);不想部署就保持默认的aac-web。
音乐视频里,1440p 和 2160p 只有 H.265 提供:
gamdl URL --music-video-resolution 2160p --music-video-codec-priority h2654K 还要求 Widevine L1 的.wvd或 PlayReady SL3000 的.prd设备文件,用--wvd-path或--prd-path指定。
批量 URL 下载与去重
把 URL 一行一条写进文本文件,用-r全部读入:
gamdl -r urls.txt --database-path ./history.db每个媒体的 ID 会登记进 history.db 这个 SQLite 文件,重复跑同一批任务时,已登记且文件仍在的条目会打印Registered in database并跳过,不产生冗余文件。确需覆盖旧文件时加--overwrite。
自定义目录结构与标签
模板变量可以完全控制目录和文件名,比如按年份归档:
gamdl URL --album-folder-template "{album_artist}/{date:%Y}/{album}" --single-disc-file-template "{track:02d} {title}"{date}这类变量支持 strftime 格式(%Y是四位年份)。不想写入某些标签就在--exclude-tags列出,如comment、genre_id、storefront。封面想单独存成图片,加--save-cover,格式用--cover-format png改(默认 jpg),尺寸用--cover-size控制(默认 1200)。
🚑 排障速查
鉴权报错、提示 Cookie 无效→ Cookie 过期或导出时登录的不是目标账号 → 重新登录网页版并重新导出 cookies.txt,其他环节不用动。
选了 alac 却下载失败→ Wrapper 服务未启动或未启用 → 本地跑起 Wrapper v2 并在配置确认use_wrapper = true;临时不想部署就退回默认aac-web。
设了 2160p 拿到的还是 1080p→ 2160p 只有 H.265 提供,编码器优先级或 DRM 设备档位不达标时会回退 →--music-video-codec-priority把h265放首位,设备文件要求见上一节。
下载速度不理想→ 默认引擎 yt-dlp 只负责文件搬运,瓶颈时可换引擎 →--download-mode nm3u8dlre,并用--nm3u8dlre-path指向 N_m3u8DL-RE 可执行文件(还需要 FFmpeg,不在 PATH 里就用--ffmpeg-path指定)。
报错原因看不出来→ 默认日志级别 INFO 粒度不够 → 加--log-level DEBUG --log-file ./gamdl.log重跑,日志里逐条曲目打印Track x/y进度和跳过原因。
适用边界
这套工具适合两类人:有有效 Apple Music 订阅、想建本地曲库的用户;以及想把它当 Python 库嵌进自己系统的开发者——api / interface / downloader 三层各自独立可调,完整嵌入示例见 README.md。
明确的红线是订阅本身:没有订阅时程序会直接停在订阅检查上;它也只做 Apple Music 的内容,跨平台下载不在范围内。
与同类方案的差异在于取数方式:不少工具是录本地播放流再转码,产物是二次编码文件;Gamdl 直接对接官方接口,拿到的是平台原始编码,依赖里的 yt-dlp 只承担文件传输。
收尾
你拿到的是歌曲的原始编码、完整的元数据与同步歌词,以及一套能一次读完的三层结构。下一步:备好 Cookie 先跑通一条gamdl URL下载,然后顺着 gamdl/cli/cli.py 的调用链,看请求如何走到解密和封装。
【免费下载链接】gamdlA command-line app for downloading Apple Music songs, music videos and post videos.项目地址: https://gitcode.com/GitHub_Trending/ga/gamdl
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考