私は約2000のMP3ファイルを継承しています。それらの大多数にとって、それらの ID3タグは文字化けして表示されます Amarokで。 ID3タグをv2.4タイプにアップグレードするソフトウェアが必要です$03
(つまり、UTF-8エンコーディング)、v1タグをすべて削除し、ケースバイケースで元のエンコーディングを把握することも賢明です(ほとんどの場合、Windows-1252、BOMレスUTF-16、またはGB18030のいずれか)。 )。
TagLibの上でこれを自分でプログラミングし始める前に、私が使用できるそのような完全なソリューションはすでにありますか?
Musicbrainzはお勧めしません。米国で公開されている音楽に大きく偏っており、私にはほとんど役に立たないのです。私の要件に対して最初にテストせずに、一般的なID3タグ付けソフトウェアを推奨しないでください-それらのほとんど
また、タグクリーニング、一括名前変更、または分類ソフトウェアのみには(まだ)興味がありません。私は最初に前述の正規化ステップを実行しました。
Quod Libet プロジェクトに含まれているタグエディタであるExFalsoが必要です。 Picard(MusicBrainzタガー)は同じタグ付けライブラリを使用できますが、QLがそれを作成しました。
特に、id3v2.4をサポートする Mutagenタグ付けライブラリ が必要です(「サポート」とは、「強制」を意味します...軍事的に...)。また、文字エンコードにも優れており、基本的なスクリプト可能なコマンドラインタガー(mid3v2
)が含まれています。正規化の手順に関する限り、MutagenonlyはタグをID3v2.4に保存します。確かにすべてのテキストをUTF-8に変換することはできますが、自分でスクリプトを作成する必要があるかもしれません(mid3v2
ツールのデフォルトは可能な限り現在のエンコーディングを維持することだと思いますが、それかどうかはわかりませんすべてを特定のエンコーディングで保存するように指示できます)。変異原はPythonで書かれています。
Ex FalsoはすてきでクリーンなGUIであり、期待される主要なretag-multiple-files機能のほとんどをサポートします。私はそれがインターネット検索の方法であまり効果がないと思います、そして私はそれがアルバムアートワークでどうであるかわかりません-QuodLibetはそれをサポートするかもしれません。 Ex Falso canプラグインが存在する場合は、存在しない可能性がありますが、プラグインを使用して実行します。その機能は必要ありませんでした。EFとmid3v2
を組み合わせて使用して、タグの付け直しのニーズを処理しています。
誤ってタグ付けされたエンコーディングの特定の選択を修正するスタンドアロンアプリケーションを見つけるつもりはないと思います。 cp1252、UTF-16、GB-18030が混在していることは非常に珍しいことであり、既存のソフトウェアでそれを自動的に解決できるとは思いません。
だから私は Mutagenをダウンロード そしてカスタムPythonスクリプトを書いて、未知のエンコーディングを修正する方法についてのあなた自身の決定を自動化するでしょう。例:
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()
上記のスクリプトは、いくつかの仮定を行っています。
エンコーディング0であるとマークされたタグのみが間違っています。 (表面上は0をエンコードするのはISO-8859-1ですが、実際にはWindowsのデフォルトのコードページであることがよくあります。)
タグがUTF-8またはUTF-16エンコーディングであるとマークされている場合、それは正しいと見なされ、まだそうでない場合は単にUTF-8に変換されます。個人的には、UTF(エンコード1〜3)としてマークされたID3が誤って表示されたことはありません。幸い、ISO-8859-1は序数のバイト値を1対1で直接マッピングしているため、0をエンコードすると元のバイトに簡単に復元できます。
エンコーディング0タグが満たされると、スクリプトは最初にそれをGB18030として再キャストしようとします。次に、それが有効でない場合は、コードページ1252にフォールバックします。cp1252のようなシングルバイトエンコーディングは、ほとんどのバイトシーケンスに一致する傾向があるため、それらを配置することをお勧めします。試行するエンコーディングのリストの最後にあります。
Cp1251キリル文字のような他のエンコーディング、またはGB18030と間違われる、複数のアクセント付き文字が連続したcp1252ファイル名が多数ある場合は、ある種の巧妙な推測アルゴリズムが必要になります。たぶん、ファイル名を見て、どのような種類の文字が存在する可能性が高いかを推測しますか?
機能(とりわけ):
バッチタグ編集ID3v1.1、ID3v2.3、ID3v2.4、MP4、WMA、APEv2タグ、Vorbisコメントを一度に複数のファイルに書き込みます。
Amazon、discogs、freedb、MusicBrainzからインポート入力を保存し、Amazon、discogs、freedb、MusicBrainzなどのオンラインデータベースからタグをインポートします。
文字または単語を置き換えるタグおよびファイル名の文字列を置き換えます(正規表現のサポートあり)。
Unicodeの完全サポートユーザーインターフェイスとタグ付けは、Unicodeに完全に準拠しています。