ID3 etiketlerinin kodlamasını onarın


12

Yaklaşık 2000 MP3 dosyasını miras aldım. Çoğunluğu için, ID3 etiketleri Amarok'ta bozuk görünüyor . ID3 etiketlerini v2.4 türüne $03(yani UTF-8 kodlaması) yükselten, herhangi bir v1 etiketini kaldıran ve ayrıca orijinal kodlamayı duruma göre (büyük olasılıkla biri Windows-1252, BOM'siz UTF-16 veya GB18030).

Bunu TagLib'in üstünde kendi başıma programlamaya başlamadan önce, kullanabileceğim tam bir çözüm var mı?

Musicbrainz'i önermeyin - Amerika Birleşik Devletleri'nde yayınlanan müziğe ağır önyargılı ve benim için neredeyse işe yaramaz. Genel ID3 etiketleme yazılımını ilk olarak gereksinimlerime göre test etmeden önermeyin - çoğu

  • v2.4'ü desteklemeyin
  • açıkçası, karakter kodlama hakkında sessiz geciktirilmiş fikirleri var
  • otomasyon özelliklerine sahip değil (zamanımı manuel olarak düzenlemek için harcamak istemiyorum).

Ayrıca (henüz) yalnızca etiket temizleme, toplu yeniden adlandırma veya sınıflandırma yazılımlarıyla ilgilenmiyorum; Önce yukarıda belirtilen normalleştirme adımını yaptım.

Yanıtlar:


9

Quod Libet projesine dahil olan etiket editörü Ex Falso'yu istiyorsunuz . Picard (MusicBrainz etiketleyici) aynı etiketleme kitaplığını kullanabilir, ancak QL bunu oluşturdu.

Özellikle, id3v2.4'ü destekleyen Mutagen etiketleme kütüphanesini istiyorsunuz (ve "destekle" demek istiyorum "zorla ... ... askeri olarak ...). Karakter kodlamaları ile de mükemmeldir ve temel bir komut dosyası komut satırı tagger ( mid3v2) içerir. Normalleştirme adımınıza gelince, Mutagen etiketleri yalnızca ID3v2.4'e kaydeder. Kesinlikle tüm metni UTF-8'e dönüştürme yeteneğine sahiptir, ancak kendiniz betiği yazmanız gerekebilir ( mid3v2aracın varsayılanlarının geçerli kodlamayı mümkün olan yerde tutmak olduğuna inanıyorum ve kaydetmesi söylenip söylenemeyeceğini bilmiyorum belirli bir kodlamadaki her şey). Mutagen Python'da yazılmıştır.

Ex Falso güzel, temiz bir GUI'dir ve beklediğiniz büyük retag-çoklu dosya özelliklerinin çoğunu destekler. Ben internet aramaları yolunda çok şey olduğunu sanmıyorum ve albüm sanat ile nasıl olduğunu bilmiyorum - Quod Libet bunu destekleyebilir; Ex Falso , varsa, bir eklenti ile yapabilir , ancak mevcut olmayabilir. Bu işlevselliğe hiç ihtiyacım olmadı - EF'i ve mid3v2yeniden etiketleme ihtiyaçlarını karşılamak için birlikte kullanıyorum.

Ex Falso, Quod Libet projesinin bir parçası


mid3v2çözümün sadece yarısıdır. Denedikten sonra, muzdarip olduğum yanlış tanımlanmış kodlamalar ile kesinlikle iyi değil, yani yükseltilmiş bir ID3 etiketi Amarok'ta hala yanlış görüntüleniyor. Mutagen, »orijinal kodlamayı anlama konusunda akıllım«; bu standart olarak uyumlu, ama dağınık gerçek dünya için işe yaramaz bir şekilde Latin1/ varsayar Windows-1252. Şu anda bu cevabı kabul etmeme eğilimindeyim; Diğer cevaplar için birkaç gün daha fırsat vereceğim. İyi bir şey gelmezse kabul edilirsiniz.
daxim

mükemmel kabul edilebilir. bir python kodlayıcıysanız, a) mevcut etikette okumak için Mutagen kullanan bir komut dosyası yazmayı düşünebilirsiniz, b) bazı akıllı dönüşüm adımları gerçekleştirin (kaynak kodlamasından şüphelendiğiniz veya bildiğinize göre) ve c ) yeni bir etiket yazın. esas olarak mid3v2çok parlak olmayan dönüşüm adımı gibi geliyor ve bu beni şaşırtmıyor ... ama iconvpython'un daha akıllı olan ve bir DIY için yararlı olabilecek bazı karakter kodlama modülleri (belki de benzer) olduğunu düşünüyorum er.
quack quixote

