Napraw kodowanie tagów ID3

12

Odziedziczyłem około 2000 plików MP3. Dla większości z nich ich tagi ID3 są zniekształcone w Amaroku. Potrzebuję oprogramowania, które uaktualnia tagi ID3 do typu v2.4 $03(tj. Kodowanie UTF-8), usuwa wszelkie tagi v1, a także sprytnie zastanawia się nad oryginalnym kodowaniem w poszczególnych przypadkach (najprawdopodobniej jednym z Windows-1252, bez BOM UTF-16 lub GB18030).

Czy zanim rozpocznę samodzielne programowanie tego na TagLib, istnieje już tak kompletne rozwiązanie, którego mógłbym użyć?

Nie polecam Musicbrainz - jest to stronnicze w stosunku do opublikowanej w Stanach Zjednoczonych muzyki i prawie dla mnie bezużyteczne. Nie polecam ogólnego oprogramowania do tagowania ID3 bez uprzedniego przetestowania go pod kątem moich wymagań - większość z nich

  • nie obsługują v2.4
  • szczerze mówiąc, mam cicho opóźnione pomysły na temat kodowania znaków
  • nie mają funkcji automatyzacji (nie chcę spędzać czasu na ręcznej edycji).

Nie jestem (jeszcze) zainteresowany wyłącznie oprogramowaniem do czyszczenia tagów, masowej zmiany nazw lub kategoryzacji; Najpierw zrobiłem wyżej wspomniany krok normalizacyjny.

daxim
źródło

Odpowiedzi:

9

Chcesz Ex Falso, edytora tagów zawartego w projekcie Quod Libet . Picard (tagger MusicBrainz) może korzystać z tej samej biblioteki tagów, ale QL ją stworzył.

W szczególności potrzebujesz biblioteki tagowania Mutagen, która obsługuje id3v2.4 (a przez „wsparcie” mam na myśli „wymuszanie” ... wojskowo ...). Jest także doskonały do ​​kodowania znaków i zawiera podstawowy skryptowy tagger ( mid3v2). Jeśli chodzi o etap normalizacji, Mutagen zapisuje tagi tylko w ID3v2.4. Z pewnością jest w stanie przekonwertować cały tekst na UTF-8, ale może być konieczne samodzielne wykonanie skryptu (uważam, że mid3v2domyślnym narzędziem jest utrzymanie obecnego kodowania tam, gdzie to możliwe, i nie wiem, czy można mu powiedzieć, aby zapisać wszystko w określonym kodowaniu). Mutagen jest napisany w języku Python.

Ex Falso jest ładnym, czystym graficznym interfejsem użytkownika i obsługuje większość głównych funkcji retag-wielu plików, których można oczekiwać. Nie sądzę, żeby miało to duży wpływ na wyszukiwanie w Internecie i nie wiem, jak to jest z grafiką albumów - Quod Libet może to wspierać; Ex Falso może to zrobić za pomocą wtyczki, jeśli taka istnieje, choć może nie istnieć. Nigdy nie potrzebowałem tej funkcjonalności - używam EF i mid3v2zgodnie z potrzebami, aby zmienić tag.

Ex Falso, część projektu Quod Libet

quack quixote
źródło
mid3v2to tylko połowa rozwiązania. Po wypróbowaniu zdecydowanie nie jest to dobre z błędnie zidentyfikowanymi kodowaniami, na które cierpię, tj. Ulepszony tag ID3 nadal wyświetla się nieprawidłowo w Amaroku. Mutagen nie spełnia moich wymagań dotyczących „mądrego zrozumienia oryginalnego kodowania”; beztrosko przyjmuje Latin1/ Windows-1252, co jest zgodne ze standardem, ale bezużyteczne w nieuporządkowanym świecie rzeczywistym. Jestem skłonny nie zaakceptować tej odpowiedzi w tej chwili; Dam jeszcze kilka dni na inne odpowiedzi. Jeśli nic dobrego nie przyjdzie, zostaniesz zaakceptowany.
daxim
całkowicie do przyjęcia. jeśli jesteś koderem python, możesz rozważyć napisanie skryptu, który używa Mutagena do a) odczytania istniejącego znacznika, b) wykonania pewnych inteligentnych kroków konwersji (w oparciu o to, co podejrzewasz lub znasz kodowanie źródłowe), oraz c ) napisz nowy tag. wygląda na to, że jest to głównie etap konwersji, który mid3v2nie jest zbyt jasny, i to mnie nie dziwi ... ale myślę, że python ma jakieś moduły kodowania znaków (być może iconvlub podobne), które są mądrzejsze i mogą być przydatne dla majsterkowiczów er.
quack quixote
sam nie jestem koderem w Pythonie lub miałbym kilka użytecznych sugestii. może ktoś na stackoverflow miałby lepsze pomysły, gdybyś napisał własny skrypt.
quack quixote
9

