M4A音乐自动提取歌词与封面教程

M4A音乐自动提取歌词与封面教程

2026年5月16日·#博客指南使用文档/音乐·1614 字 8 分钟
浏览量加载中...
AI 摘要

最近整理博客的音乐收藏页,被手动扒歌词、下封面、写 Markdown 磨得没脾气……于是撸了个 Python 脚本,现在只要一条命令,就能自动从 M4A 文件里抽封面、调 API 下同步歌词、生成带评分和状态的博客用 Markdown——本地有文件就直接提,没文件也能搜歌名一键下载全包,连空格和特殊字符都帮你清理好,真的解放双手。

背景#

博客的音乐收藏页面(/music)需要为每首歌准备三样东西:

文件用途
.m4a / .mp3音频文件本身
.lrc同步歌词(带时间轴的歌词文件)
.jpg专辑封面图
.md博客的 Markdown 内容文件

手动搜歌词、下载封面、写 md 实在太麻烦。我写了一套脚本,两种方式一条命令全部搞定。


两种使用模式#

脚本 fetch-lrc.py 支持两种模式:

模式使用场景命令
本地文件模式已有 M4A 文件,提取内嵌封面+API 下载歌词python fetch-lrc.py song.m4a --md
搜索下载模式没有本地文件,直接搜歌名下载音频+封面+歌词python fetch-lrc.py "晴天" "周杰伦" --md

工作原理#

flowchart TD A[输入] --> B{是文件路径?} B -->|是| C[读取 M4A 元数据] C --> D{内嵌封面?} D -->|有| E[提取封面] D -->|无| F[Meting API 搜索] B -->|否| G[搜歌名下载模式] G --> H[Meting API 搜索] H --> I[显示搜索结果列表] I --> J[用户选择/自动选第一首] J --> K[下载音频] K --> L[下载封面] L --> M[下载歌词] M --> N[生成 MD] F --> L E --> M
  1. 本地文件模式:读取 M4A 元数据(歌名、歌手)→ 提取内嵌封面 → API 搜索 → 下载歌词 → 生成 md
  2. 搜索下载模式:输入歌名搜索 → 选择结果 → 下载音频 → 下载封面 → 下载歌词 → 生成 md

环境准备#

安装依赖#

需要 Python 3 和 mutagen 库:

Terminal window
pip install mutagen

注意:Windows 上可能有多个 Python 版本,确保用装过 mutagen 的那个。可以用完整路径指定,如 C:/Users/xxx/AppData/Local/Programs/Python/Python313/python.exe

无需 ffmpeg,纯 Python 实现。


使用方法#

本地文件模式#

Terminal window
# 处理单个文件
python scripts/fetch-lrc.py "path/to/song.m4a" --md
# 处理整个目录(批量)
python scripts/fetch-lrc.py "path/to/music/folder" --md

脚本会遍历目录下所有 .m4a.mp3.flac 等文件,逐个提取封面和下载歌词。

搜索下载模式#

Terminal window
# 只搜歌名
python scripts/fetch-lrc.py "晴天" --md
# 歌名 + 歌手(提高准确度)
python scripts/fetch-lrc.py "海阔天空" "Beyond" --md
# 换平台
python scripts/fetch-lrc.py "起风了" --md --server=kugou
# 指定下载目录
python scripts/fetch-lrc.py "晴天" "周杰伦" --md --out=./downloads
# 只搜索预览(不下载)
python scripts/fetch-lrc.py "晴天" --dry-run

搜索结果有多条时会显示列表,交互模式下可手动选择序号,非交互终端自动选第一首。

完整参数表#

参数说明默认值
第一个参数M4A 文件路径 / 歌名必填
第二个参数歌手名(搜索模式)
--md生成博客 md 文件到 src/content/bangumi/music/关闭
--no-md只提取/下载,不生成 md-
--server=xxx音乐平台netease
--audio-base=xxx自定义 URL 前缀https://img.tsh520.cn/file/music/
--md-dir=xxx自定义 md 输出目录src/content/bangumi/music/
--out=xxx搜索模式的下载目录scripts/downloads/
--dry-run搜索模式只预览,不下载-

