Как преобразовать теги иврита ID3/ метаданных из CP1255 в UTF-8?
У меня есть многочисленные MP3 (и, возможно, файлы в других аудиоформатах), чьи метаданные меток (ID3v1 и / или ID3v2 для случая MP3) включают ивритские символы в кодировке CP1255 (или ISO-8859-8i, по сути, то же самое для нашего цели). Но - некоторые теги есть в UTF-8. Я замечаю это при загрузке файлов, скажем, в Amarok - некоторые отображаются как бред (декодирование UTF-8 CP1255), другие правильно.
Я хотел бы преобразовать все теги сразу в UTF-8, при условии, что они в CP1255 или ISO-8859-8i). Как я могу это сделать?
Я использую Debian GNU/Linux (версия: Stretch). Решения командной строки прекрасно, как и на основе графического интерфейса.
1 ответ
Мутаген включает в себя mid3iconv
:
mid3iconv --dry-run --encoding=iso8859-8 foo.mp3
mid3iconv --dry-run --encoding=cp1255 bar.mp3
Тем не менее, вам, вероятно, придется индивидуально указать, какие файлы конвертировать, так как автоматическое определение iso8859-*
или же cp125*
в программном обеспечении это просто догадки, основанные на частотах символов.
В 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)