如何将希伯来语 ID3/元数据标签从 CP1255 转换为 UTF-8?

如何将希伯来语 ID3/元数据标签从 CP1255 转换为 UTF-8?

我有许多 MP3(可能还有其他音频格式的文件),其元数据标签(对于 MP3 而言为 ID3v1 和/或 ID3v2)包含 CP1255 字符集(或 ISO-8859-8i,对于我们的目的而言,本质上是相同的)中的希伯来字符。但是 - 有些标签是 UTF-8。我在 Amarok 等中加载文件时注意到了这一点 - 有些显示为乱码(CP1255 的 UTF-8 解码),其他则显示正常。

我想一次性将所有标签转换为 UTF-8(假设它们是 CP1255 或 ISO-8859-8i)。我该怎么做?

我正在运行 Debian GNU/Linux(版本:Stretch)。命令行解决方案和基于 GUI 的解决方案都非常好。

答案1

诱变剂包括mid3iconv

mid3iconv --dry-run --encoding=iso8859-8 foo.mp3

mid3iconv --dry-run --encoding=cp1255 bar.mp3

但是,您可能必须单独指定要转换的文件,因为自动检测iso8859-*cp125*软件只是根据字符频率进行猜测。

答案2

在 Ubuntu 20.04 上,请确保您具有:

    apt-get install easytag
    apt-get install python3-mutagen

然后

    cd /Music
    find . -name "*.mp3" -print0 | xargs -0 mid3iconv -e windows-1255 -d

我用来windows-1255表示希伯来语。

更多信息可以在这里找到:

  1. https://mutagen.readthedocs.io/en/latest/man/mid3iconv.html
  2. https://help.ubuntu.com/community/ConvertingMP3Tags

希望这对下一个人有帮助

编辑:

在大型音乐库上运行此命令导致我的系统崩溃。这里有一个将其分解成较小块的脚本。

import os
import re

path = "PATH/TO/MUSIC"
for subdir_obj in os.walk(path):
    subdir = subdir_obj[0]
    #Skip parent directory
    if subdir == path:
        continue
    #Escape path string
    escapePath = re.escape(subdir);
    #Add any charicters that were missed in the previuse command
    escapePath = escapePath.translate(str.maketrans({"'":  r"\'"}))

    #Test that all paths are reachable. RUN THIS FIRST
    #command = 'cd {}; pwd'.format(escapePath)

    #The encoding command
    #command = 'cd {}; find . -name "*.mp3" -print0 | xargs -0 mid3iconv -e windows-1255 -q'.format(escapePath)

    #Execute
    os.system(command)

相关内容