2010-12-12 4 views
1

私は、.CUEファイルを使用してモノリシック音楽ファイルを個々のトラックに分割し、MP3でそれらをエンコードするスクリプトを作成していますCUEの正しいタグですべて正常に機能していますが、残念ながらユニコード文字(日本語の音楽のために常にそうである)が含まれていると、タグは(lameのコマンドライン引数を使って単純に適用すると)確実にiTunesでぎこちない表示になります。Python 3.1のバイトオブジェクトからシェルコマンドを実行する(またはPython 3.1でUTF-8 mp3タグを書く)

thisスクリプトで実行して修正できますが、それは実行する別のスクリプトであり、タグに引用符が付いていることがあります(修正できないバグ)。除去する。

これは、実行前にlameコマンド+引数文字列をUTF-8でエンコードすることですが、Python 3.1では文字列ではなくバイトからコマンドを実行するサポートがないようです。単に文字列を渡すだけで、間違ってエンコードされます。

また、タグ付けライブラリを使用してエンコードが完了した後にタグを挿入するだけではうれしいですが、そのようなソリューションは遅くてエレガントではありません。しかし、どんな提案も歓迎です!

ありがとうございます。

編集:私は(長い行のため申し訳ありませんが)このようlameを呼び出す:

args = "lame --tt \"{0}\" --tn {1:02d} --ta \"{2}\" --tl \"{3}\" \"{4}\" \"{5}.mp3\"".format(item.title, item.tracknumber, item.artist, albumObject.title, item.wavFile, "{0:02d} ".format(item.tracknumber) + item.title) 
#args = bytearray(args, "utf-8") 
retcode = subprocess.check_call(args) 
+1

をも、あなたが上でどのようなシステムです –

+0

あなたのスクリプトでラメ呼び出す方法を確認するために役立つだろう、次のように、あなたは、UTF-8でエンコードされたタグを設定することができますか? Windowsの場合、「デフォルトシステムコードページ」は日本語に設定されていますか? –

+0

私はOSXです。私が実行している端末はデフォルトでUTF-8です。 – Ripdog

答えて

1

あなたがタグライブラリを使用することを選択した場合は、eyeD3を見てもよいです。 - Windows版、Mac、Linuxの

import eyeD3 

tag = eyeD3.Tag ('file.mp3') 
tag.setVersion (eyeD3.ID3_V2_4) 
tag.setTextEncoding (eyeD3.UTF_8_ENCODING) 
tag.setArtist ('artist') 
tag.setAlbum ('album') 
tag.setTitle ('title') 
tag.update() 
+0

ありがとう。残念ながら、このモジュールはpython 3.1をサポートしていません。私はそれをやりますが、2.6にスクリプトをバックポートしなければならない場合は、おそらくMutagenを使用することになります。再度、感謝します – Ripdog

関連する問題