私はまさにこれが必要であり、私もすぐに、変異原がこの種のことを行うのに十分なほど遠く離れた抽象化ではないことに気付きました. 幸いなことに、mutagen の作成者は、メディア プレーヤーQuodLibetにそれを必要としていました。
QuodLibet のソースを掘り下げて使用方法を調べる必要がありましたが、一度理解してから、ExFalso (QuodLibet のタグ付けコンポーネント)と同等のコマンド ラインを意図したsequiturというユーティリティを作成しました。この抽象化メカニズムを使用し、いくつかの追加の抽象化と機能を提供します。
ソースを確認したい場合は、最新の tarball へのリンクを次に示します。このパッケージは、実際には 3 つのコマンド ライン スクリプトと、QL とのインターフェイス用のモジュールのセットです。全体をインストールする場合は、次を使用できます。
easy_install QLCLI
exfalso/quodlibet (およびその結果として sequitur) について留意すべきことの 1 つは、それらが実際にオーディオ メタデータを適切に実装しているということです。つまり、すべてのタグが複数の値をサポートしていることを意味します (ファイルの種類によって禁止されている場合を除きますが、これを行うものは多くありません)。したがって、次のようなことを行います。
print qllib.AudioFile('foo.mp3')['artist']
単一の文字列を出力するのではなく、次のような文字列のリストを出力します。
[u'The First Artist', u'The Second Artist']
タグをコピーするためにそれを使用する方法は、次のようになります。
import os.path
import qllib # this is the module that comes with QLCLI
def update_tags(mp3_fn, flac_fn):
mp3 = qllib.AudioFile(mp3_fn)
flac = qllib.AudioFile(flac_fn)
# you can iterate over the tag names
# they will be the same for all file types
for tag_name in mp3:
flac[tag_name] = mp3[tag_name]
flac.write()
mp3_filenames = ['foo.mp3', 'bar.mp3', 'baz.mp3']
for mp3_fn in mp3_filenames:
flac_fn = os.path.splitext(mp3_fn)[0] + '.flac'
if os.path.getmtime(mp3_fn) != os.path.getmtime(flac_fn):
update_tags(mp3_fn, flac_fn)