MP3の文字化けをmutagenのCLIツールで修正する
問題の現象
あるMP3ファイルをオーディオプレイヤーソフトで表示したときに、タイトルなどが文字化けして正しく表示されない現象に出会いました。
原因
タイトルなどの情報は、MP3ファイルの中にID3タグという形式で保存されています。
問題のMP3ファイルでは、ID3v2.2形式のタグが使われていました。この形式では、文字列のテキストエンコーディングとしてISO-8859-1とUTF-16の2種類をサポートしています。
該当ファイルに格納されていた文字列のデータでは、ISO-8859-1が指定されていました。ところが、実際の文字列はテキストエンコーディングにShift_JISが使われているようでした。
つまり、該当ファイルの文字列データの格納のしかたが規格に準拠していませんでした。このため、オーディオプレイヤーソフトで正しく表示できなかったわけです。
修正方法
ID3タグの編集ツールはいくつかあります。今回はmutagenを利用する方法を述べます。
mutagenはPython言語でID3タグを扱うためのライブラリです。このライブラリはCLIツールをいくつか提供しており、今回の問題はそのCLIツールのひとつであるmid3iconvを使えば対応できます。
ここではCLIツールの実行に、Pythonの管理ツールであるuvを利用します(もしuvをインストールしていなければインストールしてください)。次のコマンドをシェルで実行します。
uvx --from mutagen mid3iconv -e shift_jis *.mp3
これで、ID3タグ内の文字列をShift_JISからUTF-16に変換したうえで、テキストエンコーディングにUTF-16を指定してID3タグを再書き込みします。
補足:ID3タグの内容を見る方法
ID3タグの内容を見る方法をいくつか紹介します。
まず、mutagenのCLIツールのひとつであるmutagen-inspectを使う方法です。
uvx --from mutagen mutagen-inspect *.mp3
また、ID3タグを扱えるGUIアプリを使う方法もあります。たとえば、Kid3があります。
バイナリエディタでデータを直接見ても良いでしょう。次の記事が参考になります。
補足:ID3タグについて
ID3タグの内容を確認する際には、ID3についてもう少し知っておくと役に立ちます。
ID3タグは、大きくわけてID3v1とID3v2の2種類があります。
ID3v1は、ファイルの末尾に保存される固定長の形式です。使用可能な文字列の長さが短めです。また、テキストエンコーディングに関する規定がありません。
ID3v2は、ファイルの先頭に保存される可変長の形式です。ID3v2にはさらに、ID3v2.2、ID3v2.3、ID3v2.4の3種類があります。テキストエンコーディングはISO-8859-1とUTF-16(BOMあり)をサポートしており、ID3v2.4ではさらにUTF-16(BOMなし)とUTF-8をサポートしています。
ID3v1とID3v2は保存される場所が異なるため、同じファイルに共存できます。ただ、最近では主にID3v2が利用されています。ID3v1は削除しても問題ない場合が多いでしょう。
補足:uvxについて
CLIツールの実行にuvxコマンドを利用しました。
これはPythonの管理ツールuvに含まれるコマンドで、Pythonパッケージに含まれるツールを直接実行できる機能があります。次の記事が参考になります。
補足:mutagenについて
今回はmutagenのCLIツールを利用しました。
mutagenはPythonのライブラリであり、PythonでID3タグを扱うプログラムを書くために利用するのが本来の使いかたです。CLIツールはシンプルな機能しか提供していないため、もう少し複雑なことをしたい場合にはPythonでプログラムを書くのが良いでしょう。
Discussion