Как преобразовать теги иврита 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 для иврита.

Более подробную информацию можно найти здесь:

  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)
Другие вопросы по тегам