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
gamdl是一款基于 Python 的开源命令行工具,用于从 Apple Music 下载歌曲、音乐视频和上传视频。它直接对接 Apple Music 官方 API,可获取 ALAC 24-bit/192kHz 无损音频与最高 2160p(4K)视频,并在下载后自动完成解密与元数据标签写入。本文作为一份 gamdl 教程,覆盖安装、首次运行、进阶配置与常见问题处理。
一句话看懂 gamdl
gamdl 的定位是“Apple Music 到本地文件”的转换管道:您把一条 music.apple.com 链接交给它,它还您带完整标签的本地音视频文件。
- 音频覆盖 AAC 256kbps 到 ALAC 24-bit/192kHz,含 Dolby Atmos 768kbps
- 音乐视频支持 H.264/H.265,分辨率从 240p 到 2160p,默认 1080p
- 自动嵌入封面、元数据标签,并可导出 LRC/SRT/TTML 三种同步歌词
- 支持单曲、专辑、播放列表、艺术家、上传视频等七类 URL,并兼容 Apple Music Classical
- 提供 Python API,可作为库集成进您自己的工具
功能与规格总览
| 功能类别 | 支持范围 | 质量/规格 | 附加能力 |
|---|---|---|---|
| 歌曲 | AAC、AAC-HE、ALAC、Atmos、AC3 | AAC 256kbps 44.1kHz;ALAC 最高 24-bit/192kHz;Atmos 768kbps | 同步歌词(lrc/srt/ttml,默认 lrc)、元数据标签、--save-cover独立封面 |
| 音乐视频 | H.264、H.265 | 240p–1080p(H.264),1440p/2160p 仅限 H.265 | m4v/mp4 重封装、4K 需 Widevine L1.wvd或 PlayReady.prd设备 |
| 上传视频 | Apple Music 上传视频 | best(最高 1080p,AAC 256kbps) | 交互式质量选择(ask) |
| URL 类型 | 歌曲/专辑/播放列表/艺术家/音乐视频/上传视频(Catalog 与 Library)、Apple Music Classical | — | 艺术家内容交互选择或--artist-auto-select自动选择 |
| 下载与组织 | 默认ytdlp模式,可切换nm3u8dlre | — | 文件夹/文件名模板、--read-urls-as-txt批量、SQLite 数据库去重 |
快速上手:从安装到第一次运行
前置条件
- Python 3.10 或更高版本
- 有效的 Apple Music 订阅
- Netscape 格式的浏览器 Cookie 文件:登录 music.apple.com 后,用 Firefox 的 Export Cookies 或 Chromium 的 Get cookies.txt LOCALLY 扩展导出
- 可选:Wrapper v2 服务器(
alac编解码器实际可用所依赖)、N_m3u8DL-RE 与 FFmpeg(切换下载引擎时需要)
安装
pip install gamdl首次运行时,gamdl 会自动在~/.gamdl/config.ini(Windows 为%USERPROFILE%\.gamdl\config.ini)生成默认配置文件,命令行参数优先于配置值。
首次运行
# 下载单曲,Cookie 文件默认读取工作目录下的 cookies.txt gamdl "https://music.apple.com/us/album/never-gonna-give-you-up-2022-remaster/1624945511?i=1624945512" # 下载整张专辑,文件输出到 ./Music 目录 gamdl "https://music.apple.com/us/album/whenever-you-need-somebody-2022-remaster/1624945511" -o "./Music" # 下载艺术家页面,进入交互选择(方向键移动、空格勾选、Ctrl+A 全选、回车确认) gamdl "https://music.apple.com/us/artist/rick-astley/669771"实战场景:谁在用它、解决什么
无损党:把整张专辑搬进本地曲库
将--song-codec-priority设为alac并启用 Wrapper v2,即可下载 ALAC 格式。结合默认的--save-cover之外的自动标签嵌入,专辑文件在foobar2000、VLC 等播放器中可直接显示封面与曲目信息。
视频创作者:提取高质量 MV 参考素材
把--music-video-resolution设为1080p或更高,--music-video-codec-priority设为h265以压缩体积。注意 2160p 仅限 H.265 编码,且需要 Widevine L1 的.wvd或 PlayReady SL3K 的.prd设备文件,默认 1080p 无需额外设备。
批量管理者:一次归档一位艺术家
直接传入艺术家 URL,配合--artist-auto-select main-albums跳过交互步骤,只下载正式专辑。再配合--database-path指向的 SQLite 文件记录已下载媒体,重复运行不会二次下载。
开发者:作为 Python 库集成
gamdl/api/ 提供AppleMusicApi,可基于 Netscape Cookie 创建实例并检查active_subscription属性;gamdl/downloader/ 提供AppleMusicDownloader及按媒体类型拆分的下载器,便于在自己的自动化流程中调用:
api = await AppleMusicApi.create_from_netscape_cookies(cookies_path="cookies.txt") if not api.active_subscription: print("No active Apple Music subscription") return进阶玩法:个性化配置与调优
音质与格式优先级 🎚
--song-codec-priority接受逗号分隔的优先级列表,gamdl 按顺序尝试可用的编解码。
| 参数名 | 作用 | 示例值 |
|---|---|---|
song_codec_priority | 歌曲编解码优先级(默认aac-web) | alac,aac,aac-web |
music_video_resolution | 音乐视频最高分辨率(默认1080p) | 2160p |
music_video_codec_priority | 视频编解码优先级(默认h264,h265) | h265 |
synced_lyrics_format | 同步歌词格式(默认lrc) | srt |
文件组织与命名
默认输出到./Apple Music,目录结构由模板控制,模板变量包括album、album_artist、artist、title、track、date(支持 strftime,如{date:%Y})等。
| 参数名 | 作用 | 默认值 |
|---|---|---|
album_folder_template | 专辑文件夹命名 | {album_artist}/{album} |
single_disc_file_template | 单碟曲目文件名 | {track:02d} {title} |
exclude_tags | 排除的元数据标签 | 空 |
cover_size | 封面边长(像素) | 1200 |
gamdl URL --album-folder-template "{album_artist}/{date:%Y}/{album}" --exclude-tags "comment,storefront"批量处理与去重
| 参数名 | 作用 | 示例值 |
|---|---|---|
read_urls_as_txt | 从文本文件逐行读取 URL | urls.txt |
database_path | SQLite 数据库路径,记录已下载媒体并跳过重复 | ./downloads.db |
overwrite | 覆盖已存在的文件 | true |
save_playlist | 额外保存 M3U8 播放列表文件 | true |
幕后揭秘:架构设计与扩展生态
分层设计
- gamdl/api/:API 层。封装 Apple Music 服务器通信,负责 Cookie/Wrapper 认证、订阅状态检查与目录数据获取
- gamdl/interface/:接口层。解析媒体流信息,按编解码优先级选择可用格式,处理 DRM 密钥获取
- gamdl/downloader/:下载层。执行文件下载、解密重组、封装与元数据写入,按歌曲/音乐视频/上传视频拆分子类
- gamdl/cli/:命令行层。基于 click 与 dataclass-click 组装参数,加载
config.ini,管理日志与数据库去重
此外,项目内置一个 Rust 原生扩展(gamdl/downloader/ammuxer,构建产物为gamdl._ammuxer),负责 Wrapper 的 TCP 解密重组与 MP4/M4A 写入封装;CLI、下载编排与标签处理仍由 Python 承担。
外部依赖
- yt-dlp:默认下载引擎,仅作为文件下载库使用,媒体流本身直接来自 Apple Music 服务器
- N_m3u8DL-RE:可选的高速替代引擎,通过
--download-mode nm3u8dlre启用,可不在 PATH 时用--nm3u8dlre-path指定位置 - FFmpeg:音视频重封装所需,N_m3u8DL-RE 模式依赖它,可用
--ffmpeg-path指定位置 - Wrapper v2:独立服务器,承担账号登录、播放会话与批量解密;新版构建使用 HTTP JSON 接口与 TCP 端口
10020解密 - DRM 设备文件:Widevine L1
.wvd(--wvd-path)或 PlayReady.prd(--prd-path),4K 视频的前置条件 - mutagen:Python 库,负责最终文件的元数据标签写入
避坑指南:常见问题与最佳实践
1. ALAC 下载失败或反复降级现象是日志提示ALAC may be attempted without wrapper。原因是 ALAC 依赖 Wrapper 的播放与解密通道,纯 Cookie 模式下受 API 限制基本不可用。解决:部署 Wrapper v2 服务器并加--use-wrapper,此时可以省略 Cookie 文件。
2. 重复运行下载相同内容现象是已存在的曲目被再次下载。原因是默认不跟踪下载历史。解决:传入--database-path ./downloads.db让 gamdl 以 SQLite 记录媒体 ID 与文件路径,再次遇到相同媒体会跳过;确需覆盖时再加--overwrite。
3. 临时文件占满工作盘现象是磁盘空间在大批量下载期间被快速消耗。原因是temp_path默认为当前目录(.),解密前的分片先落盘再封装。解决:用--temp-path指向 SSD 或其他有空间的目录。
4. 网络不稳定或处于受限网络环境现象是连接超时、部分曲目失败。原因是默认直连 Apple 服务器。解决:通过HTTP_PROXY/HTTPS_PROXY环境变量配置代理,并用--log-level DEBUG --log-file gamdl.log记录完整日志定位失败点;单条曲目失败不会中断整体任务,gamdl 会跳过并继续,最终汇总Finished with N error(s)。
项目生态:现状与未来
gamdl 采用 MIT 许可,维护者目前在 README 中声明仅接收关键 bug 修复,功能请求请通过 issue 提出。
- 图形化界面:降低命令行工具的使用门槛
- 更多地区与内容类型的适配:扩大可用媒体范围
- 云存储直传:下载完成后自动同步到 NAS 或网盘
- 插件化扩展:允许第三方接入新的 DRM 后端或下载引擎
合规使用与注意事项
- 下载行为依赖您的 Apple Music 订阅凭据,请仅在有效订阅前提下将内容用于个人用途
alac编解码器的可用性与 Wrapper v2 绑定,未启用时大概率失败- 2160p 音乐视频受 DRM 设备等级限制,必须提供 Widevine L1
.wvd或 PlayReady SL3K.prd文件 - 带内容限制(content restrictions)的账号会有部分内容不可下载,启动时日志会给出警告
- 元数据语言参数
--language对音乐视频不一定生效,以 ISO 639-1 语言代码填写(如zh-CN、ja-JP)
写在最后
走完这份 gamdl 教程,您已经掌握从一条链接到带标签本地文件的全流程。对收藏者而言,它意味着无损音质与完整元数据的本地化;对开发者而言,README 中的分层 API 与可插拔下载模式,也为构建自己的媒体管理工具留出了空间。
【免费下载链接】gamdlA command-line app for downloading Apple Music songs, music videos and post videos.项目地址: https://gitcode.com/GitHub_Trending/ga/gamdl
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考