Как исправить кракозябры в тегах mp3 на Linux
Столкнулся с тем, что часть песенпоказывалась кракозябрами в mp3 плеере. Проблема разумеется была в не той кодировке. Исправить это достаточно просто, вот простой скрипт который это делает..
Пример такой проблемы, трек выводится как
- Ñìûñëîâûå Ãàëëþöèíàöèè - Ðàçóì êîãäà-íèáóäü ïîáåäèò
А должен
- Смысловые Галлюцинации - Разум когда-нибудь победит
Чтобы это исправить на Linux, надо в папке с файлами создать скрипт fix-mp3-tags.py
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
import os import mutagen def is_mojibake(text): # Проверяем на характерные «кракозябры», возникающие при чтении CP1251 как Latin-1 mojibake_chars = set('ËÊÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ') return any(char in mojibake_chars for char in text) def fix_text(text): try: # Возвращаем байты в Latin-1 и перекодируем в правильный CP1251 return text.encode('latin1').decode('cp1251') except Exception: return text def process_file(filepath): try: audio = mutagen.File(filepath, easy=True) if audio is None: return modified = False # Проверяем основные текстовые теги for key in ['title', 'artist', 'album', 'genre']: if key in audio and audio[key]: original_list = audio[key] new_list = [] for val in original_list: if is_mojibake(val): fixed_val = fix_text(val) print(f" [ИСПРАВЛЕНО] {key}: '{val}' -> '{fixed_val}' в файле {os.path.basename(filepath)}") new_list.append(fixed_val) modified = True else: new_list.append(val) if modified: audio[key] = new_list if modified: audio.save() print(f"✅ Успешно сохранено: {os.path.basename(filepath)}\n") except Exception as e: print(f"❌ Ошибка с файлом {filepath}: {e}") def main(): current_dir = os.getcwd() print(f"🔍 Сканирую папку и вложенные директории: {current_dir}\n") supported_extensions = ('.mp3', '.flac', '.m4a', '.ogg', '.wav') for root, dirs, files in os.walk(current_dir): for file in files: if file.lower().endswith(supported_extensions): filepath = os.path.join(root, file) process_file(filepath) print("🎉 Готово! Проверь коллекцию.") if __name__ == "__main__": main() |
установить пакет python3-mutagen и запустить fix-mp3-tags.py
|
1 2 3 4 |
sudo apt install -y python3-mutagen python3 fix-mp3-tags.py |
или по классике черех venv окружение
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# Создаем виртуальное окружение python3 -m venv .venv # Активируем его source .venv/bin/activate # Ставим mutagen и запускаем pip install mutagen python fix-mp3-tags.py # Когда закончишь, можно выйти из окружения и удалить его deactivate rm -rf .venv |
во время работы скрипт покажет лог вроде
|
1 2 3 4 5 6 |
[ИСПРАВЛЕНО] title: 'Ðàçóì êîãäà-íèáóäü ïîáåäèò' -> 'Разум когда-нибудь победит' в файле 05 Разум когда-нибудь победит.mp3 [ИСПРАВЛЕНО] artist: 'Ñìûñëîâûå ãàëëþöèíàöèè' -> 'Смысловые галлюцинации' в файле 05 Разум когда-нибудь победит.mp3 [ИСПРАВЛЕНО] album: '˸ä9' -> 'Лёд9' в файле 05 Разум когда-нибудь победит.mp3 ✅ Успешно сохранено: 05 Разум когда-нибудь победит.mp3 |
Перед запуском на большой библиотеке скопируй 5-10 файлов и протестируйте в отдельной папке. Удачи!
Author: | Tags:

Leave a Reply