目次

Mutagen

Mutagen Logo
本家: Overview - mutagen
ソースコード: quodlibet/mutagen: Python module for handling audio metadata

Mutagen は、オーディオメタデータを処理する Python モジュールである。
ASF、FLAC、MP4、Monkey's Audio、MP3、Musepack、Ogg Opus、Ogg FLAC、Ogg Speex、Ogg Theora、Ogg Vorbis、True Audio、WavPack、OptimFROG、および AIFF オーディオファイルをサポートしている。
ID3v2 のすべてのバージョンがサポートされており、すべての標準 ID3v2.4 フレームが解析される。
Xing ヘッダーを読み取って、MP3 のビットレートと長さを正確に計算できる。
ID3 および APEv2 タグは、オーディオ形式に関係なく編集できる。
また、個々のパケット/ページレベルで Ogg ストリームを操作できる。

Mutagen は、Linux、Windows、および macOS 上の Python 2.7、3.5+ (CPython および PyPy) で動作し、Python 標準ライブラリ以外の依存関係は無い。Mutagen は GPL バージョン 2 以降でライセンスされている。
Overview — mutagen より

Mutagen を利用したアプリ

Home — puddletag
keithgg/puddletag: Powerful, simple, audio tag editor for GNU/Linux - github

インストール

$ pip install mutagen
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting mutagen
  Downloading https://files.pythonhosted.org/packages/16/b3/f7aa8edf2ff4495116f95fd442b2a346aa55d1d46313143c8814886dbcdb/mutagen-1.45.1-py3-none-any.whl (218kB)
    100% |████████████████████████████████| 225kB 226kB/s
Installing collected packages: mutagen
Successfully installed mutagen-1.45.1

基礎知識

ID3 Tag のネット情報源

MusicBrainz - The Open Music Encyclopedia

音楽ファイルフォーマット

.mp3 (MPEG-1 Audio Layer-3)

MP3 (エムピースリー、英: MPEG-1 Audio Layer-3) は、音響データを圧縮する技術の1つであり、それから作られる音声ファイルフォーマットでもある。ファイルの拡張子は「.mp3」である。
MP3 - Wikipedia より

PS > py
Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 23:11:46) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import mutagen
>>> ft = mutagen.File(r"B'z\048.15.2006.MONSTER\01 - ALL-OUT ATTACK.mp3")
>>> ft.info.pprint()
'MPEG 1 layer 3, 192000 bps (CBR?), 44100 Hz, 2 chn, 251.37 seconds'
>>>

.m4a (MPEG-4 audio ALAC/AAC-LC)

.m4a、.m4b、.m4v、.m4p、.m4r は Apple 社が決めた拡張子である。

拡張子 形式 補足
.m4a MPEG-4 Audio File AAC/Apple Lossless エンコーダ, DRM保護なし
.m4b MPEG-4 Audio Book File iTunes ストア オーディオブック ファイル, Apple FairPlay DRM保護
.m4v MPEG-4 Video File Apple FairPlay DRM保護/保護なし
.m4p MPEG-4 Music Store Audio File Apple Music, Apple FairPlay DRM保護
.m4r MPEG-4 Ringtone File iOS 着信音ファイル

ALAC (Apple Lossless Audio Codec)
※iTunes で Apple Lossless エンコーダ を選択して .m4a を生成するとこのコーデックが使用される。
AAC (Advanced Audio Coding)
AAC-LC (AAC Low Complexity)
※iTunes で AAC エンコーダ を選択して .m4a を生成するとこのコーデックが使用される。

AAC - Wikipedia より
MP4 - Wikipedia より

PS > py
Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 23:11:46) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> import mutagen
>>> import wave
 
>>> wf = wave.open(r"B'z\DINOSAUR\01 Dinosaur.wav", 'r')
>>> wf.getparams()
_wave_params(nchannels=2, sampwidth=2, framerate=48000, nframes=14940800, comptype='NONE', compname='not compressed')
>>> '{:,}'.format(os.path.getsize(r"B'z\DINOSAUR\01 Dinosaur.wav"))
'59,763,244'
 
>>> ft = mutagen.File(r"B'z\DINOSAUR\01 Dinosaur.m4a")
>>> ft.info.pprint()
'MPEG-4 audio (ALAC), 311.27 seconds, 972145 bps'
>>> '{:,}'.format(os.path.getsize(r"B'z\DINOSAUR\01 Dinosaur.m4a"))
'37,853,103'
 
>>> ft = mutagen.File(r"B'z\054.20.2017.DINOSAUR\01 Dinosaur.m4a")
>>> ft.info.pprint()
'MPEG-4 audio (AAC LC), 311.33 seconds, 320000 bps'
>>> '{:,}'.format(os.path.getsize(r"B'z\054.20.2017.DINOSAUR\01 Dinosaur.m4a"))
'13,562,702'
>>>
.wav .m4a(ALAC) .m4a(AAC-LC)
ビットレート 1,536.0 kbps 972.145 kbps 320.0 kbps
サイズ(byte) 59,763,244
(100%)
37,853,103
(63%)
13,562,702
(22%)

※ビットレート
 44100Hz × 16bit × 2ch(ステレオ) = 1,411.2kbps
 48000Hz x 16bit × 2ch(ステレオ) = 1,536.0kbps

参考文献

AAC、M4A、M4B、M4PとM4Rとは?iTunes音声形式の説明 - TuneMobie
デジタルオーディオの仕組み - 音声圧縮の原理 MP3, AAC, ATRAC, etc. - White croQuis
サンプリング周波数とビットレート - Smile Engineering blog ( スマイルエンジニアリング・ブログ )

python - Is it possible to add ID3 tags to m4a files using mutagen? - Stack Overflow
python-discid 1.1 — python-discid 1.1 documentation
[日記] CDの曲情報ってどうやって取得しているの? CDDB / TOC « きんくまデザイン

ID3タグ
ID3タグ - Wikipedia
MP3 ファイルのタグについての解説 (id3v1, id3v2, MPEG フレームヘッダ, XING ヘッダ) - Y-Lab. Electronics

ID3 マッピングテーブル
Tag Mapping - Hydrogenaudio Knowledgebase