支持的平台#

平台
netease网易云音乐
tencentQQ 音乐
kugou酷狗音乐
baidu百度音乐
kuwo酷我音乐

实操示例:本地文件模式#

以歌曲《暗恋过结局呢》为例。

第一步:准备 M4A 文件#

将 M4A 文件放到任意目录,例如 scripts/zcyyy/

scripts/zcyyy/
└── 暗恋过结局呢.m4a

第二步:运行脚本#

Terminal window
python scripts/fetch-lrc.py scripts/zcyyy --md

第三步:查看输出#

scripts/zcyyy/
├── 暗恋过结局呢.m4a ← 原始文件
├── 暗恋过结局呢.lrc ← API 下载的同步歌词
└── 暗恋过结局呢.jpg ← API 下载的封面图
src/content/bangumi/music/
└── 暗恋过 结局呢.md ← 自动生成的博客内容文件

实操示例:搜索下载模式#

以歌曲《知我》为例。

第一步:运行命令#

Terminal window
python scripts/fetch-lrc.py "知我" "哦漏" --md

第二步:选择结果#

搜索: 知我 - 哦漏
搜索结果:
[ 1] 知我 - 国风堂 / 哦漏
[ 2] 知我 (伴奏) - 国风堂 / 哦漏
...
选择序号 (1-2, 默认 1): 1
选中: 知我 - 国风堂 / 哦漏
音频 [100%] =========================> 11 MB/11 MB
[封面] 知我-国风堂哦漏.jpg
[歌词] 知我-国风堂哦漏.lrc (1950 字符)
[MD] 知我.md

第三步:输出文件#

scripts/downloads/
├── 知我-国风堂哦漏.m4a ← 下载的音频
├── 知我-国风堂哦漏.jpg ← 封面图
└── 知我-国风堂哦漏.lrc ← 同步歌词
src/content/bangumi/music/
└── 知我.md ← 自动生成的博客内容文件

生成的 Markdown 格式#

---
title: 知我
category: music
status: 2
image: https://img.tsh520.cn/file/music/知我-国风堂哦漏.jpg
artist: 国风堂 / 哦漏
audioUrl: https://img.tsh520.cn/file/music/知我-国风堂哦漏.m4a
lrcUrl: https://img.tsh520.cn/file/music/知我-国风堂哦漏.lrc
score: 0
published: 2026-05-16
---

生成后手动调整 score(评分)、status(状态)、title(清理多余空格)即可。

状态码含义:

含义
1想听
2听过
3在听
4搁置
5弃了

批量处理#

Terminal window
# 批量处理本地 M4A 文件
python scripts/fetch-lrc.py D:/Music/ --md
# 批量下载歌单(需提前准备好歌名列表,自行写批处理循环)

已处理的文件会自动跳过(封面、歌词、md 已存在则不再重复生成)。如需重新生成,先删除已有文件即可。


常见问题#

Q: 歌词下载失败?#

换个平台试试:

Terminal window
python scripts/fetch-lrc.py song.m4a --md --server=kugou

Q: 搜索下载模式下无法手动选择?#

非交互终端(如管道执行)会自动选第一首。手动终端用 PowerShell 或 CMD 打开运行即可交互选择。

Q: 音频下载失败?#

某些热门歌曲因版权限制,Meting API 可能返回 404。尝试换平台搜索:

Terminal window
python scripts/fetch-lrc.py "晴天" "周杰伦" --md --server=kugou

Q: 封面不对?#

本地文件模式优先使用 M4A 内嵌封面。如果内嵌封面不对,删除自动生成的 .jpg 后重新运行即可从 API 下载。

