音频文件 Tag 信息重写

解决 jellyfin 导入台湾歌曲,信息显示乱码问题

前两天下载了 20GB+ 的五月天专辑歌曲。都是台湾的资源。正好家里自建了 jellyfin,就尝试导入其中弄成音乐库。

建好音乐库扫描完媒体之后,歌曲名称专辑名称全都是乱码,但是视频库,字幕等都没问题。

猜测是歌曲的 Tag 信息内容编码格式不对。

问题发生后尝试以下操作都未解决:

  • 进入 jellyfin 容器,修改locale.gen,添加:zh_CN.GBK GBKzh_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