コマンドラインのmp3 id3 タグ編集ツール
linux のコマンドラインで id3v2 を編集するやつってたくさんある割にろくなものがなくて、文字化けしたり正しいフォーマットで書きこめなかったりするのだけど、とりあえず使える方法を見つけたのでメモ
eyeD3 をとりあえず使う。python で書かれた id3 タグ編集ツール。そこそこよくできているけど、正しく文字コードを扱わない。
$ echo $LANG ja_JP.UTF-8 $ eyeD3 --version eyeD3 0.6.14 (C) Copyright 2002-2007 Travis Shirk <travis@pobox.com> $ eyeD3 --set-encoding=utf16-LE --to-v2.3 --artist "ふー" --title "ばぁー" foo.mp3 foo.mp3 [ 6.01 MB ] -------------------------------------------------------------------------------- Time: 6:34 MPEG1, Layer III [ 128 kb/s @ 44100 Hz - Joint stereo ] -------------------------------------------------------------------------------- Setting artist: ふー Setting title: ばぁー Converting tag to ID3 version v2.3 Writing tag... ID3 v2.3: title: ã°ãã¼ artist: ãµã¼ album: year: None track: UserTextFrame: [Description: Tagging time] 2009-05-21T15:39:24
というふうに、頑張って書いてくれるのはいいけど、自分で書いたやつをちゃんと読みだせていない。
とりあえず決め打ちでちゃんと書けてくれさえすればいいので
#!/usr/bin/env python
import eyeD3
import os, sys
from optparse import OptionParser
parser = OptionParser(usage=u'%prog [opts] target.mp3')
parser.add_option("-T", "--title",
dest = "title",
action = "store",
type = "string",
)
parser.add_option("-A", "--artist",
dest = "artist",
action = "store",
type = "string",
)
parser.add_option("-L", "--album",
dest = "album",
action = "store",
type = "string",
)
(options, args) = parser.parse_args(sys.argv[1:])
if not len(args) == 1:
sys.stderr.write("requires target.mp3")
exit();
target = args[0]
tag = eyeD3.Tag()
tag.link(target)
tag.header.setVersion(eyeD3.ID3_V2_3)
tag.setTextEncoding( eyeD3.UTF_16_ENCODING )
if options.title:
tag.setTitle( unicode(options.title, 'UTF-8') )
if options.artist:
tag.setArtist( unicode(options.artist, 'UTF-8') )
if options.album:
tag.setAlbum( unicode(options.album, 'UTF-8') )
tag.update()
os.execlp("eyeD3", "", target)というのを非常に頑張って書いた。Python 無理です。
なんかこれだと foobar2000 で場合によって文字化けする。なんなんだろ…… 判定に失敗するんだろうか。
firefly (mt-daap) だと大丈夫なんだけどなぁ。なんで id3 をまともに付けられる/読める環境になってないんだろ