pythonでid3タグ(アルバム画像)
mp3とかの再生情報を表示させようと思って、
1年ぶりくらいにSamurizeを復活させてみた。
さしあたって今使っているfoobar2000の状態を表示させてみた。
http://samurize.xworks.org/wiki/?cmd=read&page=Introduction%2F%E3%83%97%E3%83%AC%E3%83%BC%E3%83%A4%E3%83%BC%E5%86%8D%E7%94%9F%E6%83%85%E5%A0%B1&word=ampi
まずは、曲名とか再生のプログレスバーの表示までは成功。
順調であります。
画像も表示させてみる。全然違う画像が出る。
これは、id3タグ内に埋めてあるのを表示するんで無くて
オンラインからダウンロードしてくる仕様ですな。
なんで埋め込み画像表示機能は無いのだろぅ・・・
せっかくなので、ampiから取ったファイルパスを元に
pythonスクリプトを活用して自前でなんとすることにした。
id3libをctypesで使う方針で活動開始。
かくしてid3libを諦めた。
仕方が無いので、画像フレームに対応した別のライブラリを探す。
で、eyeD3にたどり着く。
先人のログを参考にしつつ
http://sun.ap.teacup.com/applet/futot/msgcate2/archive
なんとか画像を抜き出して保存するスクリプトまで辿り着いた。
# -*- coding: utf8 -*- import string import eyeD3 def printID3(file): print "## %s" % (file) tag = eyeD3.Tag() tag.link(file) print fixEncoding(tag.getArtist()) print fixEncoding(tag.getAlbum()) print fixEncoding(tag.getTitle()) tag.getImages()[0].writeFile() def fixEncoding(buf, encoding='cp932'): rowstr = string.join( [ chr(ord(x)) for x in buf ], "") return unicode(rowstr, encoding) if __name__ == '__main__': file=u'test.mp3' printID3(file)
eye3Dは素だとタグがasciiもしくはunicodeの時のみ正常に動作するっぽい。
我が国伝統のsjisタグはだめ。
pythonでの文字コード変換とかunicodeの扱いについてのクンフーを積んだ。