如何下载 Apple Music 无损 ALAC 歌曲:gamdl 使用指南【免费下载链接】gamdlA command-line app for downloading Apple Music songs, music videos and post videos.项目地址: https://gitcode.com/GitHub_Trending/ga/gamdl你是否也遇到过这种情况:Apple Music 的订阅明明包含无损音质,浏览器里却只能听到 AAC 的"压缩感"?gamdl就是一个命令行工具,专门把 Apple Music 的歌曲、MV 和帖子视频下载到本地——默认拿到 AAC 256kbps,配上 Wrapper 后还能直接下 ALAC 无损(最高 24-bit/192kHz),并自动打好标签、嵌好封面。一、gamdl 到底能干什么一句话定位:gamdl 是一个面向 Apple Music 订阅用户的"抓取 + 解密 + 打标"一体化下载器,输入一个网页链接,输出一个带完整元数据的本地 m4a / m4v 文件。核心能力有:歌曲:AAC 256kbps、Dolby Atmos、AC3,以及 ALAC 无损(最高 24-bit/192kHz)MV:H.264/H.265,分辨率最高 4K同步歌词:LRC / SRT / TTML 三种格式元数据:自动写入标签并嵌入封面批量:URL 支持歌曲、专辑、播放列表、艺人主页,艺人页还能自动挑选内容类型如果你只想记住两个关键词:Wrapper 集成和ALAC 无损下载,本文就是围绕它们展开的。二、架构怎么拆的:一次下载的数据流把架构按数据流看会比列目录清晰得多。一次下载的路径是:你粘贴的 URL → CLI → 认证 → 元数据 → 下载 → 解密拼装 → 成品文件。gamdl/cli/:解析命令行参数,合并配置文件里的默认值gamdl/api/:建立连接。要么用WrapperApi连上 wrapper-v2 服务器,要么用 Netscape 格式的 cookies 直连 Apple Music 接口gamdl/interface/:解析 URL 类型,拉取专辑/歌曲元数据、流信息,按优先级挑码流gamdl/downloader/:拉取加密的 m4a 分片,下载完成后解密、写标签、嵌入封面gamdl/downloader/ammuxer/:用 Rust 写的原生扩展gamdl._ammuxer,负责解密和 MP4 拼装,Python 不碰二进制数据组装过程在 gamdl/cli/cli.py 里,核心调用链如下:# 认证:用 wrapper-v2 服务器(也可改用 netscape cookies 直连) wrapper_api = await WrapperApi.create( base_url=config.wrapper_url, # wrapper-v2 的 HTTP 地址 decrypt_host=config.wrapper_decrypt_host, # TCP 解密通道 decrypt_port=config.wrapper_decrypt_port, # 默认 10020 ) apple_music_api = await AppleMusicApi.create_from_wrapper( wrapper_api=wrapper_api, language=config.language ) interface = AppleMusicInterface(...) # 元数据与码流选择 downloader = AppleMusicDownloader(...) # 下载、解密、打标 async for item in downloader.get_download_item_from_url(url): await downloader.download(item) # 逐条落地 # ... 中间是各子接口的创建,见源码三、核心机制深潜突破 API 限制:Wrapper 是怎么干活的原理一句话:Apple Music 的公开 webplayback 接口对非 web 码流做了限制,直接调大概率拿不到 ALAC;Wrapper 就像一个帮你跑前堂的"翻译官",替你持有账号、发起播放请求、处理解密。要点:wrapper-v2 独立服务,负责账号认证、播放请求、FairPlay 解密三件事,gamdl 通过--use-wrapper开启HTTP 通道走wrapper_url(默认http://127.0.0.1),批量解密走 TCP 端口10020用了 Wrapper 可以跳过 cookies,登录态由 Wrapper 管理;首次会交互式要求输入 Apple ID编解码器优先级:一行配置决定音质--song-codec-priority是逗号分隔的优先级列表,接口层拿到的码流清单里只要命中清单中的第一个可用项就选它,选中的编解码器定义在 gamdl/interface/enums.py:class SongCodec(Enum): AAC_WEB = "aac-web" # AAC 256kbps 44.1kHz(默认,免 Wrapper) # ... 省略:aac-he / atmos / ac3 等 ALAC = "alac" # ALAC 最高 24-bit/192kHz,基本依赖 WrapperCLI 层还做了保护:选了alac却没开 Wrapper 时会打印警告——能试,但大概率失败。解密 + 拼装:Rust 扩展 ammuxer下载到手的是加密的 m4a,不能直接听。gamdl 把这段搬进了 Rust:gamdl/downloader/ammuxer/ 编译成gamdl._ammuxer,一次调用完成"解密 + 写 MP4 容器",Python 侧只剩薄薄一层异步封装(见 gamdl/downloader/ammuxer.py):# FairPlay 流交给 wrapper-v2 的 TCP 端口批量解密,顺带完成 m4a 拼装 await decrypt_and_mux_wrapper( wrapper_api, track_id, # 媒体的 media id input_audio_path, # 下载下来的加密 m4a output_path, # 解密后的成品路径 fairplay_key_audio=fairplay_key, use_single_content_key=use_single_content_key, )效果:加密分片进来,可正常播放的 m4a 出去,标签和封面随后由 mutagen 写入。四、上手实战场景一:下载第一首歌(Cookies 模式)前置条件:Python ≥ 3.10,浏览器已登录 Apple Music,并导出了 Netscape 格式的 cookies 文件。pip install gamdl # 安装 gamdl --cookies-path ./cookies.txt "https://music.apple.com/us/album/never-gonna-give-you-up-2022-remaster/1624945511?i=1624945512"预期输出:./Apple Music/下出现带标签和封面的 m4a,默认 AAC 256kbps。场景二:三步配置 Wrapper 实现无损下载前置条件:本机已启动 wrapper-v2 服务器(HTTP + TCP 10020 两个通道)。gamdl --use-wrapper \ --song-codec-priority alac \ "https://music.apple.com/us/album/whenever-you-need-somebody-2022-remaster/1624945511"首次运行会交互式要求输入 Apple ID(可能含 2FA)。常用项写进配置文件~/.gamdl/config.ini(首次运行自动生成,Windows 在%USERPROFILE%\.gamdl\config.ini,命令行参数优先级更高):[gamdl] use_wrapper = true song_codec_priority = alac预期输出:专辑整张落地为 ALAC 无损 m4a,比特深度最高可达 24-bit/192kHz。场景三:批量抓艺人 / 专辑前置条件:拿到艺人主页链接。# 自动挑选该艺人的全部专辑,从 urls.txt 批量读链接 gamdl --artist-auto-select all-albums --read-urls-as-txt -r ./urls.txt "https://music.apple.com/us/artist/rick-astley/669771"交互式界面支持方向键移动、空格勾选、Ctrl+A 全选、Enter 确认。五、进阶调优换更快的下载引擎--download-mode nm3u8dlre把下载引擎从默认的 yt-dlp 切换为 N_m3u8DL-RE(yt-dlp 本身只负责传输,媒体仍直接来自 Apple 服务器)。不在 PATH 里时用--nm3u8dlre-path指定可执行文件,--ffmpeg-path指定 FFmpeg。跳过已下载曲目给--database-path一个 SQLite 文件,下载过的媒体会登记其中,再次运行同类任务时自动跳过,适合长期维护一个本地曲库。自定义目录与文件名用--output-path指定输出目录,用模板控制结构,如--album-folder-template "{album_artist}/{album}/{date:%Y}"、--single-disc-file-template "{track:02d} {title}"。模板变量支持artist、album、date(strftime 格式)、disc、title等。六、常见问题与避坑ALAC 下载失败或报错现象:指定了 alac 却拿不到流,或直接失败。原因:未启用 Wrapper,非 web 码流受 API 限制,纯 cookies 模式基本拿不到 ALAC。解决:开启--use-wrapper并确保 wrapper-v2 已登录;或退回aac-web。Wrapper 连不上 / 登录失败现象:启动即报Error fetching wrapper account info或Unsupported wrapper-v2 API version。原因:wrapper-v2 没启动、地址端口没对上,或版本与 gamdl 要求不一致(当前要求 0.0.2)。解决:确认 wrapper-v2 在运行;检查--wrapper-url与解密端口--wrapper-decrypt-port(默认 10020);升级或切换 wrapper-v2 版本。4K MV 下不了现象:2160p分辨率下载失败。原因:4K 需要 Widevine L1 的.wvd设备文件或 PlayReady SL3000 的.prd文件。解决:--wvd-path提供.wvd,或--drm-backend playready --prd-path xxx.prd;不想折腾就降到1080p。Cookies 过期现象:认证直接失败或提示无订阅。原因:cookies 有时效性。解决:在登录状态下重新从浏览器导出 Netscape 格式 cookies;或者干脆用 Wrapper 模式,可以完全跳过 cookies。七、生态与演进当前生态由四个组件构成:wrapper-v2 负责账号、播放请求与 FairPlay 解密;N_m3u8DL-RE 提供替代下载引擎;yt-dlp 与 FFmpeg 处理媒体传输与格式转换;Rust 扩展 ammuxer 由 maturin 构建,承担解密与 MP4 拼装。参与入口很直接:提 issue 报告 bug 或需求,维护者目前只接收关键 bug 修复的 PR,另有 Discord 社区可以交流。八、写在最后回到开头的问题:订阅里有无损,浏览器里却只有 AAC。用 gamdl 加上 Wrapper,你的无损音轨就能安安静静地躺在本地硬盘里——而且连标签和封面都是现成的。现在就去跑一条gamdl --use-wrapper --song-codec-priority alac试试 🎵【免费下载链接】gamdlA command-line app for downloading Apple Music songs, music videos and post videos.项目地址: https://gitcode.com/GitHub_Trending/ga/gamdl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
如何下载 Apple Music 无损 ALAC 歌曲:gamdl 使用指南【免费下载链接】gamdlA command-line app for downloading Apple Music songs, music videos and post videos.项目地址: https://gitcode.com/GitHub_Trending/ga/gamdl你是否也遇到过这种情况:Apple Music 的订阅明明包含无损音质,浏览器里却只能听到 AAC 的"压缩感"?gamdl就是一个命令行工具,专门把 Apple Music 的歌曲、MV 和帖子视频下载到本地——默认拿到 AAC 256kbps,配上 Wrapper 后还能直接下 ALAC 无损(最高 24-bit/192kHz),并自动打好标签、嵌好封面。一、gamdl 到底能干什么一句话定位:gamdl 是一个面向 Apple Music 订阅用户的"抓取 + 解密 + 打标"一体化下载器,输入一个网页链接,输出一个带完整元数据的本地 m4a / m4v 文件。核心能力有:歌曲:AAC 256kbps、Dolby Atmos、AC3,以及 ALAC 无损(最高 24-bit/192kHz)MV:H.264/H.265,分辨率最高 4K同步歌词:LRC / SRT / TTML 三种格式元数据:自动写入标签并嵌入封面批量:URL 支持歌曲、专辑、播放列表、艺人主页,艺人页还能自动挑选内容类型如果你只想记住两个关键词:Wrapper 集成和ALAC 无损下载,本文就是围绕它们展开的。二、架构怎么拆的:一次下载的数据流把架构按数据流看会比列目录清晰得多。一次下载的路径是:你粘贴的 URL → CLI → 认证 → 元数据 → 下载 → 解密拼装 → 成品文件。gamdl/cli/:解析命令行参数,合并配置文件里的默认值gamdl/api/:建立连接。要么用WrapperApi连上 wrapper-v2 服务器,要么用 Netscape 格式的 cookies 直连 Apple Music 接口gamdl/interface/:解析 URL 类型,拉取专辑/歌曲元数据、流信息,按优先级挑码流gamdl/downloader/:拉取加密的 m4a 分片,下载完成后解密、写标签、嵌入封面gamdl/downloader/ammuxer/:用 Rust 写的原生扩展gamdl._ammuxer,负责解密和 MP4 拼装,Python 不碰二进制数据组装过程在 gamdl/cli/cli.py 里,核心调用链如下:# 认证:用 wrapper-v2 服务器(也可改用 netscape cookies 直连) wrapper_api = await WrapperApi.create( base_url=config.wrapper_url, # wrapper-v2 的 HTTP 地址 decrypt_host=config.wrapper_decrypt_host, # TCP 解密通道 decrypt_port=config.wrapper_decrypt_port, # 默认 10020 ) apple_music_api = await AppleMusicApi.create_from_wrapper( wrapper_api=wrapper_api, language=config.language ) interface = AppleMusicInterface(...) # 元数据与码流选择 downloader = AppleMusicDownloader(...) # 下载、解密、打标 async for item in downloader.get_download_item_from_url(url): await downloader.download(item) # 逐条落地 # ... 中间是各子接口的创建,见源码三、核心机制深潜突破 API 限制:Wrapper 是怎么干活的原理一句话:Apple Music 的公开 webplayback 接口对非 web 码流做了限制,直接调大概率拿不到 ALAC;Wrapper 就像一个帮你跑前堂的"翻译官",替你持有账号、发起播放请求、处理解密。要点:wrapper-v2 独立服务,负责账号认证、播放请求、FairPlay 解密三件事,gamdl 通过--use-wrapper开启HTTP 通道走wrapper_url(默认http://127.0.0.1),批量解密走 TCP 端口10020用了 Wrapper 可以跳过 cookies,登录态由 Wrapper 管理;首次会交互式要求输入 Apple ID编解码器优先级:一行配置决定音质--song-codec-priority是逗号分隔的优先级列表,接口层拿到的码流清单里只要命中清单中的第一个可用项就选它,选中的编解码器定义在 gamdl/interface/enums.py:class SongCodec(Enum): AAC_WEB = "aac-web" # AAC 256kbps 44.1kHz(默认,免 Wrapper) # ... 省略:aac-he / atmos / ac3 等 ALAC = "alac" # ALAC 最高 24-bit/192kHz,基本依赖 WrapperCLI 层还做了保护:选了alac却没开 Wrapper 时会打印警告——能试,但大概率失败。解密 + 拼装:Rust 扩展 ammuxer下载到手的是加密的 m4a,不能直接听。gamdl 把这段搬进了 Rust:gamdl/downloader/ammuxer/ 编译成gamdl._ammuxer,一次调用完成"解密 + 写 MP4 容器",Python 侧只剩薄薄一层异步封装(见 gamdl/downloader/ammuxer.py):# FairPlay 流交给 wrapper-v2 的 TCP 端口批量解密,顺带完成 m4a 拼装 await decrypt_and_mux_wrapper( wrapper_api, track_id, # 媒体的 media id input_audio_path, # 下载下来的加密 m4a output_path, # 解密后的成品路径 fairplay_key_audio=fairplay_key, use_single_content_key=use_single_content_key, )效果:加密分片进来,可正常播放的 m4a 出去,标签和封面随后由 mutagen 写入。四、上手实战场景一:下载第一首歌(Cookies 模式)前置条件:Python ≥ 3.10,浏览器已登录 Apple Music,并导出了 Netscape 格式的 cookies 文件。pip install gamdl # 安装 gamdl --cookies-path ./cookies.txt "https://music.apple.com/us/album/never-gonna-give-you-up-2022-remaster/1624945511?i=1624945512"预期输出:./Apple Music/下出现带标签和封面的 m4a,默认 AAC 256kbps。场景二:三步配置 Wrapper 实现无损下载前置条件:本机已启动 wrapper-v2 服务器(HTTP + TCP 10020 两个通道)。gamdl --use-wrapper \ --song-codec-priority alac \ "https://music.apple.com/us/album/whenever-you-need-somebody-2022-remaster/1624945511"首次运行会交互式要求输入 Apple ID(可能含 2FA)。常用项写进配置文件~/.gamdl/config.ini(首次运行自动生成,Windows 在%USERPROFILE%\.gamdl\config.ini,命令行参数优先级更高):[gamdl] use_wrapper = true song_codec_priority = alac预期输出:专辑整张落地为 ALAC 无损 m4a,比特深度最高可达 24-bit/192kHz。场景三:批量抓艺人 / 专辑前置条件:拿到艺人主页链接。# 自动挑选该艺人的全部专辑,从 urls.txt 批量读链接 gamdl --artist-auto-select all-albums --read-urls-as-txt -r ./urls.txt "https://music.apple.com/us/artist/rick-astley/669771"交互式界面支持方向键移动、空格勾选、Ctrl+A 全选、Enter 确认。五、进阶调优换更快的下载引擎--download-mode nm3u8dlre把下载引擎从默认的 yt-dlp 切换为 N_m3u8DL-RE(yt-dlp 本身只负责传输,媒体仍直接来自 Apple 服务器)。不在 PATH 里时用--nm3u8dlre-path指定可执行文件,--ffmpeg-path指定 FFmpeg。跳过已下载曲目给--database-path一个 SQLite 文件,下载过的媒体会登记其中,再次运行同类任务时自动跳过,适合长期维护一个本地曲库。自定义目录与文件名用--output-path指定输出目录,用模板控制结构,如--album-folder-template "{album_artist}/{album}/{date:%Y}"、--single-disc-file-template "{track:02d} {title}"。模板变量支持artist、album、date(strftime 格式)、disc、title等。六、常见问题与避坑ALAC 下载失败或报错现象:指定了 alac 却拿不到流,或直接失败。原因:未启用 Wrapper,非 web 码流受 API 限制,纯 cookies 模式基本拿不到 ALAC。解决:开启--use-wrapper并确保 wrapper-v2 已登录;或退回aac-web。Wrapper 连不上 / 登录失败现象:启动即报Error fetching wrapper account info或Unsupported wrapper-v2 API version。原因:wrapper-v2 没启动、地址端口没对上,或版本与 gamdl 要求不一致(当前要求 0.0.2)。解决:确认 wrapper-v2 在运行;检查--wrapper-url与解密端口--wrapper-decrypt-port(默认 10020);升级或切换 wrapper-v2 版本。4K MV 下不了现象:2160p分辨率下载失败。原因:4K 需要 Widevine L1 的.wvd设备文件或 PlayReady SL3000 的.prd文件。解决:--wvd-path提供.wvd,或--drm-backend playready --prd-path xxx.prd;不想折腾就降到1080p。Cookies 过期现象:认证直接失败或提示无订阅。原因:cookies 有时效性。解决:在登录状态下重新从浏览器导出 Netscape 格式 cookies;或者干脆用 Wrapper 模式,可以完全跳过 cookies。七、生态与演进当前生态由四个组件构成:wrapper-v2 负责账号、播放请求与 FairPlay 解密;N_m3u8DL-RE 提供替代下载引擎;yt-dlp 与 FFmpeg 处理媒体传输与格式转换;Rust 扩展 ammuxer 由 maturin 构建,承担解密与 MP4 拼装。参与入口很直接:提 issue 报告 bug 或需求,维护者目前只接收关键 bug 修复的 PR,另有 Discord 社区可以交流。八、写在最后回到开头的问题:订阅里有无损,浏览器里却只有 AAC。用 gamdl 加上 Wrapper,你的无损音轨就能安安静静地躺在本地硬盘里——而且连标签和封面都是现成的。现在就去跑一条gamdl --use-wrapper --song-codec-priority alac试试 🎵【免费下载链接】gamdlA command-line app for downloading Apple Music songs, music videos and post videos.项目地址: https://gitcode.com/GitHub_Trending/ga/gamdl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考