音频文件 Tag 信息重写
解决 jellyfin 导入台湾歌曲,信息显示乱码问题
前两天下载了 20GB+ 的五月天专辑歌曲。都是台湾的资源。正好家里自建了 jellyfin,就尝试导入其中弄成音乐库。
建好音乐库扫描完媒体之后,歌曲名称专辑名称全都是乱码,但是视频库,字幕等都没问题。
猜测是歌曲的 Tag 信息内容编码格式不对。
问题发生后尝试以下操作都未解决:
- 进入 jellyfin 容器,修改
locale.gen
,添加:zh_CN.GBK GBK
和zh_TW BIG5
,执行locale-gen
。 - 设置 jellyfin 备用字体库,下载支持 big5 编码的字体放入。
以上操作失败后,开始使用第二招。直接修改音频文件的 Tag 信息。
注意修改音频文件信息会导致bt
无法继续分享。硬链接也不行,除非复制一份文件。
一番面向搜索引擎编程后,使用 python 编写以下脚本:
import os
# https://pypi.org/project/pytaglib/
import taglib
def resave_metadata(file_path):
song = taglib.File(file_path)
song.tags["TITLE"] = song.tags["TITLE"]
song.tags["ALBUM"] = song.tags["ALBUM"]
if "ALBUMARTIST" in song.tags:
song.tags["ALBUMARTIST"] = song.tags["ALBUMARTIST"]
if "ALBUMARTISTSORT" in song.tags:
song.tags["ALBUMARTISTSORT"] = song.tags["ALBUMARTISTSORT"]
if "ARTIST" in song.tags:
song.tags["ARTIST"] = song.tags["ARTIST"]
if "ARTISTS" in song.tags:
song.tags["ARTISTS"] = song.tags["ARTISTS"]
if "ARTISTSORT" in song.tags:
song.tags["ARTISTSORT"] = song.tags["ARTISTSORT"]
if "LABEL" in song.tags:
song.tags["LABEL"] = song.tags["LABEL"]
song.save()
dir = r"Z:\\jellyfin\\music\\五月天"
all_sub_dir = []
dir_contests = os.walk(dir)
for path, dirnames, filenames in dir_contests:
for dirname in dirnames:
dir_path = os.path.join(path, dirname)
print(dir_path)
for f in os.listdir(dir_path):
if not f.endswith(".wav"): # 这里限定仅处理 wav 格式音乐
continue
file_path = os.path.join(dir_path, f)
resave_metadata(file_path)
因为 python 这边默认都是 utf8 编码,如果重写一遍显示还是乱码可能需要使用正确的编码格式读取 tag 数据,然后在写入回去。
我这边没有其他操作就是重写一遍就好了。我也挺懵逼 (─.─||)
推荐标签编辑软件,可以刮削音乐的的信息:
第一个是国内大佬开发的,第二个是国外的。
第二个软件使用参考:http://www.92nas.com/forum.php?mod=viewthread&tid=115