☰
gamdl:如何下载 Apple Music 无损歌曲与 4K 音乐视频?
2026/10/21 2:00:54 网站建设 项目流程

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、AC3AAC 256kbps 44.1kHz;ALAC 最高 24-bit/192kHz;Atmos 768kbps同步歌词(lrc/srt/ttml,默认 lrc)、元数据标签、--save-cover独立封面
音乐视频H.264、H.265240p–1080p(H.264),1440p/2160p 仅限 H.265m4v/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从文本文件逐行读取 URLurls.txt
database_pathSQLite 数据库路径,记录已下载媒体并跳过重复./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),仅供参考

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

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

立即咨询