☰
Gamdl:Apple Music 下载工具指南,一条命令拿下无损音频与 4K 音乐视频
2026/10/21 1:34:11 网站建设 项目流程

Gamdl:Apple Music 下载工具指南,一条命令拿下无损音频与 4K 音乐视频

【免费下载链接】gamdlA command-line app for downloading Apple Music songs, music videos and post videos.项目地址: https://gitcode.com/GitHub_Trending/ga/gamdl

在终端粘贴一条 Apple Music 歌曲 URL,几秒后本地多出一个 24-bit/192kHz 的 ALAC 音频文件,封面、艺术家、同步歌词标签俱全。Gamdl(Glomatico's Apple Music Downloader)就是一款命令行 Apple Music 下载工具,它直接对接官方接口,把歌曲、音乐视频、上传视频以原始编码保存到本地——AAC 256kbps、ALAC 无损、最高 4K H.265 视频,全部原汁原味。

能力全景:一条命令覆盖哪些内容

内容类型支持来源最高质量解决什么问题
歌曲曲库 / 资料库AAC 256kbps、ALAC 24-bit/192kHz、Dolby Atmos 768kbps摆脱订阅期限制,建立永久本地曲库
音乐视频曲库 / 资料库4K(2160p,H.265)收藏 MV、剪辑用高清素材
上传视频平台1080p + AAC 256kbps保存创作者发布的内容
同步歌词随歌曲获取LRC / SRT / TTML离线播放也有滚动歌词
元数据自动抓取封面、艺术家、专辑、日期等全套标签播放器自动识别归类
批量内容专辑 / 播放列表 / 艺术家自动选择一条命令拉全作品

下载完成即是"成品":文件已按目录模板归档、MP4 标签已写入(依赖 mutagen)、封面已嵌入,直接丢进主流播放器就能用,无需二次整理。

技术底座:为什么是这套实现

结论一:逆向官方 API,而非"抓音频流"。很多同类工具拦截播放时的音频流再转码,音质受损且格式混乱。Gamdl 的做法是模拟官方客户端:gamdl/api/apple_music.py 从 Apple Music 首页及其 JS 资源里提取请求 token,再走账号、曲库、媒体解析等官方接口,yt-dlp 只作为文件下载库使用,拿到的始终是平台原生编码文件。

结论二:Rust 解密引擎,速度和稳定性兼得。内置的 Rust 扩展gamdl._ammuxer由 gamdl/downloader/ammuxer/ 构建,用 AES/CTR 等原语处理 Wrapper 的 WV2D TCP 批量解密协议,并负责 MP4/M4A 写入与音视频合流。相比纯 Python 实现,Rust 在大文件解密和高并发下优势明显,且通过 pyo3 无缝嵌入,日常使用几乎感觉不到两层语言的存在。

结论三:三层解耦,可读可改可嵌入。项目按 API(通信)→ Interface(媒体解析与密钥获取)→ Downloader(下载、解密、打标签)三层拆分,对应 gamdl/api/、gamdl/interface/、gamdl/downloader/。新手可以按层逐步阅读,开发者也能直接基于gamdl.api.AppleMusicApi搭建自己的应用。

安装与首次运行

第一步:安装(需 Python 3.10+)

pip install gamdl

第二步:准备 Cookie

浏览器登录 music.apple.com,用导出 Cookie 的扩展把 Cookie 存为 Netscape 格式的cookies.txt,放到当前工作目录;也可用-c指定其他路径。

第三步:跑通第一条命令

gamdl "https://music.apple.com/us/album/song-name/id123456789?i=1234567890"

文件默认写入./Apple Music,按"艺术家/专辑"分层;若链接指向专辑或艺术家,会弹出交互选择框,方向键移动、空格选中、回车确认。

第四步:理解配置文件

首次运行后生成~/.gamdl/config.ini(Windows 为%USERPROFILE%\.gamdl\config.ini),所有 CLI 参数都有对应配置项,命令行参数优先。

[gamdl] output_path = /mnt/music song_codec_priority = aac-web language = en-US

配置策略:按目标选型

追求无损音质:配置 ALAC 与 Dolby Atmos

默认编码是aac-web(AAC 256kbps)。要拿 24-bit/192kHz 的 ALAC,需先跑起 Wrapper v2 解密服务,否则受 API 限制大概率失败:

gamdl URL --song-codec-priority "alac,aac-web"
[gamdl] use_wrapper = true wrapper_url = http://127.0.0.1 wrapper_decrypt_port = 10020 song_codec_priority = alac,aac-web

把atmos加入优先级列表,可让支持 Dolby Atmos 的曲目自动下载空间音频版本。权衡:多维护一个本地 wrapper 服务,换回的是无损与空间音频的完整度。

获取 4K 视频素材:H.265 与 DRM 设备缺一不可

H.264 最高只到 1080p,想要 1440p/2160p 必须用 H.265:

gamdl URL --music-video-resolution 2160p --music-video-codec-priority h265 --music-video-remux-format m4v

4K 流还要求 DRM 等级足够的设备:Widevine L1 的.wvd(--wvd-path)或 PlayReady SL3K 的.prd(--prd-path),否则拿不到 4K。权衡:设备文件来源与合规性需要自行确认。

批量拉取艺术家全集:自动选择与去重

gamdl URL --artist-auto-select "main-albums,singles-eps,top-songs" --database-path "./history.db"

main-albums(正式专辑)、compilation-albums(合辑)、live-albums(现场)、singles-eps(单曲/EP)、music-videos等可组合。配合--database-path的 SQLite 去重,重复运行不产生冗余文件,适合定时任务。权衡:全自动意味着选择权交给脚本,建议先用一次手动选择校准范围。

自定义文件命名与标签

gamdl URL --album-folder-template "{album_artist}/{date:%Y}/{album}" --single-disc-file-template "{track:02d} {title}" --exclude-tags "comment,storefront" --save-cover --cover-format png --cover-size 2000

模板变量与可排除标签的完整清单见 README.md。权衡:自定义越细,维护成本越高,建议先固定一套模板再动它。

排障与性能:6 个高频问题

症状:命令提示登录态/订阅失效。最可能原因:Cookie 过期。修复:重新登录网页版并导出新的cookies.txt,这是最常被忽略的一步。

症状:选alac却下载失败或回退 AAC。最可能原因:ALAC 受 API 限制必须配合 Wrapper v2。修复:本地启动 wrapper 并在配置中开启use_wrapper = true;不想折腾就退回aac-web。

症状:设了 2160p 却仍是 1080p。最可能原因:music_video_codec_priority只写了h264。修复:把h265放进优先级列表,并确认 DRM 设备等级支持 4K 流。

症状:同步歌词在播放器里不显示。最可能原因:格式兼容差。修复:lrc兼容性最广,srt时间轴更精确,ttml是 Apple 原生格式、多数播放器不支持,建议默认lrc。

症状:下载速度不理想(性能调优)。最可能原因:默认 yt-dlp 引擎瓶颈。修复:换 N_m3u8DL-RE 引擎,需另装该工具与 FFmpeg:

gamdl URL --download-mode nm3u8dlre --nm3u8dlre-path "/path/to/N_m3u8DL-RE"

症状:单个文件失败导致整批中断。最可能原因:异常默认上抛。修复:加--no-exceptions让失败不中断,配合--log-level DEBUG --log-file ./gamdl.log事后定位。

典型工作流

NAS 无损库维护。输入是 Cookie 文件加艺术家 URL,输出是 NAS 上按"艺术家/专辑"组织的目录树,每首歌带完整标签、嵌入封面与 lrc 同步歌词。固定--song-codec-priority "alac,aac-web"加--database-path去重,整条链路可无人值守,新增专辑只补增量。

短视频 4K 素材采集。输入是 MV 链接清单,输出是 H.265 的 4K 素材文件。固定--music-video-resolution 2160p --music-video-codec-priority h265,H.265 的码率优势让素材在不牺牲画质的前提下更省空间,配合--database-path避免重复采集同一支 MV。

嵌入内部系统。把 gamdl 当 Python 库用,核心链路只有十来行:

import asyncio from gamdl.api import AppleMusicApi from gamdl.interface import AppleMusicBaseInterface, AppleMusicInterface from gamdl.downloader import AppleMusicDownloader async def main(): api = await AppleMusicApi.create_from_netscape_cookies("cookies.txt") base = await AppleMusicBaseInterface.create(apple_music_api=api) interface = AppleMusicInterface.create(base) downloader = AppleMusicDownloader(interface=interface) async for item in downloader.get_download_item_from_url(url): await downloader.download(item) asyncio.run(main())

get_download_item_from_url是异步生成器,天然适配批量任务;完整可运行版本见 README.md 的 Embedding 章节。

学习路径与社区

先跑通一次下载,感受从 URL 到"成品文件"的完整产物形态。读源码的推荐入口是命令行层 gamdl/cli/cli.py,再顺着 api → interface → downloader 三层的调用链理解"请求 → 解析 → 解密 → 封装"的全流程;gamdl/downloader/ammuxer/ 的 Rust 引擎与 gamdl/interface/ 的密钥/解密逻辑是进阶突破口。社区目前只接受关键 bug 修复,功能建议走 issue,参与方向集中在稳定性与错误处理。

git clone https://gitcode.com/GitHub_Trending/ga/gamdl pip install -e .

从命令行使用者到读懂解密管线,这条路径本身就是理解流媒体 DRM 架构的完整入口。

【免费下载链接】gamdlA command-line app for downloading Apple Music songs, music videos and post videos.项目地址: https://gitcode.com/GitHub_Trending/ga/gamdl

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询