我有许多 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
表示希伯来语。
更多信息可以在这里找到:
- https://mutagen.readthedocs.io/en/latest/man/mid3iconv.html
- 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)