私のコメントで言いましたように、MP4とMP3は異なるコンテナであり、メタデータを格納するために全く異なる構造を使用します。技術的には、MP4メタデータ内のID3フィールドをエンコードすることができますが、それを行う方法はたくさんあり、その結果、自分の構造をプッシュする最善の方法を持っていると思うので、その使用はタグ/プレーヤーに大きく左右されます。
MP3コンテナ用のID3とは何ですか、XMP
はMP4/M4Aコンテナ用です(また、JPEG、PDF、さらにMP3などの他の多くのコンテナ用です)。ただし、XMPは実際の標準で、ID3は(元々はMP3ファイルの最後に追加された最後の構造であった)後で考えてみると、WinAmp、foobar2000などのような大衆的な人気を誇るプレイヤーが主体になっていました。これとは対照的に、XMPは本質的に原子フィードのような構造である(なぜなら、mp4タグは同じものを指していなくても「原子」とも呼ばれていると聞くだろう)。そのメタデータは、最初に遭遇したプレイヤーでさえも、理論的には無関係のメタデータとの関連性を見分けることができます。
実際にはこれもプレイヤーとタガー戦争に変わったので、多くの人がカスタムの「拡張機能」を使ってタグ付けしています。現在、iTunesはフィールドの使い方と方法を大いに揺さぶっています。他の選手のボールの種類 - mutagen
です。単一のXMP構造の代わりに、iTunesはMP4構造体自体に非ビデオ/オーディオフレーム(実際の「原子」)としてタグを展開し、いくつかの「タグ」は奇妙な名前(バイナリ名など)フォーマット自体を妨害します。この方法には利点がありますが(ストリーミングでメタデータを変更するとライブイベントに非常に便利です)、タグ付けは不必要に複雑になり、また非標準的になります。
とにかく、ID3構造体をMP4コンテナに書き込もうとしているので、ID3タグを書き込むときに問題が発生します。mutagen
は、ファイル全体を解析して基礎ファイルがID3をサポートしているかどうか代わりに、それは正規のMP3ファイルを与えられていると仮定し、間違ったフォーマットで間違った場所に書き留めます。これは、ファイルの末尾にガベージを追加するだけです(以前のストリーム不可能なID3バージョン)。その結果、M4Aコンテナが破損します。ファイルを読み込んだときにも同じことが起こります。以前は予測可能な場所に書き込んだID3構造体を読み取ることができますが、残りのデータは気にしません。
MP4/M4Aコンテナを扱うときは、MP4コンテナで動作するように、mutagen.mp4.MP4
(またはその下のmutagen.mp4.MP4Tags
)を使用してください。
from mutagen.mp4 import MP4
def get_description(filename):
return MP4(filename).tags.get("desc", [None])[-1]
def set_description(filename, description):
tags = MP4(filename).tags
tags["desc"] = description
tags.save(filename)
注:「タグ」ごとに複数のエントリが既存のタグのように返すようにサポートされているように私はget_description()
機能で唯一の最後のdesc
エントリを使用していますが、あなたがしようとしているとして例えば、desc
タグを変更するにはリスト。あなたは明らかに生産環境で上記を使用していないでしょう。あなたがmutagen.mp4.MP4Tag
ドキュメントを確認することができます「はサポート」(というかiTunesは、うーん、奨励)キーのフルセットのために
print("Current description: {}".format(get_description("test.m4a")))
# Current description: None
set_description("test.m4a", "Test description") # let's add some description
print("Current description: {}".format(get_description("test.m4a")))
# Current description: Test description
# You can also modify the description once set:
set_description("test.m4a", get_description("test.m4a") + " update")
print("Current description: {}".format(get_description("test.m4a")))
# Current description: Test description update
# etc.
:
あなたはでそれをテストすることができます。もちろん、自由形式の構造(つまり、----:foo:bar
)を使用して独自の鍵を作成することはできますが、他のプレーヤーがそれらを認識することは期待していません。
MP3!= MP4、なぜM4AファイルでID3を使用しようとしていますか? Googleに突入するのは難しかったのですか?突然変異誘発m4aタグと、[非常に最初のリンク](http://mutagen.readthedocs.io/en/latest/api/mp4.html)に行きます。 MP4ファイルのタグを編集するのに使用しますか? – zwer
PythonとOSのどちらのバージョンですか? –
@Anthony Kong python3.6 on windows10 – dobrovv