PythonでFlacファイルを扱う

ハイレゾにも対応していてタグも扱え、かつ可逆圧縮といった利点があり徐々に普及してきているflac形式のファイル。CDもwavで取り込むと容量を使いすぎるので最近はflacで取り込んでいます。可逆圧縮なので曲によって差がありますが、wavに比べて60%くらいの容量にできるので重宝しています。しかし、Windowsではタグを編集したりアートワークを埋め込む事が出来るソフトがありますがMacでは使い勝手が良いソフトがない・・・。というわけでバッチ処理のように一括処理ができ、かつ扱いやすいPythonでflacのタグやアートワークを編集する方法を調べてみました。

CDの取り込み

いつもCDの取り込みにはXLDを利用しています。このソフトはエラーチェックや様々な形式で取り込めたりと便利なのですが、取り込みとファイル変換ソフトなので後付けでのタグ編集機能はありません。たとえば、すでに取り込んだflacファイルのアーティストタグを書き換えたい、アートワークを差し替えたいといった事をしたい場合はXLDに取り込んでもう一度flacファイルを書き出す必要があり手間がかかります。wavファイルをXLDで読み込んでタグを付けてflacファイルに書き出すみたいな時は別に手間では無いですが、すでに取り込んだflacファイルの一部のタグを書き換えるためにまたflacファイルに変換するのは面倒だな。。。

タグ書き換えはVLCで可能

タグの文字を変更するのであればVLCで可能です。しかし、現状アートワークの書き換えに対応してない!
スクリーンショット 2015-09-13 13.35.07

助けて!Python!!

とりあえず困ったときのPython頼み。今回はmutagenというモジュールを利用します。各種音声ファイルのタグを扱えるモジュールです。

モジュールのインポート

今回はFlacを読み込みたいのでmutagen内のFlac用のモジュールを読み込みます。
from mutagen.flac import FLAC
from mutagen.flac import Picture

flacはflacファイルを読み込む機能、Pictureはflacに画像ファイルを書き込む際に利用します。

flacファイルの読み込み

今回は同一ディレクトリ内にある「僕たちはひとつの光.flac」を読み込んでみます。ファイルパスは絶対パスで入力するか、またはosモジュールをインポートして相対パスで読み込めるようにディレクトリ移動するなどしておいてください。
audio = FLAC(’01 僕たちはひとつの光.flac’)
この1行で読み込めます。

タグの書き換え

audio
と入力するとタグ情報が表示されます。
{‘date’: [‘2015’], ‘album’: [‘僕たちはひとつの光/Future style’], ‘mcn’: [‘4540774143634’], ‘isrc’: [‘JPI101500844’], ‘totaltracks’: [‘4’], ‘tracktotal’: [‘4’], ‘genre’: [‘Anime’], ‘tracknumber’: [‘1’], ‘artist’: [“μ’s”], ‘itunes_cddb_1’: [‘3E048B04+87388+4+150+22294+43910+65998’], ‘title’: [‘僕たちはひとつの光’], ‘encoder’: [‘X Lossless Decoder 20141129’], ‘compilation’: [‘1’]}

audio[‘title’]
audio[‘artist’]
audio[‘date’]
などでそれに対応した文字列が表示されます。
audio[‘date’] = ‘20150715’
などで対応したタグを書き換えることが出来ます。
保存する場合は
audio.save()
を実行します。

アートワークの書き換え

cover.jpgというファイルをアートワークとして埋め込む場合です。
img = Picture()
audio.clear_pictures() #アートワークを削除. 埋め込まれていない場合は必要ない
img.type = 3    #アートワークのタイプ カバーアートや裏面などタイプによって指定が違う. 通常はCDジャケットの表面なので3を指定
img.mime = ‘image/jpg’ #ファイルタイプ
img.desc = ‘front cover’
img.width = 500 #アートワークの横幅
img.height = 500 #アートワークの高さ
img.colors = 0
img.data = open(‘cover.jpg’,mode=’rb’).read()
audio.add_picture(img) #先ほど開いたオーディオファイルに追加
audio.save() #ファイルを保存
これだけでファイルのアートワークが変更できます。環境によっては書き換えに時間がかかる可能性があります。img.type=で指定されている番号はflacの仕様によって定められているのでアイコンやジャケットの裏面、アーティスト写真など別に指定したい場合は値を変更してください。通常の使用では3でいいとおもいます。

0: Other
1: 32×32 pixels ‘file icon’ (PNG only)
2: Other file icon
3: Cover (front)
4: Cover (back)
5: Leaflet page
6: Media (e.g. label side of CD)
7: Lead artist/lead performer/soloist
8: Artist/performer
9: Conductor
10: Band/Orchestra
11: Composer
12: Lyricist/text writer
13: Recording Location
14: During recording
15: During performance
16: Movie/video screen capture
17: A bright coloured fish
18: Illustration
19: Band/artist logotype
20: Publisher/Studio logotype

globモジュールなどでディレクトリ内のflacファイル一覧を取得しfor文で回せば一括でディレクトリ内のflacファイルのアートワークを書き換えることが可能です。

広告

コメントを残す(連絡がとれるメールアドレスをメールアドレス欄に入力していただければ内容によっては直接メールアドレス宛に返信します)

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中