14

たとえば、mp3ファイルXとm4aファイルYを簡単に取得して、「XのタグをYにコピーする」と言うPythonまたはbashのリソースを探しています。

Pythonの「変異原」モジュールは、一般的にタグを操作するのに最適ですが、さまざまなタイプのタグにまたがる「アーティストフィールド」の抽象的な概念はありません。すべての厄介なビットを処理し、フィールド名の同等性を知っているライブラリが必要です。すべてのタグシステムが表現できるわけではないことについては、情報が失われたり、推測されたりしても大丈夫です。

(ユースケース:ロスレスファイルをmp3にエンコードしてから、mp3を使用してリスニングします。毎月かそこらで、mp3に加えたタグの変更で「マスター」ロスレスファイルを更新できるようにしたいです。Iフォーマット間の実装の違いに気を配るのにうんざりしています。)

4

5 に答える 5

9

私はまさにこれが必要であり、私もすぐに、変異原がこの種のことを行うのに十分なほど遠く離れた抽象化ではないことに気付きました. 幸いなことに、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)
于 2009-03-30T22:04:09.823 に答える
2

これは、Quod Libet の音楽形式クラス (mutagen のクラスではありません!) を使用してファイル間でタグをコピーするために作成したスクリプトです。実行するには、 を実行するだけでcopytags.py src1 dest1 src2 dest2 src3 dest3、sec1 のタグが dest1 にコピーされます (dest1 の既存のタグをすべて削除した後!)。自分の好みに合わせて調整する必要があるブラックリストに注意してください。ブラックリストは、特定のタグがコピーされるのを防ぐだけでなく、宛先ファイルでそれらが上書きされるのも防ぎます。

明確にするために、Quod Libet の形式にとらわれないタグ付けは、変異原性の機能ではありません。変異原の上に実装されています。したがって、形式にとらわれないタグ付けが必要な場合はquodlibet.formats.MusicFile、ファイルを開くためにmutagen.File.

コードはここにあります: https://github.com/DarwinAwardWinner/copytags

同時にトランスコーディングも行いたい場合は、https ://github.com/DarwinAwardWinner/transfercoder を使用してください。

私にとって重要な詳細の 1 つは、Quod Libet の音楽形式クラスが QL の構成が読み込まれることを期待していることでした。したがって、config.init私のスクリプトの行はそのためです。それがないと、ファイルのロードまたは保存時にあらゆる種類のエラーが発生します。

「標準」タグと任意のタグを使用して、flac、ogg、および mp3 間でコピーするためにこのスクリプトをテストしました。これまでのところ完璧に機能しています。

QLLib を使用しなかった理由としては、うまくいきませんでした。私と同じ構成関連のエラーが発生していたのではないかと思いますが、黙ってそれらを無視し、単にタグの書き込みに失敗していました.

于 2009-11-03T07:42:52.620 に答える
2

まさにそれを行う bash スクリプトatwat-tagger があります。flac、mp3、ogg、mp4 ファイルをサポートしています。

usage: `atwat-tagger.sh inputfile.mp3 outputfile.ogg`

あなたのプロジェクトはすでに終了していることは承知していますが、検索エンジンでこのページを見つけた人にとっては役に立つかもしれません。

于 2011-08-16T21:00:29.290 に答える
0

うまく機能しているように見えるtagpyもあります。

于 2009-04-11T21:38:10.393 に答える