kendim bir python kodlayıcı değilim ya da daha yararlı önerilerim olurdu. belki kendi script'inizi yazmanız durumunda stackoverflow'daki birisi daha iyi fikirlere sahip olabilir.
quack quixote

9

Yanlış etiketlenmiş kodlama seçiminizi düzelten bağımsız bir uygulama bulacağınızı sanmıyorum. Cp1252, UTF-16 ve GB-18030'un karışımı oldukça sıra dışı ve mevcut yazılımın bunu otomatik olarak çözebileceğini düşünmüyorum.

Bu yüzden Mutagen'i indirir ve bilinmeyen kodlamaları nasıl düzelteceğiniz konusunda kendi kararlarınızı otomatikleştirmek için özel bir Python betiği yazarım. Örneğin:

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()

Yukarıdaki komut dosyası birkaç varsayımda bulunur:

  1. Yalnızca 0 kodlamasında işaretli olan etiketler yanlıştır. (Görünüşte 0 kodlaması ISO-8859-1'dir, ancak pratikte genellikle Windows varsayılan kod sayfasıdır.)

  2. Bir etiket UTF-8 veya UTF-16 kodlamasında olarak işaretlenirse, doğru olduğu varsayılır ve henüz değilse UTF-8'e dönüştürülür. Şahsen daha önce yanlışlıkla UTF (1-3 kodlamaları) olarak işaretlenmiş ID3s görmedim. Neyse ki, 0 kodlaması orijinal baytlarına geri döndürülebilir, çünkü ISO-8859-1 sıralı bayt değerlerinin 1'e 1 doğrudan eşlemesidir.

Bir kodlama 0 etiketi karşılandığında, komut dosyası önce GB18030 olarak yeniden düzenlemeye çalışır, ardından geçerli değilse kod sayfasına geri döner 1252. cp1252 gibi tek baytlı kodlamalar çoğu bayt dizisiyle eşleşmeye eğilimlidir, bu yüzden bunları koymak en iyisidir kodlama listesinin sonunda denenecek.

Cp1251 Cyrillic veya arka arkaya birden fazla aksanlı karakter içeren bir çok cp1252 dosya adı gibi GB18030 ile karıştırılan başka kodlamalarınız varsa, bir çeşit akıllı tahmin algoritmasına ihtiyacınız olacaktır. Belki de ne tür karakterlerin mevcut olacağını tahmin etmek için dosya adına bakın?


+1, güzel bir örnek komut dosyası ve ne yaptığı ve hangi varsayımları hakkında iyi bir açıklama. onları daha belirgin hale getirmek için onları bölmek; umarım aldırmazsın.
quack quixote

0

Şarap ile Mp3Tag ne dersin ?

Özellikler (diğerleri arasında):

Toplu Etiket Düzenleme Aynı anda birden çok dosyaya ID3v1.1, ID3v2.3, ID3v2.4 , MP4, WMA, APEv2 Etiketleri ve Vorbis Yorumları yazın.

Amazon'dan içe aktarma, diskler, freedb, MusicBrainz Amazon, diskolar, freedb, MusicBrainz ve daha fazlası gibi çevrimiçi veritabanlarından yazarak etiketleri içe aktarın.

Karakterleri veya kelimeleri değiştirme Etiketlerdeki ve dosya adlarındaki dizeleri değiştirin (Normal İfadeler desteğiyle).

Tam Unicode Desteği Kullanıcı arayüzü ve etiketleme tamamen Unicode uyumludur.



-1

ayrıca EasyTag var

EasyTAG, MP3, MP2, MP4 / AAC, FLAC, Ogg Vorbis, MusePack, Monkey's Audio ve WavPack dosyaları için etiketleri görüntülemek ve düzenlemek için bir yardımcı programdır. Basit ve hoş GTK + arayüzü, GNU / Linux veya Windows altında etiketlemeyi kolaylaştırır.

Ayrıca Windows Media Player 2.4'ü desteklemediğinden id3v2.3'ün genellikle tercih edilen biçim olduğunu bilmek isteyebilirsiniz.


v2.4 spec takip ısrar eden millet genellikle Windows Media Player'ın desteklediği veya desteklemediği şeylerle ilgilenmez ...
quack quixote
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.