Q: 文件名有空格和特殊符号?#

最新版脚本会自动清理文件名中的空格和特殊字符,确保 URL 合法。

Q: 不想生成 md?#

Terminal window
python scripts/fetch-lrc.py song.m4a --no-md

Q: URL 前缀怎么改?#

Terminal window
python scripts/fetch-lrc.py song.m4a --md --audio-base=https://你的cdn.com/music/

Q: pip install mutagen 后还是报 ModuleNotFoundError?#

Windows 上可能有多个 Python 版本。检查方式:

Terminal window
# 查看当前 python 路径
where python
# 用装过 mutagen 的那个 Python 执行
C:/完整路径/python.exe scripts/fetch-lrc.py ...

总结#

操作命令
本地文件 → 歌词+封面python scripts/fetch-lrc.py song.m4a --md
批量导入本地文件python scripts/fetch-lrc.py ./music-folder/ --md
直接搜歌下载python scripts/fetch-lrc.py "晴天" "周杰伦" --md
只要音频+封面+歌词python scripts/fetch-lrc.py "晴天" --no-md
换个平台搜python scripts/fetch-lrc.py "晴天" --md --server=kugou

整个流程只需一条命令,博客音乐收藏页面就自动上线新歌了。

最后更新于 2026-05-16,距今已过 93 天

部分内容可能已过时

评论区

[ 标签 ]
# AI5# AI 编程2# AI工具1# Ajax2# Apifox1# AstrBot2# Astro2# CC Switch1# CDN2# Claude Code1# claudecode2# ClaudeCode1# CloudFlare2# Cloudflare1# CloudFlare-ImgBed1# coc3# CSS6# DeepSeek2# deepseek2# DELETE1# Docker1# EdgeOne3# Gist1# git1# GitHub1# hexo-circle-of-friends1# HTML6# HTTP2# Java23# java13# JavaScript5# JDBC3# JSON1# JUnit1# Logback1# Maven6# Mybatis1# MyBatis4# MySQL6# MySql1# NapCat1# Obsidian3# OpenCode3# ORM1# PathVariable1# PicGo1# py2# RequestBody1# RequestMapping1# RESTful风格1# skills1# Slf4j1# SpringBoot11# SQL2# Svelte2# TailwindCSS1# Telegram2# Tlias2# Vercel1# Vue7# Waline3# WebDAV1# Web基础6# WinSCP1# YAML1# 三层架构1# 中二宣言1# 书籍1# 使用文档9# 写作1# 刷步数1# 前端32# 动态1# 动漫1# 单词2# 博客6# 博客工作流1# 博客开发2# 参数接收1# 友链1# 反思2# 图床4# 地图1# 备份1# 奇思妙想1# 存储1# 学习方法1# 宝塔面板3# 宝宝9# 导航栏1# 工具2# 开发1# 开发规范1# 开心1# 影视1# 微信1# 性能优化2# 总结1# 想法7# 感悟9# 指南1# 插件3# 故障排除1# 效率工具2# 教程7# 数据库10# 斩神1# 日常60# 日志框架1# 朋友圈1# 朱元璋1# 模板1# 测试1# 游戏1# 生活迁移1# 电影2# 碎碎念1# 视觉识别1# 网络教室1# 羊毛1# 脚本1# 脚本工具1# 自动化2# 蓝奏云1# 订阅推荐1# 记录1# 评论系统1# 词根1# 词缀1# 说说1# 足迹1# 跑步2# 路径参数1# 转载1# 运动1# 部落冲突1# 配置1# 随机图1# 音乐3# 音标1# 饮食1# 驼峰命名1# 高德地图1
[ 公告 ]

如果你喜欢,那么欢迎来到我的世界!

了解更多
[ 音乐 ]
封面

音乐

暂未播放

0:000:00
暂无歌词
找不到相关结果。
[ contents ]
[ 全部文章 ]
工具