モブ沢工房

プログラミングとかLinux関連(特にOSSのグラフィックツール関連)とかレトロゲームとか3Dプリンタやら日曜大工等、色々。

LinuxでWalkman NW-S784/NW-E062向けにmp3のカバーアートを設定する

カバーアートや曲名・アーチストが、itunes/ipod touchでは表示できているのに、walkmanではどれも認識されない、という現象に以前遭遇し、粘着に調べた挙句ようやく解決できたのですが、やはり何か書いたつもりがfc2にもはてなにも書いてなかったので書き忘れた模様…

修正にはpython+eyeD3*1を使いました。なおこのカバーアート対応法、プレイリストとは違いNW-E062でも通用します。

検索で得た様々な知見を総合すると

  • ID3はv2.3でないとダメ。itunesでやるとv2.4にされる。
  • カバーアートはeyeD3.frames.ImageFrame.FRONT_COVERでないとダメっぽい
  • エンコーディングはeyeD3.frames.UTF_16_ENCODING

あと直接関係はないのですが

  • 330x330pxの画像をカバーアートにしたらVLCでのテストでは大丈夫でしたが、walkmanが認識してくれなかった!(160x160にしたら通った)
import eyeD3
import os

cm='/foo/bar/hoge.mp3'
image_path='/foo/bar/hoge.jpg'

tag=eyeD3.Tag()
tag.link(cm)
tag.header.setVersion(eyeD3.ID3_V2_3)
tag.setTextEncoding(eyeD3.frames.UTF_16_ENCODING)
if os.path.exists(image_path):
    tag.removeImages()
    tag.addImage(eyeD3.frames.ImageFrame.FRONT_COVER,image_path)

tag.update()

こんな感じになります。実はpythonスクリプトも作ったんですがあまりにも自分向けに特化していたのでさすがに恥ずかしく、公開はさし控えておきますです…単にこれにglob.globで得たパス全てにfor-eachするぐらいの違いなんですけどね。

なお、これで対応させたmp3はitunesなどでも正常に表示できます。 さらに、Amazonのデジタルミュージックで購入した楽曲は、何もせずとも正常に表示できます。

*1:eyeD3は単体でも使えますけどね