音乐标签:为音乐添加内嵌歌词与专辑封面
此刻就不得不提到根据音流支持列表得知的消息,音乐文件可以内嵌歌词,一番搜索后寻找到音乐标签软件,可以批量刮削音乐的歌词、专辑封面等信息
自动将音乐标题、演唱者、封面图、歌词、…
开发者在博客园开放了软件下载
音乐标签 pc 版
此处笔者简单进行使用介绍,大致流程是添加音乐文件根目录(如果包含子目录注意勾选)
![][img-9]注意勾选子目录,以便扫描所有音乐
添加完成后选择自动匹配
此处已经是匹配完成所以歌词信息与封面信息均存在
选择你需要的元信息
此处根据需要选取需要匹配的标签即可
在一段时间等待后会提醒匹配完成,点击保存标签你就可以在 Jellyfin 中看到海报墙了

但笔者在此还遇到专辑无法识别、音流中可以显示歌词但不显示专辑封面的问题,为此通过排查发现是 Jellyfin 无法识别专辑,而音流在 2024-04-08 V1.2.7 的更新中看起来改成了只获取音乐专辑封面。原因和表征符合,那接下来就是解决问题

Jellyfin 专辑识别
最初笔者以为 Jellyfin 使用歌曲元数据(音乐标签)进行专辑识别,因此特地进行了专辑匹配,但并未奏效,经过搜索发现在 Jellyfin 的文档中提到 Jellyfin 的专辑识别依靠文件夹而非音乐标签
官方文档的标准音乐目录结构示例 Jellyfin
而我的音乐文件此前是使用网易云音乐批量下载到一个目录下没有任何子目录,所以无法识别专辑但一个个手动创建专辑也比较麻烦,并且有些专辑名称是 “精选国语 23”、“精选国语 45” 等,十分难以辨认是什么歌,因此笔者计划以每一首歌作为一个目录以歌曲名称命名。此处需要用到 python 和音乐标签。最初的歌曲命名是 “歌手 歌名. 扩展名” 的结构,使用空格提取会遇到歌名中包含空格而无法完全自动化,因此需要使用音乐的标签进行重命名。
ctrl+A 全选音乐后选择「批量」->「文件名相关」
此处 “=” 并非强制,只需要是绝大多数歌名中不存在的符号即可
最初因为可以批量改名,本想直接添加 “\” 符号改名到专辑名称,但会将 “\” 变成 “;” 而无法实现,因此只能使用别的工具,作者常用 python 因此使用 python 进行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| import os import shutil
def organize_music_files(root_directory): for root, dirs, files in os.walk(root_directory): for file in files: file_path = os.path.join(root, file) if file.endswith(('.mp3', '.flac','.wav')):#如果有其他格式音乐文件自行添加,不涉及任何文件内容修改,因此可以适配任何格式 try: file_name = os.path.splitext(file)[0] infom = file_name.split('=') #如果前文没有使用等号请自行更改 album_name = infom[1].strip()
album_directory = os.path.join(root_directory, album_name) if not os.path.exists(album_directory): os.makedirs(album_directory)
new_file_name = file_name.replace('=', '-')+os.path.splitext(file)[1] destination_path = os.path.join(album_directory, new_file_name) shutil.move(file_path, destination_path) except: print(f"Error processing file: {file}") continue if __name__ == '__main__': # 调用函数,指定根目录 root_directory = r"your_media_path" organize_music_files(root_directory)
|
等程序运行结束后在 Jellyfin 中重新扫描媒体库,你就可以得到封面歌词都匹配的播放器了
最终成果
iOS 端配置后
安卓端配置后
与安卓端如出一辙显示专辑名
但作者还是觉得 Jellyfin 也很神奇,专辑存在与否的识别通过是否存在目录达成,但专辑名称与封面又会读取音乐标签,为什么不直接读取音乐标签进行专辑聚合,也让用户免受满足目录结构的苦。