Nie sądzę, że znajdziesz samodzielną aplikację, która naprawi twój wybór nieprawidłowo oznakowanych kodowań. Posiadanie mieszaniny cp1252, UTF-16 i GB-18030 jest dość niezwykłe i nie sądzę, aby istniejące oprogramowanie mogło rozwiązać to automatycznie.

Pobrałbym więc Mutagen i napisałem niestandardowy skrypt w języku Python, aby zautomatyzować własne decyzje dotyczące naprawy nieznanych kodowań. Na przykład:

musicroot= ur'C:\music\wonky'
tryencodings= 'gb18030', 'cp1252'

import os
import mutagen.id3

def findMP3s(path):
    for child in os.listdir(path):
        child= os.path.join(path, child)
        if os.path.isdir(child):
            for mp3 in findMP3s(child):
                yield mp3
        elif child.lower().endswith(u'.mp3'):
            yield child

for path in findMP3s(musicroot):
    id3= mutagen.id3.ID3(path)
    for key, value in id3.items():
        if value.encoding!=3 and isinstance(getattr(value, 'text', [None])[0], unicode):

            if value.encoding==0:
                bytes= '\n'.join(value.text).encode('iso-8859-1')
                for encoding in tryencodings:
                    try:
                        bytes.decode(encoding)
                    except UnicodeError:
                        pass
                    else:
                        break
                else:
                    raise ValueError('None of the tryencodings work for %r key %r' % (path, key))
                for i in range(len(value.text)):
                    value.text[i]= value.text[i].encode('iso-8859-1').decode(encoding)

            value.encoding= 3
    id3.save()

Powyższy skrypt zawiera kilka założeń:

  1. Tylko tagi oznaczone jako będące w kodowaniu 0 są nieprawidłowe. (Pozornie kodowanie 0 to ISO-8859-1, ale w praktyce często jest to domyślna strona kodowa systemu Windows).

  2. Jeśli znacznik jest oznaczony jako kodowany w UTF-8 lub UTF-16, zakłada się, że jest poprawny i po prostu przekonwertowany na UTF-8, jeśli jeszcze nie jest. Osobiście nie widziałem wcześniej ID3 oznaczonych jako UTF (kodowanie 1-3). Na szczęście kodowanie 0 jest łatwe do odzyskania w oryginalnych bajtach, ponieważ ISO-8859-1 to bezpośrednie mapowanie wartości bajtów porządkowych 1 do 1.

Po spełnieniu znacznika kodującego 0 skrypt próbuje najpierw przekształcić go w GB18030, a następnie, jeśli jest niepoprawny, wraca do strony kodowej 1252. Kodowania jednobajtowe, takie jak cp1252, będą zwykle pasować do większości sekwencji bajtów, więc najlepiej je umieścić na końcu listy kodowań do wypróbowania.

Jeśli masz inne kodowania, takie jak cp1251 Cyrylica lub wiele nazw plików cp1252 z wieloma znakami akcentowanymi z rzędu, które mylą się z GB18030, będziesz potrzebować jakiegoś sprytniejszego algorytmu zgadywania. Może spójrz na nazwę pliku, aby odgadnąć, jakie znaki mogą być obecne?

Bobin
źródło
+1, fajny przykładowy skrypt i dobre wyjaśnienie tego, co robi i jakie przyjmuje założenia. rozdzieliłem je, aby były bardziej oczywiste; mam nadzieję, że nie masz nic przeciwko.
szarlatan
0

Co powiesz na Mp3Tag with Wine ?

Funkcje (między innymi):

Batch Tag Edycja Zapis ID3v1.1, ID3v2.3, ID3v2.4 , MP4, WMA, APEv2 tagi i Vorbis Comments do wielu plików naraz.

Importuj z Amazon, discogs, freedb, MusicBrainz Zapisz pisanie i importuj tagi z internetowych baz danych, takich jak Amazon, discogs, freedb, MusicBrainz i inne.

Zamień znaki lub słowa Zamień ciągi znaków w tagach i nazwach plików (z obsługą wyrażeń regularnych).

Pełna obsługa Unicode Interfejs użytkownika i oznaczanie są w pełni zgodne z Unicode.

cschol
źródło
-1

jest też EasyTag

EasyTAG to narzędzie do przeglądania i edycji znaczników dla plików MP3, MP2, MP4 / AAC, FLAC, Ogg Vorbis, MusePack, Monkey's Audio i WavPack. Prosty i przyjemny interfejs GTK + ułatwia tagowanie w systemach GNU / Linux lub Windows.

możesz także chcieć wiedzieć, że id3v2.3 jest zwykle preferowanym formatem, ponieważ Windows Media Player nie obsługuje 2.4

Aleksiej Jakowenko
źródło
ludzie, którzy nalegają na przestrzeganie specyfikacji v2.4, na ogół nie są zainteresowani tym, co program Windows Media Player obsługuje lub nie obsługuje ...
quack quixote