ID3タグ、M4Aタグ、FLACタグの間の変換を抽象化
質問
私は、例えば、取ることが容易になりますのpythonやbashでリソースを探しているmp3ファイルXとM4AファイルY及び「YにXさんのタグをコピー」と言っています。
Pythonの「変異原」モジュールは、一般的に、タグをmanupulatingための素晴らしいですが、タグの種類をまたがる「アーティストフィールド」のない抽象的な概念はありません。私はすべての厄介ビットを処理し、フィールド名等価性を知っているライブラリをしたいです。情報が失われたり、ベスト推測されていないすべてのタグシステムが表現できるもののために、私は大丈夫だよ。
(ユースケース:。私は、毎月聴くためのMP3ファイルを使用して行くか、そう、私は私が作ったものは何でも、タグの変更で「マスター」ロスレスファイルを更新できるようにしたい、mp3にロスレスファイルをエンコードMP3ファイル。私はフォーマット間の実装の違いに私のつま先をスタブの疲れ。)
解決
私はこの正確な事を必要とし、私は、あまりにも、変異原は、この種のものを行うには遠く、十分な抽象化ではないことをすぐに実感しました。幸いなことに、変異原の著者は、彼らのメディアプレーヤー QuodLibet のためにそれを必要とします。
私はそれを使用する方法を見つけるためにQuodLibetソースから掘っていたが、私はそれを理解したら、私は<強いへのコマンドラインと同等であることを意図しているのsequiturのと呼ばれるユーティリティを書きました> ExFalso の(QuodLibetのタグ付けコンポーネント)。これは、この抽象化メカニズムを使用して、いくつか追加された抽象化と機能を提供します。
あなたがソースをチェックアウトしたい場合は、easy_install QLCLI
exfalso / quodlibet(結果的にsequitur)について、心に留めておくべき一つのことは、彼らが実際にファイルの種類がそれを禁止しない限り、すべてのタグは、その多くがされていない、(複数の値をサポートすることを意味し、適切に音声メタデータを実装することです行う)。だから、のようなものをやってます:
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)
他のヒント
私は正確には、 atwat-鬼を行いbashスクリプトを持っています。これは、FLAC、MP3、OGGやMP4ファイルをサポートしています。
usage: `atwat-tagger.sh inputfile.mp3 outputfile.ogg`
私はあなたのプロジェクトがすでに終了している知っているが、検索エンジンを介してこのページを見つけた誰かがそれが役に立つかもしれません。
ここではいくつかのサンプルコード、私が間にタグをコピーするために書いたスクリプトがあります
QUOD Libetの音楽フォーマットクラス(ない変異原さんを!)を使用してファイル。走る
それは、ちょうどcopytags.py src1 dest1 src2 dest2 src3 dest3
を行い、それ
既存のタグを削除した後(DEST1するSEC1内のタグをコピーします
DEST1に!)、など。あなたが微調整しなければならないブラックリストを、注意してください
あなた自身の好み。ブラックリストは、特定のタグを防ぐことができますだけでなく、
コピーされることから、それはまた、中に上書きされてからそれらを防ぐことができます
先のファイルます。
明確にするため、QUOD Libetの形式にとらわれないタグ付けは変異原の機能ではありません。それは、の変異原性物質の上にの実装されています。あなたはフォーマットに依存しないタグ付けをしたいのであれば、あなたの代わりにquodlibet.formats.MusicFile
のあなたのファイルを開くにはmutagen.File
を使用する必要があります。
コードは、今ここで見つけることができます: https://github.com/DarwinAwardWinner/copytagsする
あなたはまた、同時にトランスコーディングを行いたい場合は、これを使用する: https://github.com/ DarwinAwardWinner / transfercoderする
私のための1つの重要な詳細はQUOD Libetの音楽フォーマットクラスということでした
私の中config.init
ラインしたがって、QLの設定がロードされることを期待
脚本。ロードまたは保存するときにそのなければ、私はエラーのすべての種類を取得します
ファイルます。
私は「標準」のタグだけでなく、任意のタグを、FLAC、OGG、およびmp3の間でのコピーのためにこのスクリプトをテストしています。これは、これまでに完全に働いています。
私はQLLibを使用していないことをの理由のためとして、それは私のために動作しませんでした。私はそれが私がしたのと同じ設定関連のエラーを得ていたが、黙ってそれを無視して、単にタグを記述するために失敗した疑います。
あなただけの「抽象タグ」タイプの各形式で各タグ名のマッピングを持つシンプルなアプリを作成し、その後、1から他に変換するその簡単なことができます。あなたも、すべての利用可能なタイプを知っている必要はありません - 。ちょうどあなたが興味あるもの
おそらくあまり時間の投資の週末、プロジェクトの種類、のように私には思えます。楽しみを持って、そして私はあなたの実装でのぞき見を取っても、それを使用して気にしないだろう - 。あなたが:-)もちろん、それを解放する気にしない場合は、
うまく動作しているようですtagpyは、もあります。